【问题标题】:Load a variable from dotenv file when starting PM2启动 PM2 时从 dotenv 文件加载变量
【发布时间】:2019-09-07 15:57:02
【问题描述】:

我将我的应用程序实例作为package.json 脚本使用 PM2 以这种方式启动:

"start:pm2": "pm2 start -i max node myapp.js"

我发现并非团队中的所有成员在开发时都希望使用max 作为实例编号的值,而是更喜欢使用较低的值。

要不更改package.json,我最好让他们更改.env 文件中的值,因为我们已经使用它,以便将其中的值用作pm2 的参数。

我知道我可以创建一个包装器 js 或 bash 脚本来从 .env 文件加载变量并将其传递给 pm2,但最好有一个没有它的解决方案。

我怎样才能做到这一点?

【问题讨论】:

    标签: javascript node.js pm2


    【解决方案1】:

    您可以在“env:”属性下创建ecosystem.config.js 文件和declare your environment variables,在您的情况下,NODE_APP_INSTANCE 可用于设置实例数:

    module.exports = {
      apps : [{
        name: "MyApp",
        script: "./myapp.js",
        env: {
          NODE_ENV: "development",
          NODE_APP_INSTANCE: "max"
        },
        env_production: {
          NODE_ENV: "production",
        }
      }]
    }
    

    然后调用pm2 startpm2 start /path/to/ecosystem.config.js 从其他文件夹加载生态系统。

    【讨论】:

    【解决方案2】:

    这里更好的模式是从代码中删除 dotenv 并在命令行中“要求”它。这使您的代码可以在任何环境(包括基于云的环境)之间很好地传输 - 这是环境变量的主要功能之一。

    a) 在脚本旁边编写 .env 文件(例如 app.js)

    b) 在没有 pm2 的情况下运行您的脚本:

    node -r dotenv/config app.js
    

    c) 在 pm2.config.js 中:

    module.exports = {
      apps : [{
        name      : 'My Application',
        script    : 'app.js',
        node_args : '-r dotenv/config',
        ...
      }],
    }
    

    然后 pm2 start pm2.config.js

    注意:在命令行中使用 dotenv/config 是 dotenv 自己推荐的最佳实践之一

    【讨论】:

    • 您可能需要为您的.env 文件指定一个自定义路径,在这种情况下,您可以使用除上述之外的 PM2 配置属性 'args',如下所示:args: 'dotenv_config_path=relative/path/to/.env'跨度>
    • 添加到@TJBlackman 的精彩提示,如果您指定了路径,请记住该路径是相对于cwd 的。
    猜你喜欢
    • 2017-07-09
    • 2019-11-11
    • 2018-06-05
    • 2015-09-02
    • 2021-11-18
    • 2023-03-14
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多