Supervisor tes nodes

Pour ce premier article écrit et publié avec Ghost, j'en profite pour expliciter un point de ma configuration qui m'a été suggéré par Loïc Guitaut, suite à la lecture de son article présentant Ghost. Ce point est l'utilisation de Supervisor pour lancer des services node.js au démarrage ou quand ils plantent, sans pour autant m'emmerder à créer des initscripts ni jouer avec la commande forever.

Installation

D'abord, installer le serveur supervisor, je vous renvoie à la documentation officielle pour plus de précisions, sachez seulement que pour ma part j'ai fait une installation depuis les dépôts de Debian avec le paquet supervisor.

sudo apt-get install supervisor

Configuration

Ma configuration du daemon est pour le moins succincte. De fait, je n'ai touché à rien de la configuration par défaut. Il suffit de rajouter des fichiers de configuration dans /etc/supervisord/conf.d pour chaque node à gérer. Ce qui donne la configuration suivante, à éditer en fonction de sa propre configuration (chemins, utilisateurs, etc).

Etherpad

[program:etherpad]
command = node /path/to/etherpad/node_modules/ep_etherpad-lite/node/server.js
directory = /path/to/etherpad
user = etherpad
autostart = true
autorestart = true
stdout_logfile = /var/log/supervisor/etherpad.log
stderr_logfile = /var/log/supervisor/etherpad_err.log

Pump

[program:pump]
command = node /path/to/pump/bin/pump
directory = /path/to/pump
user = pump
autostart = true
autorestart = true
stdout_logfile = /var/log/supervisor/pump.log
stderr_logfile = /var/log/supervisor/pump_err.log

Haste

[program:haste]
command = node /path/to/haste/server.js
directory = /path/to/haste
user = haste
autostart = true
autorestart = true
stdout_logfile = /var/log/supervisor/haste.log
stderr_logfile = /var/log/supervisor/haste_err.log

Ghost

[program:ghost]
command = node /path/to/ghost/index.js
directory = /path/to/ghost
user = ghost
autostart = true
autorestart = true
stdout_logfile = /var/log/supervisor/ghost.log
stderr_logfile = /var/log/supervisor/ghost_err.log
environment = NODE_ENV="production"

Mediagoblin

Paster

[program:mediagoblin-paster]
command = /path/to/mediagoblin/bin/paster serve /var/www/mediagoblin/paste_local.ini --server-name=fcgi fcgi_host=127.0.0.1 fcgi_port=26543
directory = /path/to/mediagoblin
user = mediagoblin
autostart = true
autorestart = true
stdout_logfile = /var/log/supervisor/mediagoblin-paster.log
stderr_logfile = /var/log/supervisor/mediagoblin-paster_err.log
environment = CELERY_ALWAYS_EAGER=false

Celery

[program:mediagoblin-celeryd]
command = /path/to/mediagoblin/bin/celeryd
directory = /path/to/mediagoblin
user = mediagoblin
autostart = true
autorestart = true
stdout_logfile = /var/log/supervisor/mediagoblin-celeryd.log
stderr_logfile = /var/log/supervisor/mediagoblin-celeryd_err.log
environment = CELERY_CONFIG_MODULE="mediagoblin.init.celery.from_celery"

Isso

[program:isso]
command = /path/to/isso -c /path/to/isso/isso.conf run
directory = /path/to/isso
user = isso
autostart = true
autorestart = true
stdout_logfile = /var/log/supervisor/isso.log
stderr_logfile = /var/log/supervisor/isso_err.log
environment = LANG="fr_FR.UTF-8"

Appliquer

Ne m'en sortant pas, n'obtenant qu'un ERROR (no such process) en tentant d'appliquer ma configuration, Loïc revint à la rescousse me délivrer la sainte commande.

sudo supervisorctl update

Ensuite, il est possible de gérer les programmes rajoutés par supervisorctl {start,stop,status} programme, dont vous obtiendrez la liste avec supervisorctl avail.