Nestjs项目实战 使用GCP(Google Cloud Platform)部署
最近在尝试将NestJS项目部署到GCP上,但在实际操作中遇到了一些问题。首先不太清楚应该选择GCP的哪个服务来部署最合适(Cloud Run、App Engine还是Compute Engine),其次在配置服务账号权限时总是出现权限不足的错误。另外想请教各位:1) 如何正确设置环境变量和密钥管理?2) 部署后怎么配置HTTPS和自定义域名?3) 有没有推荐的CI/CD流程可以和GCP集成?希望有实战经验的朋友能分享下具体的配置步骤和注意事项。
首先,你需要确保你的 NestJS 项目已经开发完成并经过充分测试。然后按照以下步骤在 GCP 上部署:
-
创建 GCP 账号:如果还没有账号,注册一个并创建新项目。
-
配置 Cloud SDK:安装 Google Cloud SDK 并通过命令行登录,运行
gcloud auth login
。 -
设置 Compute Engine 或 App Engine:
- Compute Engine: 创建一个新的虚拟机实例,选择适合的机器类型和操作系统(如 Ubuntu)。
- App Engine: 如果项目适合无服务器架构,可以使用 App Engine 部署。
-
构建 Docker 容器:为 NestJS 应用创建 Dockerfile,包含基础镜像、复制项目文件、安装依赖和启动服务等步骤。
-
上传到 Container Registry:使用
gcloud builds submit --tag gcr.io/your-project-id/nestjs-app
将 Docker 镜像推送到 Google 的容器 registry。 -
部署应用:在 Compute Engine 中使用该容器部署新的实例,或者在 App Engine 中指定使用刚才推送的镜像进行部署。
-
配置域名与负载均衡:根据需要配置域名映射和负载均衡器来优化访问性能。
-
监控与日志:启用 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部署的实战步骤如下:
- 项目准备
- 确保项目有完整配置的
Dockerfile
FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
CMD ["npm", "run", "start:prod"]
- GCP服务选择
- 推荐使用Cloud Run(无服务器容器服务)
- 或Compute Engine(IaaS)
- 部署到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
- 关键配置
- 在
main.ts
中设置正确的端口:
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(process.env.PORT || 3000);
}
- 数据库连接
- 使用Cloud SQL PostgreSQL/MySQL
- 配置连接时使用GCP提供的socket路径
- 环境变量管理
- 通过Secret Manager存储敏感信息
- 在Cloud Run中关联secrets
- CI/CD设置
- 使用Cloud Build自动触发部署
- 配置
cloudbuild.yaml
构建流程
提示:部署前先用gcloud auth login
登录,并设置好项目ID。建议先在本地用Docker测试镜像能否正常运行。