使用 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 訊號以準備你的應用程式退出。