【问题标题】:PM2 node application spawning each cluster instance on a new portPM2 节点应用程序在新端口上生成每个集群实例
【发布时间】: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)

【问题讨论】:

    标签: node.js vue.js pm2 serve


    【解决方案1】:

    看起来它归结为在 package.json 中使用“serve -s dist”。

    切换到使用 express 来提供静态文件,PM2 创建两个共享端口并按预期运行的实例。

    【讨论】:

      猜你喜欢
      • 2017-10-25
      • 2018-10-20
      • 2017-11-17
      • 1970-01-01
      • 2018-01-17
      • 2015-05-13
      • 2021-05-27
      • 1970-01-01
      • 2021-02-12
      相关资源
      最近更新 更多