使用 PM2 進行部署而無需停機
ecosystem.json
{
"name": "app-name",
"script": "server",
"exec_mode": "cluster",
"instances": 0,
"wait_ready": true
"listen_timeout": 10000,
"kill_timeout": 5000,
}
wait_ready
而不是重新載入等待 listen 事件,等待 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 停止/重新啟動程序時,某些系統訊號將按給定順序傳送到你的程序。
首先,將一個訊號傳送到你的程序,發出訊號,你可以知道你的程序將被停止。如果你的應用程式在 1.6s 之前沒有自行退出(可自定義),它將收到 SIGKILL
訊號以強制程序退出。因此,如果你的應用程式需要清理某些狀態或作業,你可以捕獲 SIGINT
訊號以準備你的應用程式退出。