L'outil indispensable pour déployer une application NodeJS en production
Pour déployer du Node, il ne suffit pas d'un simple node app.js pour être tranquille !
Article publié le 08/09/2020, dernière mise à jour le 22/09/2023
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
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/
Aucun commentaire pour l'instant