Garder une application Node.js en ligne avec PM2

2 min de lecture07 novembre 2026

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

Bash
sudo apt update
sudo apt install -y nodejs npm
node --version
sudo npm install -g pm2
pm2 --version

Debian 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 :

JavaScript
const port = process.env.PORT || 3000;
app.listen(port, "0.0.0.0", () => {
  console.log(`Listening on ${port}`);
});

Puis, en tant que deploy :

Bash
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

Bash
pm2 startup systemd -u deploy --hp /home/deploy
pm2 save
systemctl status pm2-deploy

pm2 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

Bash
pm2 logs app --lines 100
pm2 reload app
pm2 monit

reload redémarre sans couper les connexions en mode cluster ; restart coupe. Installez la rotation des journaux, sinon ils remplissent le disque :

Bash
pm2 install pm2-logrotate

PM2 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