Как я могу загрузить переменные среды через командную строку при запуске приложения node.js в режиме кластера с PM2?

Когда я запускаю свое приложение с помощью узла, я обычно запускаю:

node -r dotenv/config ./build/index.js

При использовании PM2 в режиме вилки я могу запустить приложение следующим образом:

pm2 start --node-args="-r dotenv/config" build/index.js --name API

Однако если я попытаюсь запустить приложение в кластерном режиме, оно, похоже, проигнорирует аргументы узлов и не сможет загрузить переменные среды.

pm2 start --node-args="-r dotenv/config" build/index.js -i max --name API

Каким будет правильный обходной путь для решения этой проблемы без ее явного добавления в код приложения? Должен ли я вообще делать это таким образом для начала?

Обновление. Похоже, pm2 ecosystem - это правильный способ вставки аргументов командной строки, если вы хотите запускать приложения в кластерном режиме. Используя node_args: '-r dotenv/config' мне удалось добиться желаемого результата. Спасибо!

P.S. Убедитесь, что вы настроили рабочую среду, иначе вы можете столкнуться с непредвиденными проблемами при запуске приложения.


person ChronicLynx    schedule 31.12.2019    source источник


Ответы (1)


Можете ли вы использовать файл экосистемы для PM2?

Выполнение следующего сгенерирует базовый файл конфигурации.

pm2 ecosystem

Файл по умолчанию включен ниже:

module.exports = {
  apps : [{
    name: 'API',
    script: 'app.js',

    // Options reference: https://pm2.keymetrics.io/docs/usage/application-declaration/
    args: 'one two',
    instances: 1,
    autorestart: true,
    watch: false,
    max_memory_restart: '1G',
    env: {
      NODE_ENV: 'development'
    },
    env_production: {
      NODE_ENV: 'production'
    }
  }],

  deploy : {
    production : {
      user : 'node',
      host : 'localhost',
      ref  : 'origin/master',
      repo : '[email protected]:repo.git',
      path : '/var/www/production',
      'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production'
    }
  }
};

Согласно примеру в документации, вы можете добавить "exec_mode" в файл json. См. ниже:

module.exports = {
  apps : [{
    name        : "worker",
    script      : "./worker.js",
    watch       : true,
    env: {
      "NODE_ENV": "development",
    },
    env_production : {
       "NODE_ENV": "production"
    }
  },{
    name       : "api-app",
    script     : "./api.js",
    instances  : 4,
    exec_mode  : "cluster"
  }]
}

При необходимости измените файл и запустите:

pm2 start ecosystem.config.js
person mprather    schedule 31.12.2019