部署到 Google Cloud Run
GCP serverless 容器,缩到零、按请求付费和自动 HTTPS。
平台进阶
为什么
Cloud Run serverless 运行任何容器 — 空闲缩到零,仅按请求付费。自动处理 HTTPS、自动扩缩和日志,是 GCP 上最简单的容器部署方式。
平台即服务采用率 2024 年增长 24%,团队从虚拟机管理转向 git push 部署。the cloud infrastructure market reached $330B in 2024, growing 22% year-over-year (Synergy Research),PaaS 层捕获了大多数新工作负载。
何时使用
无状态容器化 API、Web 应用和后台 worker 用 Cloud Run。有状态应用或 WebSocket 密集工作负载避免。
如何做
1. 构建镜像 — docker build -t gcr.io/PROJECT/app .
2. 推送 — docker push gcr.io/PROJECT/app
3. 部署 — gcloud run deploy app --image gcr.io/PROJECT/app --region us-central1
4. 允许未认证 — --allow-unauthenticated 用于公共 API
5. 环境变量 — --set-env-vars KEY=VALUE
6. 自动扩缩 — --min-instances 1 --max-instances 10
7. Cloud SQL — --add-cloudsql-instances 用于 Postgres/MySQL
示例
# 从源码部署(Cloud Build 自动构建)
gcloud run deploy myapp --source . --region us-central1 --allow-unauthenticated --set-env-vars DATABASE_URL=postgres://... --min-instances 0 --max-instances 10 --memory 512Mi --cpu 1
# Dockerfile(任何容器可用)
FROM node:20-alpine
WORKDIR /app
COPY . .
RUN npm ci && npm run build
EXPOSE 8080
CMD ["node", "dist/server.js"] # 须监听 $PORT
常见问题
- ⚠容器不监听 PORT — Cloud Run 注入 PORT 环境变量,须绑定 0.0.0.0:$PORT
- ⚠冷启动 5-10s — 首次请求拉取启动容器,设 --min-instances 1 避免
- ⚠环境间配置漂移 — 使用基础设施即代码(Terraform/Pulumi)保持 dev/staging/prod 一致
最佳实践
- ✓延迟敏感 API 设 --min-instances 1 — 小成本消除冷启动
- ✓简单部署用 --source . — Cloud Build 自动构建推送镜像
- ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求