Gestion de nodeJS et PM2

1. Analyse du fonctionnement PM2 avec Systemd

Le service systemd est utilisé pour gérer PM2. PM2 est configuré pour restaurer l’état des processus tel qu’il a été sauvegardé la dernière fois (via la commande pm2 save).

  • Service Systemd : Le service PM2 est démarré par systemd. Il ne démarre pas l’application Node.js directement, mais exécute pm2 resurrect.

  • pm2 resurrect : Cette commande lit le fichier de configuration de persistance (généralement dump.pm2) et tente de restaurer les processus PM2 dans l’état où ils ont été sauvegardés.

Le Piège : Si un développeur ou une personne en charge des opérations effectue un pm2 stop <app_name> ou pm2 stop all puis enchaîne avec un pm2 save, le fichier de sauvegarde (dump.pm2) enregistre l’état des applications comme `status: stopped`. Au prochain redémarrage du système ou du service PM2, l’application restera arrêtée car PM2 ressuscitera l’état sauvegardé.

Lorsque l’application est arrêtée dans la sauvegarde, les logs PM2 montrent :

Log PM2

Signification

[PM2] Resurrecting

PM2 démarre la restauration.

[PM2] Restoring processes located in …/dump.pm2

PM2 lit l’état sauvegardé.

id | name | … | status | …

Tableau de statut des processus.

0 | ExtranetEcb | … | stopped | …

L’application est en statut ``stopped`` dans la sauvegarde et ne sera pas démarrée.

systemd[1]: Started PM2 process manager.

Le service est démarré, mais l’application reste arrêtée.

2. Procédure Standard d’Opération pour PM2

PM2 préconise officiellement l’utilisation de pm2 resurrect et pm2 save pour le redémarrage automatique.

  • Le service systemd que nous utilisons est conçu pour appeler pm2 resurrect (similaire à celui généré par pm2 startup).

  • La commande pm2 save est essentielle car elle persiste l’état d’exécution complet des applications (y compris les arguments, l’environnement - prod, dev, etc. - et, surtout, le statut online).

  • Utiliser pm2 start <config.js> directement dans le service systemd n’est pas la méthode préconisée car pm2 start est souvent utilisé pour des opérations variées (passer des arguments, modifier l’environnement) et ne garantit pas la restauration des paramètres exacts des processus déjà en cours.

2.2. Démarrage ou mise à jour de l’application

Lors d’un déploiement ou après un arrêt/démarrage manuel, suivez impérativement ces deux étapes pour garantir la persistance :

  1. Démarrer l’application (ou appliquer les changements) :

# Exemple pour démarrer ou relancer avec le fichier de configuration
pm2 start shared/ecosystem.config.js

Le pm2 start met l’application en ligne, mais ne met PAS à jour le fichier de persistance.

  1. Sauvegarder l’état en ligne :

pm2 save

Important

🚨 Cette commande sauvegarde l’état actuel (y compris le statut online) dans le fichier dump.pm2. C’est l’état qui sera utilisé par pm2 resurrect au prochain démarrage du service.

2.3. Arrêt temporaire de l’application

Si vous devez arrêter temporairement l’application sans qu’elle ne redémarre au prochain boot :

pm2 stop <app_name> # Arrête l'application
pm2 save           # Sauvegarde l'état 'stopped' pour la persistance

Pour redémarrer, suivre la procédure 2.2.