You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS部署Cloud Run生产环境:如何传入.env.prod至docker-compose

用Docker、docker-compose部署NestJS到Cloud Run生产环境的方案

核心步骤:将.env.prod传入docker-compose并部署

1. 调整docker-compose.yml适配生产环境变量

确保你的docker-compose.yml正确指定加载生产环境配置:

version: '3.8'
services:
  nest-app:
    build: .
    env_file:
      - .env.prod  # 明确加载生产环境变量文件
    ports:
      - "3000:3000"
    restart: always

注:Cloud Run会自动管理端口映射,这里的端口配置仅用于本地调试,部署时Cloud Run会覆盖为你指定的服务端口(建议在Dockerfile中提前暴露3000端口)。

2. 优化Dockerfile适配生产构建

针对NestJS采用多阶段构建,大幅缩小镜像体积:

# 构建阶段:安装所有依赖并编译代码
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# 生产阶段:仅保留生产依赖和编译后的代码
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY --from=builder /app/dist ./dist
EXPOSE 3000
CMD ["node", "dist/main.js"]

这种构建方式能让镜像只包含运行必需的文件,加快Cloud Run的启动速度。

3. 部署到Cloud Run的两种可行方式

方式一:直接用gcloud CLI部署(单服务场景首选)

Cloud Run原生不支持docker-compose.yml,但可以跳过docker-compose,直接构建镜像推送到Google Artifact Registry后部署:

  • 构建并推送镜像:
    gcloud builds submit --tag us-central1-docker.pkg.dev/[你的项目ID]/[仓库名]/nest-app:prod
    
  • 部署时传入.env.prod变量(或直接在Cloud Run控制台配置):
    gcloud run deploy nest-prod-service \
      --image us-central1-docker.pkg.dev/[你的项目ID]/[仓库名]/nest-app:prod \
      --region us-central1 \
      --platform managed \
      --env-vars-file .env.prod \
      --allow-unauthenticated  # 按需配置是否允许公共访问
    

这种方式贴合Cloud Run的无服务器工作流,避免不必要的复杂度。

方式二:docker-compose配合Cloud Run(多服务场景可选)

如果有多个服务需要协同部署,可先用docker-compose build构建所有镜像,逐个推送到镜像仓库后,再分别部署到Cloud Run。不过单服务场景不推荐,Cloud Run针对单服务的弹性扩缩容和资源调度更高效。

最佳实践

  • 敏感变量管理:不要把.env.prod提交到代码仓库,建议用Cloud Run的环境变量配置功能,或Google Secrets Manager存储数据库密码、API密钥等敏感信息,部署时挂载:
    gcloud run deploy nest-prod-service \
      --image [镜像地址] \
      --update-secrets DB_PASSWORD=projects/[项目ID]/secrets/[密钥名]:latest
    
  • 健康检查配置:在NestJS中添加/health这类健康检查端点,在Cloud Run控制台配置健康检查路径,确保服务异常时能自动重启。
  • CI/CD自动化:配置Cloud Build触发器,当代码推送到生产分支(如main)时,自动构建镜像并部署到Cloud Run,实现一键发布。
  • 资源按需配置:根据服务负载调整Cloud Run的CPU、内存配额,设置合理的自动扩缩容规则,平衡性能和成本。

内容的提问来源于stack exchange,提问作者BaoTrung Tran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 20:55:10