如何为pm2指定端口号

时间:2015-07-19 14:38:01

标签: node.js heroku pm2

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

pm2 start . -i 3

我目前正在heroku上运行app并使用带有上述命令的Procfile,但我无法弄清楚如何配置pm2以使用现有的PORT env var。像pm2 start . -p $PORT

这样的东西

我错过了什么?

3 个答案:

答案 0 :(得分:29)

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

1)NODE_PORT = 3002 pm2 start -I 0 app.js

2)在app中读取值:

console.log(process.env.NODE_PORT);

或者,如果你是build express app:

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

2)在启动应用程序时自动快速加载PORT。

答案 1 :(得分:0)

您需要使用-告诉pm2停止解析他的选项,并将其余的交给程序,然后在生成直接二进制文件时,您需要告诉pm2您不想使用nodejs,所以: / p>

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

您看到自己需要-- --port 8082

答案 2 :(得分:0)

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

生态系统配置文件

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

文件有多种可用格式可供选择。我个人使用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作为第一个在两个内核上作为群集运行的进程的负载平衡器。其他(工作程序)进程分别在指定端口上的进程中运行。

以下是使用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