使用pm2将环境变量传递给node.js

16

我正在尝试将一些参数传递给由pm2运行的Express应用程序。他们的文档中没有任何提示可以这样做,但似乎可以像SOME_STUFF=xxx pm2 start app.js这样向您的节点应用程序传递一些环境变量。

6个回答

30
注意 - 在更新环境变量后,您必须执行以下操作: pm2 restart all --update-env 问我怎么知道的...
编辑:还要在节点源目录中查找.env文件...

漂亮,解决了我一直想解决一个小时的问题。 - Steven Matthews

15

9
奇怪,这个方法对我不起作用。但是 SOME_STUFF=xxx pm2 start app.js 生效了。你有什么想法为什么会这样? - devansvd
1
@Andrius 非常感谢。我花了两个小时尝试不同的方法,幸运的是最终找到了这里。 - No Sound
只是确认使用“--”解决了我的问题,即从自定义容器加载Azure App Service ENV变量到PM2。这是必不可少的内容。 - rodneyt

11

环境变量不总是会自动更新,除非你强制更新。

SOME_STUFF=xxx pm2 start app.js --update-env

10

我之前在使用pm2 start app.js -- -some_stuff xxx传递参数时遇到了问题,所以我改成了这样:SOME_STUFF=xxx OTHER_STUFF=abc pm2 start app.js

然后当我运行pm2 logs时,我能够看到我的应用程序成功启动,并且环境变量设置正确,而之前当我运行pm2 logs时会出现与这些变量相关的错误。


3
你应该在ecosystem.config.js中传入ENV参数。
根目录下的ecosystem.config.js文件。
module.exports = {
  apps: [
    {
      name: "project-name",
      exec_mode: "cluster",
      instances: "1",
      script: "./server/index.js", // your script
      args: "start",
      env: {
        NODE_ENV: "production", 
        SOME_ENV: "some_value"...
      },
    },
  ],
};

在控制台中:

pm2 start ecosystem.config.js

在PM2官方文档中,有有关配置环境变量的信息


我能否以某种方式加载 .env 和 .env.local 文件? - chovy
我需要运行 pm2 start ecosystem.config.js,而不是 pm2 run ... - l30.4l3x

1

当我使用以下命令时,我的Node应用程序(SvelteKit构建)将在Ubuntu服务器上启动:

node build/index.js

并包括环境变量。

所以,通过使用pm2,我发现我的应用程序在启动时使用了环境变量:

pm2 "node build/index.js"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接