Environment

启动新进程时

启动一个新进程时,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 restartpm2 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 进行缩放时它也会增加,两个新实例都将 30023003 作为 PORT 变量。