Strongloop slc развертывает env var осложнения

Я развернул петлевое приложение с помощью пользовательского сценария init.d/app.conf, используя slc run --detach --cluster "cpu", но хочу перейти на использование strong-pm, как это рекомендуется.

Но я столкнулся с некоторыми ограничениями и ищу какие-либо рекомендации о том, как воспроизвести настройку, с которой я в настоящее время знаком.

В настоящее время я устанавливаю конфигурацию для конкретного приложения внутри server/config.local.js и server/datasources.local.js, что наиболее важно ПОРТ, на котором приложение должно прослушивать подключения. Это отлично работает с использованием slc run для локальной разработки и удаленного развертывания для подготовки, все, что я делаю, это устанавливаю разные переменные env для каждого отдельного приложения:

источники данных.local.js:

module.exports = {
  "mysqlDS": {
    name: "mysqlDS",
    connector: "mysql",
    host: process.env.PROTEUS_MYSQL_HOST,
    port: process.env.PROTEUS_MYSQL_PORT,
    database: process.env.PROTEUS_MYSQL_DB,
    username: process.env.PROTEUS_MYSQL_USER,
    password: process.env.PROTEUS_MYSQL_PW
  }
}

config.local.js:

module.exports = {
  port: process.env.PROTEUS_API_PORT
}

Когда я развертываю с помощью strong-pm, я не могу контролировать этот порт, и для него всегда устанавливается значение 3000+N, где N просто увеличивается на основе идентификатора службы, назначенного приложению при его развертывании.

Поэтому даже когда я развертываю, а затем устанавливаю env, используя

slc ctl -C http://localhost:8701 env-set proteus-demo PROTEUS_API_PORT=3033 PROTEUS_DB=demo APP_DOMAIN=demo.domain.com

Я вижу, что strong-pm полностью игнорирует PROTEUS_API_PORT при повторном развертывании с новыми переменными env:

ENV has changed, restarting
Service "1" listening on 0.0.0.0:3001
Restarting next commit Runner: commit 1/deploy/default/demo-deploy
Start Runner: commit 1/deploy/default/demo-deploy
Request (status) of current Runner: child 20066 commit 1/deploy/default/demo-deploy
Request {"cmd":"status"} of Runner: child 20066 commit 1/deploy/default/demo-deploy

3001! Не 3033, как я хочу, а указано в config.local.js. Есть ли способ контролировать это явно? Я не хочу запускать команду проверки slc для определения порта для моего восходящего блока nginx каждый раз, когда я развертываю приложение. Было бы здорово иметь возможность указать ПОРТ прослушивания по имени службы.

FWIW, это на экземпляре aws, в котором будут размещаться демонстрационные и промежуточные приложения, указывающие на отдельные БД и на разные ПОРТЫ.


person notbrain    schedule 27.05.2015    source источник


Ответы (1)


strong-pm устанавливает только переменную среды PORT, за соблюдение которой отвечает приложение.

На основе loopback-boot/lib/executor:109, похоже, что loopback на самом деле предпочитает переменную окружения PORT, а не значение в файле конфигурации. В этом случае кажется, что лучше всего:

  • передать порт в app.listen() самостоятельно
  • установите одну из переменных среды с более высоким приоритетом, такую ​​как npm_config_port (которая обычно устанавливается через npm start --port 1234).
person Ryan Graham    schedule 27.05.2015
comment
Да, мой файл конфигурации datasources.local.js используется (я смотрел журналы, когда приложению не удалось подключиться к монго, затем, когда я изменил конфигурацию с помощью env-set, оно перестало выдавать ошибки и начало прослушивание), но config.local Значение порта .js не используется. Независимо от того, что установлено для порта:, приложение strong-pm прослушивает 3001. - person notbrain; 28.05.2015
comment
Согласно этой странице в документах, для порта автоматически устанавливается значение 3000 + идентификатор службы, и он отличается в зависимости от количества и порядка развертывания приложений. docs.strongloop.com/display/SLC/ Есть ли способ переопределить это? - person notbrain; 28.05.2015
comment
Да, я заметил, что ПОРТ тоже все затирает. Я до сих пор не знаю, как передавать или устанавливать отдельные значения PORT при развертывании через strong-pm. Где я должен установить PORT или npm_config_port, чтобы strong-pm подбирал разные порты для каждого приложения, которое я хочу запустить? Когда я использую slc ctl set-env, он по-прежнему игнорируется и по-прежнему используется 3000+N. - person notbrain; 28.05.2015
comment
Ах, работает так, как мне бы хотелось, когда я устанавливаю npm_config_port с помощью slc ctl env-set; Я немного медленно соображаю. - person notbrain; 28.05.2015