En produccion: nginx + uwsgi + django

Puesta en producción de django, utilizando nginx y uwsgi, que ambos me parecen muy eficientes, toda la vida utilizando apache y pasar a nginx fue una odicea total pero estoy muy a gusto con el rendimiento que ha mostrado nginx, en cuanto a uwsgi es el único wsgi(Web Server Gateway Interface) que e utilizado, incluyendo módulos para interprete de python o cualquier cosa con la que puede colocar en producción un proyecto de django.

Algunos conceptos básicos:

Nginx: Es un servidor proxy inverso de codigo abierto para HTTP, HTTPS, SMTP, POP3 e IMAP, asi como también un equilibrador de carga, cache HTTP y un servidor web. El proyecto ngnix comenzó con un fuerte enfoque en la alta concurrencia, alto rendimiento y bajo consumo de memoria.

WSGI: (Web Server Gateway Interface), es un interfaz simple y universal entre los servidor web y applicaciones web o marcos para el lenguaje de programación Python.

uWSGI: Es un software de código abierto BSD, para el modulo de integración de nginx, GPL para el modulo de integración de apache2. uWSGI Entrega una pila completa para aplicaciones WEB conectadas en red/cluster, implementacion mensajes/paso de objetos, cache, RPC y comunicacion entre procesos. Se puede ejecutar en los modos de preforking, threaded, asynchronous/eventos y soporta diversas formas de hils tales (uGreen, Greenlet, Fiber), Ofrece varios métodos de configuración: atraves de linea de comandos, variables de entorno, atra vez de XML, INI, archivos YAML, atravez de LDAP y muchos mas.

DJANGO: Es un framework web en python de alto nivel que fomenta el rápido desarrollo y el diseño limpio y pragmático.

La instalación y toda las configuración la voy a realizar con python 3, django 1.5, GNU/linux Debian 7, ngnix y virtualenv.

1. Instalamos todo lo necesario (Si el directorio www no existe, lo puedes crear o puede crear el entorno donde tu quieres)
# aptitude install nginx uwsgi uwsgi-plugin-python uwsgi-pluing-python3 python-virtualenv


2. Creamos un entorno nuevo de python para django.
# cd /var/www/

# virtualenv -p python3.2 pruebas_uwsgi


3. Ingresamos al entorno de pruebas_uwsgi e instalamos django
# source pruebas_uwsgi/bin/activate

# pip install django==1.5.5


4. Creamos un nuevo proyecto de django.
# cd pruebas_uwsgi 

# django-admin.py startproject pruebas


5. Configuramos uwsgi.
# vim /etc/uwsgi/apps-available/pruebas.ini

[uwsgi]

    plugins = python3

    virtualenv = /var/www/pruebas_uwsgi/

    chdir = /var/www/pruebas_uwsgi/pruebas/

    pythonpath = ..

    env = DJANGO_SETTINGS_MODULE=pruebas.settings

    module = django.core.handlers.wsgi:WSGIHandler()

    touch-reload = /var/www/pruebas_uwsgi/pruebas/pruebas/settings.py



    processes = 2

    threads = 1

    workers =1

    stats = 127.0.0.1:1717



# /etc/init.d/uwsgi restart


plugins = python3: Seleccionamos la version de python a ejecutar nuestro proyecto
virtualenv: Le decimos la dirección absoluta de nuestro entorno virual de python
chdir: Le decimos la dirección absoluta del proyecto.
env: ubicacion del archivo settings.py
module:
touch-reload: Archivos que si son tocados uwsgi se recargara, puedes tener varias lineas como desees.
processes: Cantidad de procesos. esta opción depende de la maquina en que se esta trabajando
threads: Cantidad de hilos se crearan con esta apps, esta opción depende de la maquina en que se este trabajando.
workers: Cantidad de trabajadores uwsgi
stats: Estadísticas de uwsgi

6. Luego creamos un enlace para uwsgi tenga presente que apps estan activas.
# cd /etc/uwsgi/apps-enabled/ 
 
# ln -s ../apps.available/pruebas.ini

# /etc/init.d/uwsgi restart


7. Configuramos nginx.
# vim /etc/nginx/sites-available/pruebas

server {

    listen 80;

    server_name 127.0.0.1



    access_log /var/log/nginx/local_access.log;

    error_log /var/log/nginx/local_error.log;



    location /static/ {

         gzip_static on;

         alias /var/www/pruebas_uwsgi/pruebas/static/;

     }



     location / {

          uwsgi_read_timeout 600;

          gzip_static on;

          include uwsgi_params;

          uwsgi_pass unix:///var/run/uwsgi/app/prueba/socket;

     }

} 
  
# cd /etc/nginx/sites-enabled/
# ln -s /etc/nginx/sites-available/pruebas
# /etc/init.d/nginx restart

8. Probamos en un navegador web preferido. en mi caso utilizo como principal iceweasel. 127.0.0.1, Debe aparecer el mensaje clásico "It worked!" y si ingresamos con 127.0.0.1:1717, podemos ver las estadísticas de funcionamiento de uwsgi.





nota: He utilizado un maquina virtual, KVM y manejador virt-manager. jejeje por eso se ve algo anti-estetico.

cualquier duda, comentario o corrección no duden en dejar el comentario, y alguna sugerencia sobre algún tema, sera bienvenida.

Entradas más populares de este blog

Convertir disco virtualbox.ova a qemu.qcow2

Mi cambio de asterisk a FreeSWITCH

Python, Redis una combinacion estupenda.

disqus

comments powered by Disqus