Requerimientos
pip install gunicorn djangoCreacion de proyecto con django
Creamos un proyecto con django, en esta caso voy a utilizar django 1.6, con python 3.3.$ cd /opt/ $ virtualenv -p python3.3 test $ cd test $ source bin/activate $ pip install django gunicorn $ django startproject test $ cd test
Configuracion de gunicorn
Dentro del proyecto de django creamos un archivo para la ejecución de gunicorn que en esta caso llamaremos, gunicorn_server.py$ pwd /opt/test/test/ $ vim gunicorn_server.py
command='/opt/test/bin/gunicorn' pythonpath='/opt/test/test/' bind = '0.0.0.0:80' logfile = "/var/log/test.gunicorn.log" workers =2 loglevel = 'error' #daemon = True debug = True #user = 'www-data'
Guardamos y cerramos, para detalles de configuracion puedes visitar la documentación.
Verificamos que todo esta bien hasta el momento. y ejecutamos la siguiente linea.
/opt/test/bin/gunicorn -c /opt/test/test/gunicorn_server.py test.wsgi
Si todo nos va bien, debemos ver la pagina en nuestro navegar con solo ingresar 127.0.0.1 si estamos dentro de nuestra maquina local y no tenemos otro servidor http con lo que nos pueda dar alguno error, si tienes algún otro servidor http corriendo en el puerto 80 cambia la configuración de gunicorn al puerto 81 o al que mas te guste.
Si tenemos problemas con los archivos estáticos, hacemos lo siguiente cambios en la urls.py
from django.contrib.staticfiles.urls import staticfiles_urlpatterns urlpatterns += staticfiles_urlpatterns()
Esta caso solo es para desarrollo para producción es mejor colocar a gunicorm detrás de un servidor como nginx, puedes ver en gunicorn una configuración básica para el servidor nginx aqui
Configuración de supervisor
Que es supervisor?Supervisor es un sistema para controlar y mantener el estado de proceso, similar a lo que hace init, pero no pretende ser una sustitución init.
Se gestionará PROCESOS o grupos de procesos que necesitan ser iniciado y detenido en orden individual, y es posible controlar el estado del proceso individual a través de un mecanismo RPC, lo que permite a los usuarios normales reinician procesos.
# aptitude install supervisor
Al instalar supervisor se crea un directorio /etc/supervisor/conf.d/ , dentro de ese directorio vamos a crear un archivo que se llamara test.conf.
# cd /etc/supervisor/conf.d/ # vim test.conf
[program:test] process_name=test command=/opt/test/bin/gunicorn -c /opt/test/test/gunicorn_server.py test.wsgi directory=/opt/test/test/ environment=PYTHONPATH=/opt/test/bin/:/opt/test/lib/ #user=www-data autostart=true autorestart=true stdout_logfile=/var/log/test.supervisord.log redirect_stderr=trueGuardamos y cerramos. Recargamos supervisor para que lee los nuevos archivos, e iniciamos el proceso de lineas.
#supervisorctl supervisor> supervisor> help default commands (type help <topic>): ===================================== add clear fg open quit remove restart start stop update avail exit maintail pid reload reread shutdown status tail version supervisor> reload Really restart the remote supervisord process y/N? y Restarted supervisord supervisor> reread test: available supervisor> status test BACKOFF Exited too quickly (process log may have details) supervisor> restart test test: stopped test: startedverificamos que tengamos el puerto 80 abierto
netstat -pan | grep :80
Debe aparecer algos como esto
# netstat -pan | grep :80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 17100/python3.3 tcp 0 0 127.0.0.1:80 190.145.63.69:40390 TIME_WAIT - tcp 0 0 127.0.0.1:80 190.145.63.69:40391 ESTABLISHED 17105/python3.3 tcp 0 0 127.0.0.1:80 190.145.63.69:40392 ESTABLISHED 17103/python3.3
y revisamos cuantos trabajadores hay creados por gunicorn.
# ps ax | grep gunicorn 17100 ? S 0:00 /opt/test/bin/python3.3 /opt/test/bin/gunicorn -c /opt/test/test/gunicorn_server.py test.wsgi 17103 ? S 0:00 /opt/test/bin/python3.3 /opt/test/bin/gunicorn -c /opt/test/test/gunicorn_server.py test.wsgi 17104 ? S 0:00 /opt/test/bin/python3.3 /opt/test/bin/gunicorn -c /opt/test/test/gunicorn_server.py test.wsgi 17105 ? S 0:00 /opt/test/bin/python3.3 /opt/test/bin/gunicorn -c /opt/test/test/gunicorn_server.py test.wsgi 17106 ? S 0:00 /opt/test/bin/python3.3 /opt/test/bin/gunicorn -c /opt/test/test/gunicorn_server.py test.wsgi 17118 pts/0 S+ 0:00 grep gunicorn
Con esto podemos configurar nuestro servidor http preferido ne mi caso siempre utilizo nginx, por lo facil de configurar y nivelar las cargas.