如何为pm2指定端口号

Luk*_*e W 21 heroku node.js pm2

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

pm2 start . -i 3
Run Code Online (Sandbox Code Playgroud)

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

我错过了什么?

std*_*b-- 31

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

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

2)在app中读取值:

console.log(process.env.NODE_PORT);

或者,如果您是构建快速应用程序:

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

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

  • 谢谢@stdob.我不需要在代码中访问env var.我需要配置pm2以在指定端口上启动节点实例. (2认同)
  • @ Anoop.PA对你的评论抱歉有点迟了.希望你明白了.如果没有,当在linux/unix机器上的本地环境中运行时,1024以下的端口需要sudo.所以你想做PORT-80 sudo pm2开始...... (2认同)

小智 8

您需要使用 -- 告诉 pm2 停止解析他的选项并将其余部分交给程序,然后当您生成直接二进制文件时,您需要告诉 pm2 您不想使用 nodejs,因此:

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

你看你需要 -- --port 8082

  • 这工作正常`pm2 start dev -- --port 3100`。只要确保在“--port”之前有额外的“--”即可。我自己曾经时不时地对环境变量感到困惑,这为我解决了这个问题。 (2认同)

Tor*_*hel 5

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

生态系统配置文件

与服务器应用程序中正确配置的 $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,
    }
  },
  ]
}
Run Code Online (Sandbox Code Playgroud)

需要注意的是:此配置使用 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')
// ...
Run Code Online (Sandbox Code Playgroud)

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

pm2 start ecosystem.config.js
Run Code Online (Sandbox Code Playgroud)