启动新进程时
PM2 将在启动新进程时按以下顺序注入环境变量
- 首先,PM2 CLI 将使用其环境,因此将注入您 shell 的当前环境。
- 然后,PM2 将注入您可以使用生态系统文件配置的环境
module.exports = {
apps : [
{
name: "myapp",
script: "./app.js",
watch: true,
env: {
"NODE_ENV": "development",
}
}
]
}
在这里,您可以看到 PM2 将覆盖当前环境以添加 NODE_ENV=development
。但您也可以像这样定义不同的环境
module.exports = {
apps : [
{
name: "myapp",
script: "./app.js",
watch: true,
env: {
"PORT": 3000,
"NODE_ENV": "development"
},
env_production: {
"PORT": 80,
"NODE_ENV": "production",
}
}
]
}
这里默认环境在 env
中,但您可以通过使用 pm2 start ecosystem.config.js --env production
来决定使用 env_production
。
您可以根据需要定义任意数量的环境,只需记住您必须使用 --env
传递要使用的环境名称(env_
之后)。
特定环境变量
NODE_APP_INSTANCE(PM2 2.5 或更高版本)
环境变量 NODE_APP_INSTANCE
用于区分进程,例如,您可能希望仅在一个进程上运行 cronjob,您可以检查 process.env.NODE_APP_INSTANCE === '0'
。两个进程永远不会有相同的编号,即使在 pm2 restart
和 pm2 scale
命令之后也是如此。
您可能会在使用 NODE_APP_INSTANCE
名称时遇到 node-config 的问题,因此您可以使用 instance_var
选项重命名它
module.exports = {
apps : [
{
name: "myapp",
script: "./app.js",
watch: true,
instance_var: 'INSTANCE_ID',
env: {
"PORT": 3000,
"NODE_ENV": "development"
}
}
]
}
在这种情况下,变量将具有相同的行为,但将在 process.env.INSTANCE_ID
中。
increment_var(PM2 2.5 或更高版本)
有一个选项可以要求 PM2 为启动的每个实例递增一个环境变量,例如
module.exports = {
apps : [
{
name: "myapp",
script: "./app.js",
instances: 2,
exec_mode: "cluster",
watch: true,
increment_var : 'PORT',
env: {
"PORT": 3000,
"NODE_ENV": "development"
}
}
]
}
在此示例中,如果我运行 pm2 start ecosystem.config.js
- PM2 将看到我想为每个实例递增
PORT
变量 - 它将看到我已将默认值定义为
3000
- 第一个实例将具有
process.env.PORT = 3000
,第二个实例将具有process.env.PORT = 3001
注意:在使用 pm2 scale myapp 4
进行扩展时,它也会递增,两个新实例都将具有 3002
和 3003
作为 PORT
变量。