環境変数

新しいプロセスを開始する場合

PM2は新しいプロセスを開始する際に、以下の順序で環境変数を注入します。

  • まず、PM2 CLIはその環境を使用するため、シェルの現在の環境が注入されます。
  • 次に、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 環境変数があります。たとえば、1つのプロセスでのみcronjobを実行したい場合は、 process.env.NODE_APP_INSTANCE === '0' かどうかを確認するだけで済みます。2つのプロセスが同じ番号を持つことは決してありません。これは、 pm2 restart コマンドと pm2 scale コマンドの後でも同様です。

node-configNODE_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 変数をインクリメントしたいことを認識します。
  • PM2は、デフォルトが 3000 に定義されていることを認識します。
  • 最初のインスタンスは process.env.PORT = 3000 を持ち、2番目のインスタンスは process.env.PORT = 3001 を持ちます。

: pm2 scale myapp 4 を使用してスケーリングする場合にもインクリメントされます。両方の新しいインスタンスは、 PORT 変数として 30023003 を持ちます。

このページに貢献する