Gérer, monitorer et déployer des applications Node.js en production avec PM2 — process manager, clusters, logs, déploiement automatisé et survie aux redémarrages.
Node.js est mono-thread. Un throw non attrapé, une promesse rejetée sans .catch, et le processus s'arrête. Sur un serveur de développement, c'est embêtant. En production, c'est une coupure de service.
PM2 — Process Manager 2 — résout ce problème. C'est un daemon qui surveille vos applications Node.js, les redémarre en cas de crash, les relance au reboot du serveur, et vous donne une vue en temps réel sur leur santé. Il fait aussi office de load balancer en répartissant la charge sur tous les cœurs CPU disponibles.
Quand vous lancez une app avec PM2, vous ne lancez plus node app.js directement. PM2 devient le parent du processus. Il surveille son PID, intercepte les crashes, et relance l'app immédiatement. Depuis votre terminal, vous continuez à travailler — l'app tourne en arrière-plan sous la supervision de PM2.
Votre terminal
│
└── pm2 start app.js
│
└── PM2 daemon (toujours en vie)
│
├── app.js (instance 0)
├── app.js (instance 1) ← mode cluster
└── app.js (instance 2)PM2 centralise aussi les logs de toutes vos applications dans ~/.pm2/logs/. Plus de nohup node app.js > app.log 2>&1 & — PM2 gère ça proprement.
PM2 s'installe globalement via npm :
npm install -g pm2Vérification :
pm2 --version
# 5.4.xSur un VPS où Node.js est installé via nvm, assurez-vous que la version de Node active est bien celle que vous voulez utiliser en production avant d'installer PM2 :
node --version
# v20.x.x
npm install -g pm2PM2 utilise la version de Node avec laquelle il a été installé pour démarrer les processus. Si vous changez de version Node sans réinstaller PM2, les applications peuvent ne pas démarrer.
pm2 start app.jsPM2 démarre l'application, lui assigne un ID (0, 1, 2…) et un nom dérivé du nom de fichier. Résultat :
┌────┬──────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │
├────┼──────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┤
│ 0 │ app │ default │ N/A │ fork │ 12345 │ 0s │ 0 │ online │
└────┴──────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┘Le mode fork lance une seule instance. Le mode cluster en lance plusieurs — on y vient au chapitre 4.
La première fois que vous lancez une commande PM2, il démarre un daemon en arrière-plan. Ce daemon persiste même après la fermeture du terminal. C'est lui qui surveille vos applications.
# Voir le statut du daemon
pm2 ping
# [PM2] Pong
# Tuer le daemon (arrête aussi toutes les apps)
pm2 killEn pratique, vous ne tuez jamais le daemon en production. Il tourne en permanence sur votre serveur.
PM2 est installé, la première app tourne. Le chapitre suivant couvre les commandes du quotidien — celles que vous utiliserez tous les jours.