Ubuntu 应用在 GCP 上的部署与排错
在 GCP 上排障,链路结构与 AWS 相同,只是服务名不同。先按层拆,不要一上来就怀疑应用代码。
GCP 排障链路
graph TD
A[Cloud DNS 解析] --> B[VPC Firewall 规则]
B --> C[Compute Engine 实例]
C --> D[Nginx 反向代理]
D --> E[应用进程]
E --> F[Cloud Logging 日志]
常见故障对照表
| 现象 | 最可能原因 | 排查方法 |
|---|---|---|
| 域名无法访问 | Cloud DNS NS 未生效 / TTL 缓存 | dig myapp.com NS 确认解析服务器 |
| 连不上服务(超时) | VPC Firewall 规则未匹配实例标签 | gcloud compute firewall-rules list 检查 target-tags |
| 502 Bad Gateway | Nginx 到应用端口不通 | curl http://127.0.0.1:3000/health |
| SSH 无法连接 | 外部 IP 变化 / 防火墙规则 | 用 IAP 隧道 gcloud compute ssh ... --tunnel-through-iap |
| 内存/磁盘打满 | 无 Cloud Ops Agent 监控 | df -h && free -m 直接在实例上查 |
GCP 特有的排查技巧
# 查看实例元数据(确认绑定的 Service Account 和标签)
curl "http://metadata.google.internal/computeMetadata/v1/instance/" \
-H "Metadata-Flavor: Google"
# 实时查看 Cloud Logging 中的应用日志
gcloud logging read "resource.type=gce_instance AND logName=myapp" \
--limit=50 --format="value(textPayload)"
# 检查实例防火墙规则是否命中
gcloud compute instances describe myapp-vm \
--zone=asia-east1-b \
--format="yaml(tags,networkInterfaces)"
# 查看 Ops Agent 是否正常运行
sudo systemctl status google-cloud-ops-agent
部署时的 GCP 特殊注意点
- 外部 IP 默认为临时 IP:实例停止后 IP 会释放,生产环境应提前预留静态外部 IP 并绑定
- 防火墙规则通过标签匹配实例:如果实例启动时忘记加
--tags,对应防火墙规则不会生效,是最常见的"服务起来了但访问不通"问题 - Cloud Logging 有默认保留期:日志默认保存 30 天,重要日志建议导出到 Cloud Storage 长期归档
本节执行清单
- [ ] 走一遍部署流程,记录每步期望输出
- [ ] 验证:域名访问 → Nginx 响应 → 应用返回
- [ ] 确认 Cloud Logging 中有应用日志条目
- [ ] 模拟防火墙规则误删(临时移除 target-tag),用排障表复现并恢复
下一章:Azure 版本实战——完成第三家云平台映射。