Skip to content
返回部署

部署 NestJS 应用

企业级 Angular 风格 Node 框架,含 DI、模块和装饰器,部署为 Node 服务器或 serverless。

平台高级

为什么

NestJS 将企业架构(依赖注入、模块、装饰器)带入 Node.js,使大型后端可维护。Angular 启发的结构可扩展到大团队和复杂领域。

何时使用

大型企业后端、复杂领域、多团队和长期维护用 NestJS。小 API 避免 — 开销不值。

如何做

1. 构建 — nest build 生成 dist/ 含编译 JS 2. Node — node dist/main.js,底层运行 Express/Fastify 3. Docker — 多阶段构建,node:20-alpine 运行时 4. Serverless — @nestjs/serverless 或 serverless.yml 配 Lambda 5. PM2 — pm2 start dist/main.js -i max 集群 6. Swagger — 配 SwaggerModule 则 /api 自动生成文档 7. 微服务 — @nestjs/microservices TCP/Redis/RabbitMQ 传输

示例

// src/main.ts — NestJS 启动 import { NestFactory } from "@nestjs/core"; import { AppModule } from "./app.module"; async function bootstrap() { const app = await NestFactory.create(AppModule); app.enableShutdownHooks(); // 优雅关闭 await app.listen(process.env.PORT ?? 3000); } bootstrap(); // Dockerfile FROM node:20-alpine AS build WORKDIR /app COPY . . RUN npm ci && npm run build FROM node:20-alpine WORKDIR /app COPY --from=build /app/dist ./dist COPY --from=build /app/node_modules ./node_modules EXPOSE 3000 CMD ["node", "dist/main.js"] // serverless.yml — Lambda 部署 functions: api: handler: dist/main.handler events: - http: { path: /{proxy+}, method: ANY }

常见问题

  • ⚠DI 循环依赖 — 两个 provider 互相注入,用 forwardRef() 打破循环
  • ⚠生产找不到模块 — dist/ 缺文件,检查 nest-cli.json assets 和 webpack
  • ⚠Serverless 冷启动 5+ 秒 — NestJS 冷启动引导所有模块,用懒模块

最佳实践

  • ✓用 enableShutdownHooks() — 确保容器化部署 SIGTERM 优雅关闭
  • ✓模块小且按特性划分 — 全局模块产生耦合和慢冷启动
  • ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求

常见问题解答