如何为pm2指定端口号

How to specify a port number for pm2

我正在尝试使用 pm2 来管理 node.js 集群

pm2 start . -i 3

我目前 运行 heroku 上的应用程序并通过上述命令使用 Procfile,但我不知道如何配置 pm2 以使用现有的 PORT env var。类似于 pm2 start . -p $PORT

我错过了什么?

您可以使用环境变量。 例如:

  1. NODE_PORT=3002 pm2 start -i 0 app.js

  2. 以下是如何读取应用程序中的值:

console.log(process.env.NODE_PORT);

或者,如果您正在构建 Express 应用程序:

  1. PORT=3002 pm2 start -i 0 ./bin/www

  2. Express 在应用程序启动时自动加载 PORT

你需要用 -- 告诉 pm2 停止解析他的选项,把剩下的交给程序,然后当你生成直接二进制时,你需要告诉 pm2 你不想使用 nodejs,所以:

pm2 start rethinkdb --interpreter none -- --port 8082

你看你需要-- --port 8082

通过 PM2

告诉服务器应用程序 运行 哪个端口的简单方法

ecosystem configuration files

结合在您的服务器应用程序中正确配置使用 $PORT 环境变量。这意味着您的服务器读取 $PORT 环境变量以在指定端口上启动服务器或微服务。

您可以为文件选择不同的格式。我个人使用 CommonJS 模块格式(其他选项包括 JSON 和 YAML)。

ecosystem.config.js 中,您为要通过 PM2 启动的每个服务器实例指定一个条目对象。

重点是您还可以为不同的进程指定环境变量,这样您就可以为所有进程设置 $PORT。以下是三个不同进程的示例配置。

    module.exports = {
  apps : [
  {
    name      : "Main API server",
    script    : "./backend/dist/main.js",
    instances : "2",
    exec_mode : "cluster",
    env: {
      NODE_ENV: "production",
      PORT: 4300    
    }
  },
  {
    name      : "Worker server 1",
    script    : "./backend-worker/dist/main.js",
    instances : "1",
    exec_mode : "fork",
    env: {
      NODE_ENV: "production",
      PORT: 4000,
    },
    
  },
  {
    name      : "Worker server 2",
    script    : "./backend-worker/dist/main.js",
    instances : "1",
    exec_mode : "fork",
    env: {
      NODE_ENV: "production",
      PORT: 4001,
    }
  },
  ]
}

一个注意事项:此配置使用 PM2 作为第一个进程的负载平衡器,运行s 作为两个核心上的集群。其他(工作)进程 运行 每个都在指定端口上的进程上。

以下是使用 NodeJS 服务器环境 $PORT var 的服务器启动代码示例片段:

// ...
const port = (process.env.PORT) ? process.env.PORT : 4300

console.log('$PORT: ', port)
const server = await app.listen(port, '0.0.0.0')
// ...

一切就绪后,您只需调用以下命令即可启动您的服务器:

pm2 start ecosystem.config.js