Ответ 1
Вы можете сделать, как указано в этом билете: https://github.com/Unitech/pm2/issues/13
Хотя, если вы проходите среду, вы можете рассмотреть возможность использования переменных среды. С помощью этого вы создаете переменную, к которой может быть доступен любой процесс в этой среде с помощью process.env.*
.
Итак, у вас есть файл конфигурации config.json
:
{
"dev": {
"db": {
"hosts":["localhost"],
"database": "api"
},
"redis": {
"hosts": ["localhost"]
}
},
"staging": {
"db": {
"hosts":["1.1.1.1"],
"database": "api"
},
"redis": {
"hosts": ["2.2.2.2"]
}
},
"production": {
"db": {
"hosts":["1.1.1.1", "1.1.1.2", "1.1.1.3"],
"database": "api"
},
"redis": {
"hosts": ["2.2.2.2", "2.2.2.3"]
}
}
}
Затем вы импортируете свой конфиг:
var config=require('./config.json')[process.env.NODE_ENV || 'dev'];
db.connect(config.db.hosts, config.db.database);
Затем вы установите переменную в своей среде через оболочку:
export NODE_ENV=staging
pm2 start app.js
Переменная среды будет продолжаться до тех пор, пока ваш сеанс. Поэтому вам нужно будет установить его в файле ~/.bashrc
для этого пользователя, чтобы переменная сохранялась. Это установит переменную на каждый сеанс.
PM2 имеет систему развертывания, которая позволяет вам устанавливать переменную среды каждый раз, прежде чем ваше приложение будет демоннизировано. Так как демоны в системах POSIX обычно принимают параметры, поскольку эти параметры не теряются в процессе. Учитывая ваши обстоятельства, это может не иметь особого значения, но это хорошая практика.
Кроме того, вы должны рассмотреть возможность остановки/запуска локально и перезапустить (если в режиме кластера), когда это возможно, чтобы предотвратить простои в процессе производства.