PM2 : gestionnaire de processus Node.js pour la production

🏷️ Back-end 📅 14/04/2026 13:00:00 👤 Mezgani said
Pm2 Nodejs Production Process Manager Clustering Monitoring
PM2 : gestionnaire de processus Node.js pour la production

Maîtrisez PM2, le gestionnaire de processus indispensable pour déployer vos applications Node.js en production. Installation, clustering, monitoring, logs, et configuration avancée.

Qu'est-ce que PM2 ?

PM2 (Process Manager 2) est un gestionnaire de processus pour applications Node.js en production. Il permet de maintenir vos applications actives en permanence, de les relancer automatiquement en cas de crash, et de gérer le clustering pour maximiser les performances.

PM2 est devenu l'outil standard de l'industrie pour déployer des applications Node.js en production grâce à ses fonctionnalités avancées :

  • Redémarrage automatique en cas de crash
  • Mode cluster pour utiliser tous les cœurs CPU
  • Zero-downtime reload (rechargement sans interruption)
  • Gestion des logs centralisée
  • Monitoring en temps réel (CPU, RAM)
  • Démarrage automatique au boot système
🚀 En production : PM2 est essentiel pour gérer vos applications Node.js de manière professionnelle et fiable.

Installation de PM2

PM2 s'installe globalement via NPM :

# Installation globale
npm install -g pm2

# Vérifier la version installée
pm2 --version

# Afficher l'aide
pm2 --help
💡 Sur serveur Linux : Vous aurez peut-être besoin de préfixer avec sudo : sudo npm install -g pm2

Commandes essentielles

Démarrer une application

# Démarrer une application simple
pm2 start app.js

# Démarrer avec un nom personnalisé
pm2 start app.js --name "mon-app"

# Démarrer en mode cluster (4 instances)
pm2 start app.js -i 4

# Démarrer en utilisant tous les cœurs CPU
pm2 start app.js -i max

Gérer les processus

# Lister toutes les applications
pm2 list
pm2 ls

# Voir les détails d'une application
pm2 show mon-app

# Stopper une application
pm2 stop mon-app

# Redémarrer une application
pm2 restart mon-app

# Recharger sans downtime (zero-downtime reload)
pm2 reload mon-app

# Supprimer une application de PM2
pm2 delete mon-app

# Stopper toutes les applications
pm2 stop all

# Redémarrer toutes les applications
pm2 restart all

Monitoring et logs

# Voir les logs en temps réel
pm2 logs

# Voir les logs d'une application spécifique
pm2 logs mon-app

# Voir uniquement les erreurs
pm2 logs --err

# Vider les logs
pm2 flush

# Monitoring en temps réel (CPU, RAM)
pm2 monit
🔍 Monitoring web : Installez PM2 Plus (pm2 link) pour un dashboard web avec métriques avancées, alertes et gestion à distance.

Fichier ecosystem.config.js

Le fichier ecosystem.config.js permet de configurer vos applications de manière déclarative. C'est la méthode recommandée pour la production.

Générer un fichier ecosystem

# Générer un template
pm2 ecosystem

# Ou créer manuellement ecosystem.config.js
touch ecosystem.config.js

Exemple de configuration complète

module.exports = {
  apps: [
    {
      name: 'api-backend',
      script: './server.js',
      instances: 'max',
      exec_mode: 'cluster',
      env: {
        NODE_ENV: 'production',
        PORT: 3000,
        DB_HOST: 'localhost',
        DB_NAME: 'production_db'
      },
      env_development: {
        NODE_ENV: 'development',
        PORT: 3001,
        DB_HOST: 'localhost',
        DB_NAME: 'dev_db'
      },
      error_file: './logs/err.log',
      out_file: './logs/out.log',
      log_date_format: 'YYYY-MM-DD HH:mm:ss',
      merge_logs: true,
      autorestart: true,
      watch: false,
      max_memory_restart: '1G',
      cron_restart: '0 3 * * *',
      min_uptime: '10s',
      max_restarts: 10,
      listen_timeout: 3000,
      kill_timeout: 5000
    },
    {
      name: 'worker-queue',
      script: './worker.js',
      instances: 2,
      exec_mode: 'cluster',
      cron_restart: '0 */6 * * *',
      env: {
        NODE_ENV: 'production',
        QUEUE_NAME: 'main-queue'
      }
    }
  ]
};

Utiliser le fichier ecosystem

# Démarrer avec le fichier ecosystem
pm2 start ecosystem.config.js

# Démarrer en mode développement
pm2 start ecosystem.config.js --env development

# Démarrer uniquement une app spécifique
pm2 start ecosystem.config.js --only api-backend

# Recharger avec la nouvelle config
pm2 reload ecosystem.config.js

Explication des options importantes

Option Description
instances Nombre d'instances (nombre ou "max" pour tous les CPU)
exec_mode "cluster" ou "fork" (cluster recommandé)
max_memory_restart Redémarre si RAM dépasse cette limite
cron_restart Redémarre selon un planning cron
watch Redémarre automatiquement si fichiers modifiés (dev uniquement)
autorestart Redémarre automatiquement en cas de crash

Mode Cluster

Le mode cluster de PM2 permet de lancer plusieurs instances de votre application pour utiliser tous les cœurs CPU disponibles sur le serveur.

Pourquoi utiliser le clustering ?

  • Utiliser 100% de la puissance CPU (Node.js est mono-thread par défaut)
  • Meilleure résilience : si une instance crash, les autres continuent
  • Load balancing automatique entre les instances
  • Zero-downtime reload : recharge les instances une par une

Activer le mode cluster

# Lancer 4 instances
pm2 start app.js -i 4

# Utiliser tous les CPU disponibles
pm2 start app.js -i max

