在啟動新程序時
在啟動新程序時,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-config 中遇到 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
中。
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
進行擴充時也會遞增,兩個新執行個體的 PORT
變數都會是 3002
和 3003
。