PM2 pour JavaScript (Node.js) : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

PM2 pour JavaScript (Node.js) : guide complet avec exemples

1. Qu'est-ce que PM2 et pourquoi l'utiliser ?

PM2 (Process Manager 2) est un gestionnaire de processus puissant pour les applications Node.js, conçu pour une utilisation en production. Il permet de lancer, arrêter, redémarrer et surveiller vos applications Node.js, garantissant une haute disponibilité et une tolérance aux pannes. PM2 redémarre automatiquement les processus qui échouent, répartit la charge entre plusieurs instances de l'application (clustering), intègre un répartiteur de charge et prend en charge les redémarrages sans interruption de service.

En production, les applications Node.js rencontrent souvent des erreurs inattendues, des fuites mémoire ou des surcharges. PM2 résout ces problèmes en agissant comme un « démon gardien » : il surveille l'état de chaque processus, enregistre les sorties stdout/stderr, fournit des métriques de performance (CPU, mémoire) et permet de gérer l'application via CLI ou API. Sans PM2, le développeur devrait écrire manuellement des scripts de redémarrage, de surveillance et de mise à l'échelle — PM2 automatise toutes ces tâches.

Les fonctionnalités clés de PM2 incluent : le clustering (exécution de plusieurs workers sur tous les cœurs CPU), le redémarrage sans interruption, la gestion d'environnements (development/production), la surveillance intégrée (pm2 monit), la prise en charge des fichiers de configuration (ecosystem.config.js) et l'intégration avec les systèmes d'initialisation (systemd, upstart) pour un démarrage automatique au lancement du serveur.

2. Installation

PM2 s'installe globalement via npm (Node Package Manager). La commande exacte :

npm install -g pm2

Pour installer une version spécifique :

npm install -g pm2@5.3.0

Après l'installation, vérifiez la version :

pm2 --version

3. Démarrage rapide — exemple minimal fonctionnel

Créez une application Node.js simple app.js :

// app.js
const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Bonjour depuis PM2 !\n');
});

const PORT = process.env.PORT || 3000;
server.listen(PORT, () => {
  console.log(`Serveur démarré sur le port ${PORT}`);
});

Lancez l'application via PM2 :

pm2 start app.js --name mon-app

Vérifiez le statut :

pm2 status

Arrêtez l'application :

pm2 stop mon-app

4. Méthodes/fonctions/classes principales

4.1. pm2.start() — Lancement d'une application

Signature : pm2.start(script, options, callback)

Fonction : Lance le script spécifié en tant que processus PM2 avec les options définies (nom, nombre d'instances, variables d'environnement).

Exemple de code fonctionnel :

const pm2 = require('pm2');

pm2.connect((err) => {
  if (err) {
    console.error(err);
    process.exit(2);
  }

  pm2.start({
    script: 'app.js',
    name: 'mon-app',
    instances: 2, // lancer 2 instances
    exec_mode: 'cluster', // mode cluster
    env: {
      NODE_ENV: 'production',
      PORT: 3000
    }
  }, (err, apps) => {
    if (err) {
      console.error(err);
      return pm2.disconnect();
    }
    console.log('Application démarrée :', apps);
    pm2.disconnect();
  });
});

4.2. pm2.stop() — Arrêt d'un processus

Signature : pm2.stop(process, callback)

Fonction : Arrête le processus spécifié (par nom, ID ou tous les processus).

Exemple de code fonctionnel :

const pm2 = require('pm2');

pm2.connect((err) => {
  if (err) {
    console.error(err);
    process.exit(2);
  }

  // Arrêter le processus nommé 'mon-app'
  pm2.stop('mon-app', (err, proc) => {
    if (err) {
      console.error(err);
      return pm2.disconnect();
    }
    console.log('Processus arrêté :', proc);
    pm2.disconnect();
  });
});

Recommendations