Nestjs项目实战 使用GCP(Google Cloud Platform)部署

最近在尝试将NestJS项目部署到GCP上,但在实际操作中遇到了一些问题。首先不太清楚应该选择GCP的哪个服务来部署最合适(Cloud Run、App Engine还是Compute Engine),其次在配置服务账号权限时总是出现权限不足的错误。另外想请教各位:1) 如何正确设置环境变量和密钥管理?2) 部署后怎么配置HTTPS和自定义域名?3) 有没有推荐的CI/CD流程可以和GCP集成?希望有实战经验的朋友能分享下具体的配置步骤和注意事项。

3 回复

首先,你需要确保你的 NestJS 项目已经开发完成并经过充分测试。然后按照以下步骤在 GCP 上部署:

  1. 创建 GCP 账号:如果还没有账号,注册一个并创建新项目。

  2. 配置 Cloud SDK:安装 Google Cloud SDK 并通过命令行登录,运行 gcloud auth login

  3. 设置 Compute Engine 或 App Engine

    • Compute Engine: 创建一个新的虚拟机实例,选择适合的机器类型和操作系统(如 Ubuntu)。
    • App Engine: 如果项目适合无服务器架构,可以使用 App Engine 部署。
  4. 构建 Docker 容器:为 NestJS 应用创建 Dockerfile,包含基础镜像、复制项目文件、安装依赖和启动服务等步骤。

  5. 上传到 Container Registry:使用 gcloud builds submit --tag gcr.io/your-project-id/nestjs-app 将 Docker 镜像推送到 Google 的容器 registry。

  6. 部署应用:在 Compute Engine 中使用该容器部署新的实例,或者在 App Engine 中指定使用刚才推送的镜像进行部署。

  7. 配置域名与负载均衡:根据需要配置域名映射和负载均衡器来优化访问性能。

  8. 监控与日志:启用 Stackdriver(现称 Google Cloud Operations Suite)来监控应用状态和分析日志。

通过以上步骤,你应该能够成功地将 NestJS 应用部署到 Google Cloud Platform 上。记得定期检查应用性能和安全更新!


首先,在Google Cloud Console创建项目并启用Cloud Run服务。安装gcloud CLI工具并登录。确保已安装Node.js和npm,初始化NestJS项目后构建为生产环境:npm run build

在项目根目录下使用gcloud builds submit --tag gcr.io/your-project-id/nestjs-app构建容器镜像并推送到Google Container Registry。

接着,使用gcloud run deploy命令部署到Cloud Run,例如:gcloud run deploy nestjs-service --image gcr.io/your-project-id/nestjs-app --platform managed。记得设置允许未认证访问或配置身份验证。

部署完成后,获取服务URL,通过Postman测试API接口。此外,可以在Google Cloud Monitoring监控日志和性能指标,优化资源配置以降低成本。保持环境变量的敏感信息使用Secret Manager管理。

在NestJS项目中使用GCP部署的实战步骤如下:

  1. 项目准备
  • 确保项目有完整配置的Dockerfile
FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
CMD ["npm", "run", "start:prod"]
  1. GCP服务选择
  • 推荐使用Cloud Run(无服务器容器服务)
  • 或Compute Engine(IaaS)
  1. 部署到Cloud Run
# 构建镜像
gcloud builds submit --tag gcr.io/[PROJECT-ID]/nestjs-app

# 部署服务
gcloud run deploy nestjs-service \
  --image gcr.io/[PROJECT-ID]/nestjs-app \
  --platform managed \
  --region us-central1 \
  --allow-unauthenticated
  1. 关键配置
  • main.ts中设置正确的端口:
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(process.env.PORT || 3000);
}
  1. 数据库连接
  • 使用Cloud SQL PostgreSQL/MySQL
  • 配置连接时使用GCP提供的socket路径
  1. 环境变量管理
  • 通过Secret Manager存储敏感信息
  • 在Cloud Run中关联secrets
  1. CI/CD设置
  • 使用Cloud Build自动触发部署
  • 配置cloudbuild.yaml构建流程

提示:部署前先用gcloud auth login登录,并设置好项目ID。建议先在本地用Docker测试镜像能否正常运行。

回到顶部