X

NodeJS: Desplegando nuestra aplicación como un servicio

Volvemos con  una pregunta interesante ¿Como desplegamos nuestra aplicación nodejs como un servicio en nuestra máquina de producción? El proyecto en el que estoy trabajando es un requisito que el servidor de nodejs arranque con el sistema empezando a leer los sensores proporcionando la información a la aplicación cliente que se conecte al websocket que abre el servidor. El objetivo es que no deban de arrancar el servicio y que este se levante automáticamente solo en caso de caerse por algún tipo de error.

 

En Linux existen distintas vertientes y estrategias de arranques de los servicios, pero hoy voy a hablar de Upstart, que es una estrategia basada en eventos para el demonio init, el cual es el encargado de arrancar todos los servicios necesarios para el funcionamiento del sistema operativo. Upstart se encarga de lanzar todas las tareas necesarias para el arranque del sistema por lo que podemos engancharnos a él pudiendo crear nuestras propias tareas, de tal manera arrancar nuestro servicio al arranque del sistema.

 Configurando nuestro servicio nodejs

Para hacer que nuestro server se comporte como un servicio del sistema y podamos arrancarlo, pararlo, reiniciarlo, ver su estado, acceder a su log debemos de definir este servicio con Upstart implementando un script que incluiremos en /etc/init. El fichero debe de tener una extensión .conf , por ejemplo miapp.conf. A continuación os dejo un script de prueba como ejemplo de configuración de este un servicio nodejs.

 

description "daemon for my node app"
author "me"

env LOG_FILE= /var/log/node/miapp.log
env APP_DIR= /var/node/miapp
env APP= server.js
env PID_NAME= miapp.pid
env USER= root
env GROUP= www-data
env POST_START_MESSAGE_TO_LOG="miapp ha sido iniciada."
env NODE_BIN= /usr/bin/node
env PID_PATH=/var/opt/node/run
env SERVER_ENV="prod"

# Arranca cuando el sistema esta cargado
start on runlevel [2345]
# Se detiene cuando el sistema se apague
stop on runlevel [016]

#Levanta el proceso automáticamente si se muere
respawn
# Limitamos el "respawn" a xveces con un timeout T de 5s para que no intente levantar el proceso infinitamente.
respawn limit X T

pre-start script
    echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> $LOG_FILE
    mkdir -p $PID_PATH
    mkdir -p /var/log/node
end script

pre-stop script
    rm /var/run/yourprogram.pid
    echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> $LOG_FILE
end script

script
	export NODE_ENV=$SERVER_ENV
  exec start-stop-daemon --start --chuid $USER:$GROUP</span> --make-pidfile --pidfile $PID_PATH/$PID_NAME --chdir $APP_DIR --exec $NODE_BIN -- $APP >> $LOG_FILE2>&1

end script

 

Puedes ejecutar el servicio en cualquier momento con: sudo service start miservice. Automaticamente arrancara el servicio y podrás ver la salida del log en el directorio configurado y nuestro servidor nodejs corriendo.

 

Categorías: Backend
Tags: desplegarnodejsupstart
alonsus91 :Joven ingeniero en Informática especializado en Ingeniería Web apasionado por las nuevas tecnologías y las últimas novedades en informática e Internet con ansias de conocer a fondo el mercado laboral y aportarle todos mis conocimientos.
Disqus Comments Loading...

Utilizamos cookies para asegurar que damos la mejor experiencia al usuario en nuestro sitio web. Si continúa utilizando este sitio asumiremos que está de acuerdo.