1.开始新进程时

PM2 将在启动新进程时按以下顺序注入环境:

  • 首先,PM2 CLI 将使用其环境,因此将注入 shell 的当前环境。
  • 然后 PM2 将注入您可以使用生态系统文件配置的环境:
    1. module.exports = {
    2. apps : [
    3. {
    4. name: "myapp",
    5. script: "./app.js",
    6. watch: true,
    7. env: {
    8. "NODE_ENV": "development",
    9. }
    10. }
    11. ]
    12. }
    在这里可以看到 PM2 会覆盖当前环境来添加NODE_ENV=development. 但是你也可以像这样定义不同的环境:
    1. module.exports = {
    2. apps : [
    3. {
    4. name: "myapp",
    5. script: "./app.js",
    6. watch: true,
    7. env: {
    8. "PORT": 3000,
    9. "NODE_ENV": "development"
    10. },
    11. env_production: {
    12. "PORT": 80,
    13. "NODE_ENV": "production",
    14. }
    15. }
    16. ]
    17. }
    这里的默认环境在 中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 restartpm2 scale命令之后仍然如此。

您可能有问题的节点配置NODE_APP_INSTANCE名字,这样你就可以将其重命名instance_var选项:

  1. module.exports = {
  2. apps : [
  3. {
  4. name: "myapp",
  5. script: "./app.js",
  6. watch: true,
  7. instance_var: 'INSTANCE_ID',
  8. env: {
  9. "PORT": 3000,
  10. "NODE_ENV": "development"
  11. }
  12. }
  13. ]
  14. }

在这种情况下,变量将具有相同的行为,但将在process.env.INSTANCE_ID.

2.2.increment_var(PM2 2.5 最低)

有一个选项可以让 PM2 为每个启动的实例增加一个环境变量,例如:

  1. module.exports = {
  2. apps : [
  3. {
  4. name: "myapp",
  5. script: "./app.js",
  6. instances: 2,
  7. exec_mode: "cluster",
  8. watch: true,
  9. increment_var : 'PORT',
  10. env: {
  11. "PORT": 3000,
  12. "NODE_ENV": "development"
  13. }
  14. }
  15. ]
  16. }

在这个例子中,如果我运行pm2 start ecosystem.config.js

  • PM2 会看到我想PORT为每个实例增加变量
  • 它会看到我已经定义了默认值 3000
  • 第一个实例将具有process.env.PORT = 3000和第二个process.env.PORT = 3001

注意:使用 进行缩放时pm2 scale myapp 4,它也会增加,两个新实例都将具有30023003作为PORT变量。