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
.