Я создаю API-интерфейс nodejs и настроил пакет dotenv
как зависимость dev для загрузки переменных в process.env
на локальных машинах разработчика.
Обратите внимание, что при входе в систему я использую sudo -i
, чтобы работать как root
.
Мое намерение состоит в том, чтобы во время развертывания переменные среды были установлены на моем хосте Ubuntu в /etc/environment
, загружены непосредственно в процесс, а затем приложение просто запустилось бы для этой конфигурации.
Для этого у меня есть строка в начале server.js
:
if(process.env.NODE_ENV === 'development') {
logger.info("Loading dotenv for development environment")
require('dotenv').config();
}
И разработчикам будет предложено добавить переменную среды в их систему для NODE_ENV
.
Теперь, в моем экземпляре Ubuntu EC2 я настроил /etc/environment
, чтобы иметь переменные окружения, которые я хочу (обратите внимание, что здесь NODE_ENV 'dev' просто для того, чтобы избежать запуска dotenv):
PORT=MYPORT
NODE_ENV=dev
APP_SECRET_KEY='MYSECRET'
APP_DATABASE_LOGIN=MYLOGIN
APP_DATABASE_PASSWORD='MYPASS'
APP_DATABASE_HOST=MYHOST
APP_DATABASE_NAME=MYDB
APP_DATABASE_PORT=MYDBPORT
И когда я перезагружаюсь и запускаю printenv
, они все заполняются для файла.
У меня есть настройка pm2
для запуска моего приложения напрямую из server.js
без какой-либо дополнительной настройки, потому что, насколько я понимаю, process.env
заполняется автоматически из переменных среды.
Однако, когда я записываю значения из файла process.env, я просто получаю нулевое значение для всего:
logger.info({
connectionConfig: {
host: process.env.APP_DATABASE_HOST
, login: process.env.APP_DATABASE_LOGIN
, port: process.env.APP_DATABASE_PORT
, databaseName: process.env.APP_DATABASE_NAME
}
});
Что-то не так с конфигурацией как есть?
Примечание. Согласно приведенному ниже ответу, я по ошибке установил переменные окружения ПОСЛЕ начала работы pm2, и поэтому в кэшировании pm2 их не было