code.RiffZone.net

Un service web en NodeJS, monitoré par Supervisor

NodeJS permet de construire des services web plus efficaces pour certains usages; le problème classique étant de faire fonctionner cette application javascript en mode serveur.

Laissons de côté l'installation de NodeJS, vous trouverez tous les éléments sur le site nodejs.org suivant votre distribution.

Prenons l'exemple d'un script app.js logé dans '/home/mynodeapp'. Notre serveur est parfaitement fonctionnel, nous pouvons le lancer depuis la ligne de commande (par 'node app.js'), mais il va s'arrêter dès qu'on fermera notre session; nous voudrions non seulement pouvoir le lancer en tâche de fond, indépendamment d'une session ouverte, mais qu'il puisse se relancer automatiquement en cas de problème grave, de redémarrage de la machine, etc... Supervisor est un outil (écrit en Python) précisément fait pour ça, voyons maintenant comment le mettre en oeuvre pour piloter notre tracker en Go.

On commence par installer Supervisor:

apt-get install supervisor

Pour des raisons de sécurité, on ne veut pas exécuter notre tracker en root, nous allons donc créer un groupe 'supervisor' auquel appartiendra un utilisateur spécifique 'mynodeapp', lequel sera utilisé pour exécuter le serveur:

addgroup --system supervisor adduser mynodeapp (spécifiez un mot de passe) adduser mynodeapp supervisor

Editons maintenant le fichier de configuration '/etc/supervisor/supervisord.conf' de manière à refléter le contenu suivant (je n'ai changé que les lignes chmod et chown de la configuration par défaut):

[unix_http_server] file=/var/run/supervisor.sock chmod=0770 chown=root:supervisor [supervisord] logfile=/var/log/supervisor/supervisord.log pidfile=/var/run/supervisord.pid childlogdir=/var/log/supervisor [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl=unix:///var/run/supervisor.sock [include] files = /etc/supervisor/conf.d/*.conf

Puis on relance Supervisor pour prendre en compte ces modifications:

service supervisor restart

On ajoute alors au répertoire '/etc/supervisor/conf.d' un fichier de configuration destiné à notre tracker:

[program:mynodeapp] command=/usr/local/bin/node /home/mynodeapp/mynodeapp.js autostart=true autorestart=true startretries=10 user=mynodeapp directory=/home/mynodeapp environment=APP_SETTINGS="/home/mynodeapp/mynodeapp.toml" redirect_stderr=true stdout_logfile=/var/log/supervisor/mynodeapp.log stdout_logfile_maxbytes=50MB stdout_logfile_backups=10

(créez un fichier vide '/home/mynodeapp/mynodeapp.toml', nous n'aurons pas besoin de variables d'environnement ici)

Nous avons encore un détail à régler, un logiciel serveur ne peut écouter sur le port 80 sans qu'on lui accorde d'abord explicitement l'autorisation de le faire, avec l'utilitaire 'setcap'. Au besoin, il faudra l'installer:

apt-get install libcap2-bin

La commande d'autorisation en question est:

setcap 'cap_net_bind_service=+ep' /usr/local/bin/node

Demandons à Supervisor de charger sa nouvelle configuration:

supervisorctl reload

Puis vérifions que notre service a bien été lancé:

supervisorctl status mynodeapp

Notre service est maintenant opérationnel, nous allons pour terminer mettre en place trois scripts pour stopper, lancer ou vérifier son état:

- /home/mynodeapp/stop.sh :

supervisorctl stop mynodeapp

- /home/mynodeapp/start.sh :

supervisorctl start mynodeapp

- /home/mynodeapp/status.sh :

supervisorctl status mynodeapp

Cette page et quelques autres sont propulsées par Index