Supervisord & Gunicorn

Django Gunicorn & Supervisor

Estar creando una init-scripts o crons jobs para mantener nuestra aplicación corriendo o inicie una vez el sistema haga boot no es nada agradable. Si estas en esa misma situación este tutorial es para ti.

Instalar Supervisor

easy_install supervisor

Una vez instalado tenemos que crear nuestro archivo de configuración de supervisor, la ruta donde lo crearemos es la default por supervisor y mejor esa para evitar tener que estar cambiando configuraciones y/o pasando argumentos con la ruta de la misma.

echo_supervisord_conf > /etc/supervisord.conf

ejecutar el daemon de supervisor

supervisord

Ahora tenemos que crear nuestra configuración en supervisor para que corra nuestro proyecto, agregando esto a el archivo /etc/supervisord.conf:

...
[program:proyecto]
command=python /var/www/proyecto/manage.py runserver 8080
autostart=true
stderr_logfile=/var/log/long.err.log
stdout_logfile=/var/log/long.out.log
...

Lo que acabamos de hacer es configurarlo para que inicie una vez inicie supervisor (autostart) y asignarle donde queremos que redirija los errores y el output de nuestro proyecto en ejecución.

Para correr nuestra aplicación tenemos que hacer unos cuantos pasos por lo que es altamente recomendable crear un archivo bash y colocar todos los pasos para ejecutar nuestra app ahi dentro.

Configuración Supervisor

[program:proyecto]
command=/var/www/proyecto/start.sh
autostart=true
stderr_logfile=/var/log/long.err.log
stdout_logfile=/var/log/long.out.log

start.sh

#!/bin/bash

# colocarnos en nuestra carpeta de nuestro proyecto 
# o podemos usar la opción de gunicorn --chdir
cd /var/www/proyecto

# En caso de tener su proyecto bajo un entorno 
# virtual (virtualenv) activarlo
source env/bin/activate

gunicorn proyecto.wsgi -b 127.0.0.1:8080 --worker-class=gevent --workers 2

Una vez configurado todo esto podríamos probar nuestra aplicación simplemente corriendo nuestro script.sh. Para iniciar nuestra aplicación simplemente ejecutamos estos comandos:


#Ejecutar una aplicacion
supervisorctl start proyecto

#Detiene una aplicacion en particular
supervisorctl stop proyecto

#Reinicia todas las aplicaciones
supervisorctl reloadall

#Recarga las configuracion de supervisor
supervisorctl reread

Para quienes quieren manejar sus app sin tener que estar conectados a ninguna terminal, Supervisor posee una aplicación web que es bastante simple y da para los usos.

supervisord

En caso de no gustarle ese web view existen varios proyectos con el mismo fin, entre ellos se pueden destacar los siguientes:

Referencia

Supervisor
Gunicorn