【发布时间】:2021-11-12 09:46:28
【问题描述】:
我有一个带有以下启动脚本npm run build && serve -s dist 的节点应用程序。我希望在部署时利用 PM2 集群实现 0 停机时间。据我了解,PM2 应该启动多个共享同一端口的应用程序实例。我认为我们已经正确配置了所有内容,但是节点应用程序的某些内容导致实例在单独的端口上运行,因此它们不共享该端口。我使用一个简单的 Hello World 应用程序进行了测试,它的工作方式完全符合我的预期(所有实例共享一个端口),因此这将我指向导致它的应用程序堆栈中的某些东西。想知道它是否有任何理由在自己的端口或我可以指向的任何方向上生成实例。
我的 PM2 生态系统.config -
module.exports = {
apps : [{
name: "Application",
script: "npm",
args: "start",
exec_mode: "cluster",
instances : 2,
wait_ready: true,
listen_timeout: 30000
}]
}
Package.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)
【问题讨论】: