1 min read

Arrancar Ghost como un servicio del sistema (daemon) en Ubuntu

Ghost es un aplicación independiente del servidor web. Éste solo actua como proxy para redirigir las peticiones y es la aplicación la que sirve las páginas.
Para mantener Ghost en ejecución hay muchos modos. Forever y Supervisor son dos paquetes especificos para aplicaciones NodeJS. En las pruebas que he hecho Forever me dió bastante guerra, varias veces perdí el control de Ghost. Supervisor no he llegado ha probarlo.
Al final, opté por usar lo conocido. Upstart ya está integrado en el sistema y es un modo fiable de controlar la ejecución de aplicaciones. Éste es el script que he utilizado:

start on startup
stop on shutdown

respawn
respawn limit 5 30

env name=ghost
env uid=ghostuser
env gid=ghostuser
env daemon=/usr/bin/node
env path=/ruta/app/ghost/index.js

script
	export NODE_ENV=production
	exec start-stop-daemon --start --make-pidfile --pidfile /var/run/$name.pid --name $name -c $uid:$gid -x $daemon $path >> /var/log/upstart/$name.log 2>&1
end script

Hay que guardarlo en /etc/init/ y darle permisos de ejecución chmod +x ghost.conf. Dentro del script hay que configurar el nombre del daemon, el usuario y grupo que lo va a ejecutar y la ruta donde esta la aplicación. El usuario no tiene, es más, no debe ser root ni sudoer. Ghost no lo necesita y nos ahorramos problemas.
Importante lo de la variable NODE_ENV. Así controlamos si Ghost arranca en modo producción o desarrollo.

Para arrancar o parar la aplicacion:

service ghost start

service ghost stop

Por último, en caso de tener que parar o arrancar el servicio para no tener que depender de un usuario con permisos de administrador he convertido a ghostuser en una cuenta que puede iniciar el proceso service sin que nos pida la contraseña. Se hace añadiendo esta linea en el fichero /etc/sudoers

ghostuser ALL = (ALL) NOPASSWD: /usr/sbin/service ghost start, /usr/sbin/service ghost stop

No es estrictamente necesario pero me sera util mas adelante.