Garder une application Node.js en ligne avec PM2
Une application Node.js lancée avec node index.js s'arrête dès que la session SSH se ferme ou qu'une exception non capturée survient. PM2 est un gestionnaire de processus qui la maintient en vie, la redémarre et la relance après un reboot. Il ne remplace pas la correction d'un bug ni la supervision, mais il évite les interruptions évitables.
Installer Node.js et PM2
sudo apt update
sudo apt install -y nodejs npm
node --version
sudo npm install -g pm2
pm2 --versionDebian 13 fournit Node.js 20. Si votre application exige Node.js 22 ou 24, ajoutez le dépôt NodeSource et épinglez la version voulue. PM2 s'installe globalement, mais l'application doit tourner sous un utilisateur non privilégié, par exemple deploy.
Démarrer l'application
L'application doit lire le port depuis l'environnement et écouter sur toutes les interfaces :
const port = process.env.PORT || 3000;
app.listen(port, "0.0.0.0", () => {
console.log(`Listening on ${port}`);
});Puis, en tant que deploy :
cd /var/www/app
npm ci --omit=dev
pm2 start index.js --name app
pm2 status
curl -I http://127.0.0.1:3000/Un fichier ecosystem.config.cjs rend le lancement reproductible : instances, max_memory_restart, env et time pour horodater les journaux. Évitez de lancer PM2 en root : l'application n'a pas besoin de ces privilèges, et une faille deviendrait immédiatement système.
Démarrage automatique
pm2 startup systemd -u deploy --hp /home/deploy
pm2 save
systemctl status pm2-deploypm2 startup affiche une commande sudo à exécuter ; copiez-la telle quelle. pm2 save enregistre la liste des processus : sans cette commande, rien ne redémarre après un reboot. Testez réellement avec sudo reboot, puis vérifiez pm2 status après reconnexion.
Exploitation et limites
pm2 logs app --lines 100
pm2 reload app
pm2 monitreload redémarre sans couper les connexions en mode cluster ; restart coupe. Installez la rotation des journaux, sinon ils remplissent le disque :
pm2 install pm2-logrotatePM2 ne remplace ni la supervision, ni les sauvegardes, ni un reverse proxy. Une fuite mémoire déclenche max_memory_restart en boucle : corrigez la cause plutôt que d'augmenter la limite. En mode cluster, l'application doit être sans état, avec les sessions dans Redis ou la base. Vérifiez enfin que Nginx pointe vers le port local et que le port applicatif n'est pas ouvert au public.
Sur l'hébergement d'applications Pterodactyl, le démarrage et le redémarrage sont gérés par le panneau : PM2 concerne les VPS où vous administrez le système.
Publicité
Cet article vous a-t-il aidé ?
À lire aussi
- Déployer une stack avec Docker ComposeDéployer une application et sa base avec compose.yaml, des volumes persistants et des variables hors Git.
- Activer HTTPS avec CertbotObtenir et renouveler un certificat Let's Encrypt avec Certbot et Nginx, puis activer HSTS prudemment.
- Installer Docker sur DebianInstaller Docker depuis le dépôt officiel, vérifier le démon et connaître les limites d'un conteneur système.