Passing environment variables to node.js using pm2
Solution 1
It's actually possible and I'm pretty sure it was in PM2's documentation some time ago.
Anyways, that's what you need to do:
pm2 start app.js -- -some_stuff xxx
Basically, add --
and then you can add your own app parameters.
Managed to find the source, it was hidden quite well: http://pm2.keymetrics.io/docs/usage/quick-start/#42-ways-of-starting-processes
Solution 2
Note - after updating environment variables in your environment, you must do the following:
pm2 restart all --update-env
ask me how I know...
Edit: also look for a .env file in the node source directory...
Solution 3
I was having issues passing parameters using pm2 start app.js -- -some_stuff xxx
so I opted to do this instead: SOME_STUFF=xxx OTHER_STUFF=abc pm2 start app.js
.
Then when I ran pm2 logs
I was able to see that my app successfully started and that the environment variables were set correctly where as before I was seeing errors around these variables when I ran pm2 logs
.
Solution 4
The environment variables don't always update unless you force them to.
SOME_STUFF=xxx pm2 start app.js --update-env
Solution 5
You should pass ENV in ecosystem.config.js
ecosystem.config.js (in the root)
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"...
},
},
],
};
In the console:
pm2 run ecosystem.config.js
There is information about configuration of ENV in PM2 official documentation
Comments
-
Yar almost 2 years
I am trying to pass some arguments to my Express application which is run by pm2. There wasn't any hint in their documentation to do so, but apparently it's possible to pass some EV to your node application like
SOME_STUFF=xxx pm2 start app.js
.