Si vous avez déjà essayé de déployer une application NodeJS sur l'un de vos serveur en interne, sur un VPS ou encore sur une infrastructure cloud type PaaS, vous connaissez déjà les problématiques d'un tel déploiement.

Si vous faites partie des autres personnes et que votre premier déploiement est en vue, vous devez vous attendre à trois choses :

  • Devoir trouver un moyen pour que votre application Node reste en vie même si cette dernière vient à crasher
  • Vouloir récupérer les logs de l'application même après sa fermeture
  • Que le processus Node soit indépendant de votre session SSH actuelle, sinon ce dernier va se fermer dès que vous terminerez la connexion
Lorsque vous lancez un processus depuis une connexion SSH, le parent devient le processus SSH, et si ce dernier s'arrête, ses enfants s'arrêtent aussi !

Mais pas de panique ! Toutes ces problématiques (et bien d'autres) peuvent être résolues avec un seul outil : PM2

PM2 - Home
Advanced process manager for production Node.js applications. Load balancer, logs facility, startup script, micro service management, at a glance.

Qu'est-ce que c'est ?

PM2 est un puissant gestionnaire de processus spécialisé pour la mise en production d'application NodeJS !

Ce qui veut dire que ce n'est plus vous qui allez lancer votre processus nodejs directement avec vos petites mains, mais que vous allez déléguer cette tâche à PM2 afin qu'il puisse gérer le lancement d'un (ou plusieurs) processus, stocker les logs, monitorer les ressources utilisées, etc... Et bien sûr, relancer votre application au besoin !

Attention cela signifie qu'il faut que votre application en stocke pas l'état de votre application en RAM, c'est ce que l'on appelle une application Stateless

PM2 est un daemon, ce qui signifie que c'est un processus qui tourne en tâche de fond et qui continuera de tourner tant que l'on ne lui donne pas l'ordre de s'arrêter.

Je vous ai présenté les fonctionnalités les plus basiques et celles dont vous aurez tout de suite l'utilité, mais sachez que c'est un outil plus puissant que ça, il peut notamment :

  • La possibilité de déployer plusieurs processus simultanément, comme des micro-services par exemple
  • Le rechargement de l'app automatique quand le code change
  • Redémarrage du processus sans aucun downtime
  • Déploiement en mode cluster
  • ...

Déploiement

PM2 est disponible comme un paquet Node, vous pouvez donc l'installer directement depuis NPM (ou Yarn) comme ceci :

npm install pm2@latest -g

Une fois installé, il ne vous reste plus qu'à lancer votre application !

pm2 start app.js

Ensuite il ne vous reste plus qu'à controler vos processus Node en affichant les logs en temps-réel par exemple :

pm2 logs

Ou en examinant le monitoring de ressources !

pm2 monit

Et le tour est joué. Pour les fonctions plus avancées, je vous laisse consulter la documentation de l'outil disponible ici : https://pm2.keymetrics.io/docs/usage/quick-start/

J'espère que cet article vous aura plu, et je vous dis à bientôt sur le blog !

À propos de l'auteur

Hello, je suis Nicolas Brondin-Bernard, ingénieur web indépendant depuis 2015 passionné par le partage de d'expériences et de connaissances.

Aujourd'hui je suis aussi coach pour développeurs web juniors, tu peux me contacter sur nicolas@brondin.com, sur mon site ou devenir membre de ma newsletter pour ne jamais louper le meilleur article de la semaine et être tenu au courant de mes projets !


Photo by Raymond Pang on Unsplash