我想使用pm2实现零停机部署,我读过很多文章、指南、github问题,它们都指向相同的方法,即使用像这样的集群方法
pm2 start app.js -i 2 <number of instances>
嗯,这有效,它启动了同一个应用程序的 2 个进程,事情是,我的 Express 应用程序默认在 PORT 3000 上运行,据我了解,这个集群应该像 docker 一样工作,所以我不应该担心端口 3000 正在使用,但我收到了该错误。
这应该发生吗?如何通过这种方法实现零停机部署?我不清楚端口是否应该被占用或者我是否做错了什么。
我已经尝试了本指南中的所有内容https://medium.com/learnwithrahul/zero-downtime-deployments-with-pm2-93013713df15以及相关内容。
这是我的 pm2 配置文件(ecosystem.config.js)
module.exports = {
apps : [{
name : "enterprise",
script : "yarn",
instances: "2",
exec_mode: "cluster",
error_file: "./error-log",
cwd: "project/packages/backend",
args: "start:stag"
}]
}
我也尝试过
wait-ready
参数,但这不是我现在的首要任务。
不完全确定这是否对您的特定场景有帮助,但也许 可以帮助别人。
我对 NextJS 应用程序也有同样的问题,当我尝试在集群模式下运行它时,应用程序的第二个实例失败,因为端口
3000
已在使用中。
这是因为我在
script
属性 nx next start my-app
中,将其更改为 script: 'node_modules/next/dist/bin/next'
后,PM2 能够在集群模式下正确运行它。
确保您的
node_modules
文件夹中有 cwd
文件夹。