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

运行中的NestJS应用构建是否安全?如何实现无停机更新?

NestJS生产环境无停机更新方案及运行时Build的安全性分析

运行时执行npm run build是否安全?

直接在应用运行时执行npm run build不会直接导致运行中应用崩溃,但存在潜在风险:

  • NestJS默认的build命令会将TS代码编译到dist目录,编译过程中会覆盖旧的dist文件。如果运行中的应用刚好在读取某个被覆盖的动态加载模块,可能触发不可预测的错误,但常规场景下Node.js会缓存已加载的模块,因此影响概率较低。
  • 但这个操作解决不了停机问题——你后续重启应用的瞬间,服务还是会中断。

真正实现无停机更新的方案

1. PM2集群模式+重载功能

PM2原生支持零停机重启,步骤如下:

  • 用集群模式启动应用(根据CPU核心数自动分配进程数):
    pm2 start npm --name "nest-prod" -i max -- run start:prod
    
  • 代码变更后,建议在本地完成npm run build,再将dist目录、package.json等必要文件上传到服务器(减少服务器编译耗时和风险)
  • 执行PM2重载命令:
    pm2 reload nest-prod
    
    PM2会逐个重启集群内的进程,始终保留可用进程处理请求,完全避免停机。

2. 蓝绿部署(适用于需灰度验证的场景)

  • 维护两套完全一致的运行环境:蓝环境为当前在线版本,绿环境部署新版本
  • 先在绿环境完成新版本的部署与验证
  • 切换负载均衡器的流量指向绿环境
  • 确认服务稳定后,再停止蓝环境的应用

不推荐的操作

  • 不要在build后直接执行pm2 restart,该命令会一次性杀死所有进程再重启,必然导致服务中断,和你之前的操作本质无区别。
  • 尽量避免在生产服务器上执行npm install,优先在本地安装依赖并打包后上传,降低服务器操作风险与耗时。

内容的提问来源于stack exchange,提问作者Eugene Beliaev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 01:06:30