【问题标题】:How can I load environment variables via command line when running a node.js app in cluster mode with PM2?使用 PM2 在集群模式下运行 node.js 应用程序时,如何通过命令行加载环境变量?
【发布时间】:2020-04-19 17:19:51
【问题描述】:

当使用 node 启动我的应用程序时,我通常会运行:

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

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

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

如果我尝试在集群模式下运行应用程序,它似乎会忽略 node-args 并且无法加载环境变量。

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

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

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

附:确保将环境设置为生产环境,否则在启动应用程序时可能会遇到意外问题。

【问题讨论】:

    标签: node.js reactjs pm2 dotenv


    【解决方案1】:

    您可以为 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'
        }
      }
    };
    

    根据文档中的示例,您可以在 json 文件中添加“exec_mode”。见下文:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-19
      • 2017-10-01
      • 1970-01-01
      • 2021-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多