PM2 节点应用程序在新端口上生成每个集群实例
PM2 node application spawning each cluster instance on a new port
我有一个带有以下启动凭证的节点应用程序 npm run build && serve -s dist
。我希望在部署时利用 PM2 集群实现 0 停机时间。据我了解,PM2 应该启动所有共享同一端口的应用程序的多个实例。我认为我们已正确配置所有内容,但节点应用程序的某些内容导致实例 运行 在单独的端口上,因此它们不共享端口。我用一个简单的 Hello World 应用程序进行了测试,它完全按照我的预期工作(所有实例共享一个端口),所以这让我指向应用程序堆栈中的某些东西导致它。想知道是否有任何原因可能会在其自己的端口或我可以指向的任何方向生成实例。
我的PM2ecosystem.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)
看起来它归结为在 package.json 中使用“serve -s dist”。
切换到使用 express 为静态文件提供服务,PM2 创建了两个共享端口并按预期运行的实例。
我有一个带有以下启动凭证的节点应用程序 npm run build && serve -s dist
。我希望在部署时利用 PM2 集群实现 0 停机时间。据我了解,PM2 应该启动所有共享同一端口的应用程序的多个实例。我认为我们已正确配置所有内容,但节点应用程序的某些内容导致实例 运行 在单独的端口上,因此它们不共享端口。我用一个简单的 Hello World 应用程序进行了测试,它完全按照我的预期工作(所有实例共享一个端口),所以这让我指向应用程序堆栈中的某些东西导致它。想知道是否有任何原因可能会在其自己的端口或我可以指向的任何方向生成实例。
我的PM2ecosystem.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)
看起来它归结为在 package.json 中使用“serve -s dist”。
切换到使用 express 为静态文件提供服务,PM2 创建了两个共享端口并按预期运行的实例。