# Utiliser max - 1 CPU (laisser un CPU libre)
pm2 start app.js -i -1

# Scaler à 8 instances
pm2 scale mon-app 8

# Augmenter de 2 instances
pm2 scale mon-app +2

# Diminuer de 1 instance
pm2 scale mon-app -1

Exemple de serveur compatible cluster

// server.js
const express = require('express');
const app = express();
const port = process.env.PORT || 3000;

app.get('/', (req, res) => {
  res.json({
    message: 'Serveur en cluster',
    pid: process.pid,
    instance: process.env.NODE_APP_INSTANCE
  });
});

app.listen(port, () => {
  console.log(`Instance ${process.pid} écoute sur le port ${port}`);
});

// Gestion des signaux pour zero-downtime reload
process.on('SIGINT', () => {
  console.log('SIGINT reçu, fermeture propre...');
  process.exit(0);
});
⚡ Performance : Sur un serveur 8 CPU, passer de 1 à 8 instances peut multiplier le débit par 6-7x.

Zero-downtime reload

# Recharge toutes les instances une par une (sans downtime)
pm2 reload mon-app

# Restart brutal (avec micro-downtime)
pm2 restart mon-app
💡 Différence reload vs restart :
  • pm2 reload : recharge les instances progressivement, pas de downtime
  • pm2 restart : stoppe et redémarre toutes les instances en même temps

Monitoring et logs

Monitoring local

# Interface CLI de monitoring
pm2 monit

# Afficher les métriques
pm2 status

# Informations système
pm2 info mon-app

Gestion des logs

# Voir tous les logs
pm2 logs

# Logs d'une app spécifique
pm2 logs mon-app

# Dernières 100 lignes
pm2 logs --lines 100

# Seulement les erreurs
pm2 logs --err

# Format JSON
pm2 logs --json

# Vider tous les logs
pm2 flush

# Recharger les logs (rotation)
pm2 reloadLogs

Rotation des logs avec pm2-logrotate

# Installer pm2-logrotate
pm2 install pm2-logrotate

# Configurer la rotation quotidienne
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
pm2 set pm2-logrotate:compress true
pm2 set pm2-logrotate:dateFormat YYYY-MM-DD_HH-mm-ss

PM2 Plus (monitoring avancé)

# S'inscrire sur pm2.io et obtenir une clé
pm2 link <secret_key> <public_key>

# Unlink
pm2 unlink

PM2 Plus offre :

  • Dashboard web avec graphiques temps réel
  • Alertes par email/Slack si crash ou CPU élevé
  • Historique des métriques sur 7 jours (gratuit)
  • Gestion à distance de vos serveurs
  • Profiling et détection de memory leaks

Démarrage automatique au boot

Configurer PM2 pour redémarrer automatiquement vos applications après un reboot du serveur :

Sur Linux (systemd)

# Générer le script de démarrage
pm2 startup

# La commande affiche une ligne à copier-coller, exemple :
# sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u ubuntu --hp /home/ubuntu

# Sauvegarder la liste actuelle des apps
pm2 save

# Vérifier que tout fonctionne
sudo reboot
# Après reboot, vérifier :
pm2 list

Désactiver le démarrage automatique

# Supprimer le script de démarrage
pm2 unstartup systemd

Sur Windows

# Installer pm2-windows-startup
npm install -g pm2-windows-startup

# Activer le démarrage automatique
pm2-startup install

# Sauvegarder la configuration
pm2 save

Bonnes pratiques production

  • Utilisez ecosystem.config.js : Configuration versionnée et reproductible
  • Mode cluster : Activez-le pour performances et résilience
  • Limites mémoire : Configurez max_memory_restart pour éviter les memory leaks
  • Logs structurés : Utilisez un logger (winston, pino) plutôt que console.log
  • Rotation des logs : Installez pm2-logrotate pour éviter de saturer le disque
  • Variables d'environnement : Stockez les secrets dans env ou utilisez dotenv
  • Monitoring : Activez PM2 Plus pour surveiller vos apps en temps réel
  • Déploiement : Utilisez pm2 reload pour zero-downtime
  • Backup config : Versionnez ecosystem.config.js dans Git

Checklist de déploiement

# 1. Cloner le repo
git clone https://github.com/user/mon-app.git
cd mon-app

# 2. Installer les dépendances
npm install --production

# 3. Créer le fichier .env (secrets)
cp .env.example .env
nano .env

# 4. Démarrer avec PM2
pm2 start ecosystem.config.js --env production

# 5. Sauvegarder et activer startup
pm2 save
pm2 startup

# 6. Vérifier le statut
pm2 list
pm2 logs

Template ecosystem.config.js production-ready

module.exports = {
  apps: [{
    name: 'production-app',
    script: './dist/server.js',
    instances: 'max',
    exec_mode: 'cluster',
    autorestart: true,
    watch: false,
    max_memory_restart: '1G',
    env_production: {
      NODE_ENV: 'production',
      PORT: 80
    },
    error_file: '/var/log/pm2/app-error.log',
    out_file: '/var/log/pm2/app-out.log',
    merge_logs: true,
    log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
    min_uptime: '10s',
    max_restarts: 10,
    restart_delay: 4000
  }]
};
🔒 Sécurité : Ne stockez JAMAIS de clés API ou mots de passe dans ecosystem.config.js. Utilisez des variables d'environnement ou un gestionnaire de secrets externe.

Conclusion

PM2 est l'outil indispensable pour gérer vos applications Node.js en production. Avec le mode cluster, le monitoring intégré, le zero-downtime reload et le démarrage automatique, vous disposez de toutes les fonctionnalités nécessaires pour déployer des applications robustes et performantes.

N'oubliez pas de consulter notre article sur Node.js pour comprendre les fondamentaux avant de passer en production avec PM2.

📚 Ressources officielles :