启动新进程时
当启动一个新进程时,PM2 将按此顺序注入环境:
- 首先 PM2 CLI 将使用其环境,因此将注入 shell 的当前环境。
- 然后 PM2 将注入您可以使用生态系统文件配置的环境:
js
module.exports = {
apps: [
{
name: 'myapp',
script: './app.js',
watch: true,
env: {
NODE_ENV: 'development',
}
}
]
}
在这里你可以看到 PM2 将覆盖当前环境以添加 NODE_ENV=development
。 但您也可以像这样定义不同的环境:
js
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-config 中遇到带有 NODE_APP_INSTANCE
名称的问题,因此您可以使用 instance_var
选项重命名它:
js
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 为每个启动的实例增加一个环境变量,例如:
js
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
变量。