1.开始新进程时
PM2 将在启动新进程时按以下顺序注入环境:
- 首先,PM2 CLI 将使用其环境,因此将注入 shell 的当前环境。
- 然后 PM2 将注入您可以使用生态系统文件配置的环境:
在这里可以看到 PM2 会覆盖当前环境来添加module.exports = {
apps : [
{
name: "myapp",
script: "./app.js",
watch: true,
env: {
"NODE_ENV": "development",
}
}
]
}
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
,但您可以决定env_production
使用pm2 start ecosystem.config.js --env production
.
您可以定义任意数量的环境,但请记住,您必须传递env_
要使用的环境名称(在 之后)--env
。
2.具体环境变量
2.1.NODE_APP_INSTANCE(最低 PM2 2.5)
有一个NODE_APP_INSTANCE
环境变量用于在进程之间产生差异,例如您可能只想在一个进程上运行 cronjob,您可以检查是否process.env.NODE_APP_INSTANCE === '0'
. 两个进程永远不可能有相同的编号,在pm2 restart
和pm2 scale
命令之后仍然如此。
您可能有问题的节点配置与NODE_APP_INSTANCE
名字,这样你就可以将其重命名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
.
2.2.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
变量。