Gérer ses applications Node en production : PM2

Node.js est une plateforme logicielle de plus en plus populaire et de plus en plus utilisée, cela ne fait aucun doute.
Le fait que Node soit utilisé en tant que serveur, et donc qu'une application Node tourne en permanence le rend difficile à éxécuter dans un environnement de production. En effet, une application Node en production se doit d'être en fonctionnement en permanence pour être accessible. De plus, le code doit pouvoir être mis à jour - et donc le serveur redémarré - sans aucun downtime (temps d'arrêt). Des solutions de ce genre existent déjà, telles que node-forever ou node-supervisor, mais une sort du lot à mon avis : PM2.

Et dieu inventa PM2...

PM2 est donc un gestionnaire de processus pour les applications Node.

Logo PM2

Bien que tout nouveau, il dispose déjà de nombreuses fonctionnalités qui trouveront rééllement leur utilité dans un environnement de production :

  • Mise en démon de script, permettant de faire tourner les applications en tâche de fond
  • Redémarrage automatique des applications crashées
  • Rechargement des applications avec 0 downtime
  • Lancement de plusieurs instances des applications à l'aide du module Cluster
  • Répartition de charge sur ces différentes instances
  • Monitoring CPU et RAM en console
  • Une API HTTP permettant d'intégrer les informations PM2 à souhait, par exemple sur votre panel admin
  • [A venir], une interface Web

PM2 est compatible CoffeeScript et fonctionne sur Linux et Mac.

Utilisation

Après avoir installé Node et NPM, installez pm2 en éxécutant npm install -g pm2.

Pour mettre en démon un script, il suffit d'éxécuter NODE_ENV=production pm2 start app.js -i max --name mon-application. Cette commande lance n instances de votre application dépendant du nombre de processeur dont vous disposez. Ainsi, si la machine de production dispose de 4 coeurs, 4 instances seront éxécutées. Pour un nombre d'instances défini, il suffit de remplacer max par le nombre d'instances que vous souhaitez. Ici, on définit également la variable d'environnement NODE_ENV pour que l'application démarre en mode production.

Votre application est dès à présent surveillée par pm2 et sera automatiquement redémarrée en cas de crash.

Par la suite, vous pourrez utiliser d'autres commandes, notamment pm2 list qui permet de lister les processus gérés par pm2, ainsi que pm2 monit, permettant de voir l'usage CPU et RAM des applications.

pm2 list

pm2 monit

C'est gratuit et open-source sur GitHub, alors n'hésitez pas à l'essayer, ça en vaut vraiment la peine. Ce blog, tournant sous Ghost, est lui-même sous surveillance par PM2 !