Skip to content
Learni
Voir tous les tutoriels
Node.js

Comment déployer des apps Node.js avec PM2 en 2026

Read in English

Introduction

PM2 est un gestionnaire de processus open-source pour Node.js, devenu la référence en 2026 pour les déploiements en production. Contrairement à un simple node app.js, PM2 offre un redémarrage automatique en cas de crash, un mode cluster pour scaler horizontalement, un monitoring en temps réel via dashboard web, et un zero-downtime lors des déploiements.

Pourquoi l'utiliser ? Imaginez votre API qui plante à 3h du matin : PM2 la relance en millisecondes sans intervention humaine. Pour un dev beginner, c'est comme passer d'une bicyclette à une voiture automatique – tout est géré. Ce tutoriel vous guide de l'installation à la prod, avec 1500+ mots de valeur pure : codes complets, configs copiables, pièges évités. À la fin, votre app sera robuste, monitorée et scalable. Idéal pour freelances ou startups qui veulent de la fiabilité sans DevOps complexe.

Prérequis

  • Node.js 20+ installé (vérifiez avec node -v)
  • npm ou yarn
  • Une app Node.js basique (on en créera une)
  • Terminal Unix-like (WSL sur Windows OK)
  • Connaissances minimales en JavaScript

Installer PM2 globalement

terminal
npm install pm2@latest -g

pm audit fix --force

Cette commande installe PM2 globalement pour l'utiliser partout. L'option @latest assure la version 2026 stable (5.x+). npm audit fix corrige les vulnérabilités potentielles dès le départ, évitant les pièges de sécurité en prod.

Créer une app Node.js de test

Avant PM2, créons une app Express simple pour tester. C'est notre terrain de jeu : un serveur HTTP qui répond sur / et /health. Copiez ce code dans un dossier projet (mkdir mon-app && cd mon-app). Analogie : comme un échafaudage pour valider PM2 sans complexité.

Créer le serveur Express

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

app.get('/', (req, res) => {
  res.json({ message: 'Hello PM2!', timestamp: new Date().toISOString() });
});

app.get('/health', (req, res) => {
  res.status(200).json({ status: 'OK', uptime: process.uptime() });
});

app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});

Ce serveur Express complet gère deux routes et lit PORT d'env pour la prod. Il est crash-proof basique. Piège : sans PM2, Ctrl+C tue tout ; ici, on prépare pour le mode daemon.

Installer les dépendances

terminal
npm init -y
npm install express
npm install --save-dev nodemon

Initialise package.json, ajoute Express pour le serveur, et nodemon pour dev local (optionnel). En prod, PM2 remplace nodemon. Évite les node_modules globaux polluants.

Lancer l'app avec PM2 basique

Testons PM2 sans config. C'est l'étape 'wow' : votre app tourne en arrière-plan, survit aux restarts machine. Utilisez pm2 list pour voir l'état – comme un tableau de bord mini.

Démarrer l'app simplement

terminal
pm2 start server.js --name mon-api
pm2 save
pm2 startup

Lance server.js sous le nom 'mon-api', sauvegarde la liste des processus (save), et configure le démarrage au boot système (startup – suivez les instructions). Piège : sans save, reboot = tout perdu.

Configurer avec ecosystem file

Niveau pro : passez à ecosystem.config.js pour scaler. C'est un fichier JS déclaratif : cluster, instances, env vars. Analogie : comme un recipe book pour PM2, reproductible sur n'importe quel serveur.

Fichier ecosystem.config.js

ecosystem.config.js
module.exports = {
  apps: [{
    name: 'mon-api-cluster',
    script: './server.js',
    instances: 'max',  // Utilise tous les CPU cores
    exec_mode: 'cluster',
    env: {
      NODE_ENV: 'development',
      PORT: 3000
    },
    env_production: {
      NODE_ENV: 'production',
      PORT: 3001
    },
    log_date_format: 'YYYY-MM-DD HH:mm Z',
    error_file: './logs/err.log',
    out_file: './logs/out.log',
    time: true
  }]
};

Définit un app en cluster (max = auto-scale CPU), avec envs dev/prod. Logs séparés et timestamps. Relancez avec pm2 start ecosystem.config.js --env production. Piège : instances: 1 sans cluster = pas de scale.

Redémarrer en production

terminal
pm2 delete all
pm2 start ecosystem.config.js --env production
pm2 save
pm2 list
pm2 monit

Supprime tout, relance en prod mode (PORT=3001), sauvegarde, liste et ouvre monitoring. monit = dashboard TUI temps réel (CPU, RAM, restarts). Zéro downtime grâce au cluster.

Monitoring et logs

pm2 monit affiche métriques live ; pm2 logs pour traces. En 2026, intégrez PM2 Plus (payant) pour web dashboard. Testez : curl localhost:3001/health.

Commandes utiles de monitoring

terminal
pm2 logs mon-api-cluster
pm2 show mon-api-cluster
pm2 restart mon-api-cluster
pm2 stop mon-api-cluster
pm2 delete mon-api-cluster

Logs filtrés, détails app, restart soft (zero-downtime), stop/restart/delete. Parfait pour debug prod sans downtime. Toujours nommer les apps pour cibler précisément.

Bonnes pratiques

  • Toujours utiliser ecosystem.config.js : reproductible, Git-friendly vs commandes bash.
  • Activez cluster mode (instances: 'max') pour scaler CPU sans code changes.
  • Séparez logs (error_file, out_file) et rotatez avec pm2 install pm2-logrotate.
  • Env vars strictes : NODE_ENV=production + secrets via .env (dotenv).
  • Monitorez proactivement : pm2 monit en screen/tmux, alerte sur restarts >0.

Erreurs courantes à éviter

  • Oublier pm2 save et pm2 startup : reboot serveur = apps mortes.
  • Pas de nom (--name) : pm2 list chaotique avec IDs anonymes.
  • Cluster sans PORT unique : collisions ; forcez PORT par instance si besoin.
  • Logs non configurés : /var/log plein, app mute en prod.

Pour aller plus loin

  • Docs officielles : PM2.io
  • PM2 Plus pour dashboard web et alertes Slack.
  • Intégrez avec Docker : pm2-runtime dans Dockerfile.
-Découvrez nos formations Learni sur Node.js Prod et DevOps pour masteriser PM2 en équipe.