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

使用PM2实现零停机部署遇端口冲突问题求助

问题分析与解决方案

端口冲突是否正常?

不正常。PM2的集群模式(exec_mode: "cluster")基于Node.js原生cluster模块实现,主进程会负责监听端口并将请求转发给子进程,子进程无需单独处理端口监听逻辑,因此不会出现端口冲突。你遇到的问题是配置错误导致PM2的集群机制未生效。

核心问题:PM2配置错误

你的ecosystem.config.js中用script: "yarn"和args: "start:stag"让PM2启动了yarn进程,而非直接启动Node.js应用进程。这种情况下:

  • PM2无法直接管理Express应用的子进程,而是管理yarn进程
  • yarn启动的两个Express实例会各自独立监听3000端口,必然导致冲突

修正配置实现集群模式

将配置改为直接指向Express应用的入口文件,让PM2直接管理Node进程:

module.exports = {
  apps : [{
    name   : "enterprise",
    script : "./app.js", // 替换为你的Express实际入口文件路径(比如bin/www)
    instances: 2,
    exec_mode: "cluster",
    error_file: "./error-log",
    cwd: "project/packages/backend",
    // 用env字段配置环境变量,替代yarn脚本的环境参数
    env_stag: {
      NODE_ENV: "staging",
      // 其他 staging 环境需要的变量
    }
  }]
}

启动命令:

pm2 start ecosystem.config.js --env stag

实现零停机部署

配置正确后,使用PM2的reload命令实现零停机部署:

pm2 reload enterprise

reload会逐个重启集群实例,确保在更新过程中始终有可用实例处理请求,实现零停机。

额外说明

  • 无需修改Express应用的端口监听代码,保持app.listen(3000)即可,PM2的集群模式会自动处理端口共享
  • 如果你的start:stag脚本包含其他启动参数(比如加载特定配置),可以将参数添加到PM2配置的args字段中,例如:args: "--config stag.config.js"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 16:56:06