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