環境變數

在啟動新程序時

啟動新程序時,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 restartpm2 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 變數都會是 30023003

為此頁面做出貢獻