我有一个节点应用程序与以下启动脚本npm run build && serve -s dist
。我希望在部署时利用PM2集群实现0停机时间。据我所知,PM2应该启动共享相同端口的应用程序的多个实例。我认为我们已经配置好了一切,但是节点应用程序的某些东西导致实例在单独的端口上运行,因此它们不共享端口。我用一个简单的Hello World应用程序进行了测试,它的工作原理完全符合我的预期(所有实例共享一个端口),所以这是指向我在应用程序堆栈中的东西导致它。想知道是否有任何原因,为什么它可能会在自己的端口或任何方向上生成实例,我可以指向。
My PM2生态系统。配置——
module.exports = {
apps : [{
name: "Application",
script: "npm",
args: "start",
exec_mode: "cluster",
instances : 2,
wait_ready: true,
listen_timeout: 30000
}]
}
包。json -
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"test:ci": "vue-cli-service test:unit",
"test": "vue-cli-service test:unit "--verbose"",
"lint": "vue-cli-service lint",
"start": "npm run build && serve -s dist"
},
PM2 ls命令-
➜ application-fe git:(develop) ✗ pm2 ls
┌─────┬────────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼────────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ Application │ default │ N/A │ cluster │ 62342 │ 67s │ 0 │ online │ 0% │ 46.5mb │ user… │ disabled │
│ 1 │ Application │ default │ N/A │ cluster │ 62476 │ 37s │ 0 │ online │ 0% │ 45.4mb │ user… │ disabled │
└─────┴────────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
为每个实例打开的端口-
➜ application-fe git:(develop) ✗ sudo lsof -i -P -n | grep LISTEN | grep node
node 62522 user 23u IPv6 0x724bf7c95bff58bb 0t0 TCP *:5000 (LISTEN)
node 62551 user 21u IPv6 0x724bf7c95322025b 0t0 TCP *:51494 (LISTEN)
看起来可以归结为使用" serve -s dist"在package.json.
切换到使用express服务静态文件和PM2创建两个实例共享端口并按预期行为