Objectif

Vous avez une application Node.js qui doit être supervisée, autrement dit, elle doit être lancée par un service au démarrage de votre système, être relancée automatiquement si le service crash (dans une certaine mesure) et vous devez disposer de commandes pour lancer l’application, l’arrêter et la relancer.

Le contexte

Cette application tourne sur un serveur linux qui dispose du système de supervision systemd. Dans d’autres contextes il existe d’autres solutions, comme pm2, par exemple, mais systemd présente l’avantage d’être deja disponible sur votre serveur, d’être fiable et efficace.

Mise en oeuvre

Soit :

  • une application nodejs : myapp.js
  • qui est dans le repertoire /var/www/myapp/
  • qui doit être exécutée par l’utilisateur www-data

On crée le fichier de configuration :

nano /etc/systemd/system/myapp.service

Qui contient :

[Unit]
Description=Mon application node.js 
After=network.target

[Service]
WorkingDirectory=/var/www/myapp/
User=www-data
ExecStart=/usr/bin/npm run start 
Restart=always  
RestartSec=10 

[Install]
WantedBy=multi-user.target

On ‘reload’ le système de supervision :

systemctl daemon-reload

On active le service :

systemctl enable myapp.service

On le lance :

systemctl start myapp.service

Pour connaitre le statut du service :

systemctl status myapp.service

Pour consulter des logs plus complets :

journalctl -u myapp.service -f

À noter que si votre app log sur stdout et stderr, cette commande, va vous permette de voir tous les logs de l’application.

Pour arrêter le service :

systemctl stop myapp.service

Pour redémarrer le service :

systemctl restart myapp.service