Node.js
Déploiement de l'application Node.js sans temps d'arrêt.
Recherche…
Déploiement à l'aide de PM2 sans temps d'arrêt.
ecosystem.json
{
"name": "app-name",
"script": "server",
"exec_mode": "cluster",
"instances": 0,
"wait_ready": true
"listen_timeout": 10000,
"kill_timeout": 5000,
}
wait_ready
Au lieu de recharger en attente d'un événement d'écoute, attendez le processus.send ('ready');
listen_timeout
Temps en ms avant de forcer un rechargement si l'application n'écoute pas.
kill_timeout
Temps en ms avant d'envoyer un SIGKLL final.
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);
});
});
Vous devrez peut-être attendre que votre application ait établi des connexions avec vos bases de données / caches / travailleurs / autres. PM2 doit attendre avant de considérer votre application comme étant en ligne. Pour ce faire, vous devez fournir wait_ready: true
dans un fichier de processus. Cela fera écouter PM2 pour cet événement. Dans votre application, vous devrez ajouter process.send('ready');
lorsque vous souhaitez que votre demande soit considérée comme prête.
Lorsqu'un processus est arrêté / redémarré par PM2, certains signaux système sont envoyés à votre processus dans un ordre donné.
Tout d'abord, un signal SIGINT
est envoyé à vos processus, signalant que vous pouvez savoir que votre processus va être arrêté. Si votre application ne sort pas d'elle-même avant 1.6s (personnalisable), elle recevra un signal SIGKILL
pour forcer la sortie du processus. Donc, si votre application doit nettoyer des états ou des tâches, vous pouvez intercepter le signal SIGINT
pour préparer votre application à quitter.