当 运行 a node.js 应用程序在集群模式下使用 PM2 时,如何通过命令行加载环境变量?

How can I load environment variables via command line when running a node.js app in cluster mode with PM2?

使用节点启动我的应用程序时,我通常 运行:

node -r dotenv/config ./build/index.js

在 fork 模式下使用 PM2 时,我可以像这样启动应用程序:

pm2 start --node-args="-r dotenv/config" build/index.js --name API

如果我尝试 运行 集群模式下的应用程序,它似乎忽略了节点参数并且无法加载环境变量。

pm2 start --node-args="-r dotenv/config" build/index.js -i max --name API

在不明确将其添加到应用程序代码中的情况下,解决此问题的正确解决方法是什么?我应该一开始就这样做吗?

更新: 看起来 pm2 ecosystem 是注入命令行参数的正确方法,如果您正在集群模式下寻找 运行 应用程序。使用 node_args: '-r dotenv/config' 我能够达到预期的结果。谢谢!

P.S。确保将环境设置为生产环境,否则在启动应用程序时可能 运行 出现意外问题。

你可以使用 PM2 的生态系统文件吗?

运行下面会生成一个基本的配置文件。

pm2 ecosystem

默认文件如下:

module.exports = {
  apps : [{
    name: 'API',
    script: 'app.js',

    // Options reference: https://pm2.keymetrics.io/docs/usage/application-declaration/
    args: 'one two',
    instances: 1,
    autorestart: true,
    watch: false,
    max_memory_restart: '1G',
    env: {
      NODE_ENV: 'development'
    },
    env_production: {
      NODE_ENV: 'production'
    }
  }],

  deploy : {
    production : {
      user : 'node',
      host : 'localhost',
      ref  : 'origin/master',
      repo : 'git@github.com:repo.git',
      path : '/var/www/production',
      'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production'
    }
  }
};

根据文档中的示例,您可以将 "exec_mode" 添加到 json 文件。见下文:

module.exports = {
  apps : [{
    name        : "worker",
    script      : "./worker.js",
    watch       : true,
    env: {
      "NODE_ENV": "development",
    },
    env_production : {
       "NODE_ENV": "production"
    }
  },{
    name       : "api-app",
    script     : "./api.js",
    instances  : 4,
    exec_mode  : "cluster"
  }]
}

根据需要修改文件并 运行 使用:

pm2 start ecosystem.config.js