Node.js
Развертывание приложения Node.js без простоя.
Поиск…
Развертывание с использованием PM2 без простоя.
ecosystem.json
{
"name": "app-name",
"script": "server",
"exec_mode": "cluster",
"instances": 0,
"wait_ready": true
"listen_timeout": 10000,
"kill_timeout": 5000,
}
wait_ready
Вместо перезагрузки, ожидающего прослушивания, подождите process.send ('ready');
listen_timeout
Время в мс перед тем, как заставить перезагружать, если приложение не прослушивает.
kill_timeout
Время в мс перед отправкой окончательного SIGKLL.
server.js
const http = require('http');
const express = require('express');
const app = express();
const server = http.Server(app);
const port = 80;
server.listen(port, function() {
process.send('ready');
});
process.on('SIGINT', function() {
server.close(function() {
process.exit(0);
});
});
Возможно, вам придется подождать, пока ваше приложение установит соединения с вашими DB / кэшами / рабочими / независимо. PM2 должен ждать, прежде чем рассматривать ваше приложение как онлайн. Для этого вам нужно предоставить wait_ready: true
в файле процесса. Это заставит PM2 прослушать это событие. В вашем приложении вам нужно будет добавить process.send('ready');
когда вы хотите, чтобы ваше приложение считалось готовым.
Когда процесс останавливается / перезапускается PM2, некоторые системные сигналы отправляются в ваш процесс в определенном порядке.
Сначала сигнал SIGINT
отправляется в ваши процессы, сигнализируя, что вы можете узнать, что ваш процесс будет остановлен. Если ваше приложение не выйдет за пределы до 1.6s (настраивается), он получит сигнал SIGKILL
чтобы заставить процесс выйти. Поэтому, если вашему приложению необходимо очистить какие-либо состояния или задания, вы можете поймать сигнал SIGINT
чтобы подготовить свое приложение к выходу.