Despliegue de aplicaciones Django mediante uWSGI y Nginx

Para entornos de producción con Django, el uso de uWSGI como servidor de aplicaciones y Nginx como servidor de archivos estáticos y proxy inverso es una arquitectura estándar que garantiza rendimiento y estabilidad.

Configuración de uWSGI

uWSGI es un servidor web que implementa el protocolo WSGI para comunicar el servidor web con la aplicación Python. Primero, se debe instalar en el antorno virtual:

pip install uwsgi

Preparación de Django

Entes de desplegar, modifique el archivo settings.py para desactivar el modo de depuración y permitir peticiones externas:

# settings.py
DEBUG = False
ALLOWED_HOSTS = ['*'] # En producción, especifique su dominio

Archivo de configuración uWSGI

Cree un archivo llamado config_uwsgi.ini en la raíz del proyecto (donde se encuentra manage.py):

[uwsgi]
# Comunicación con Nginx a través de socket
socket = 127.0.0.1:9000

# Ruta absoluta al directorio del proyecto
chdir = /home/usuario/proyectos/mi_app

# Ruta relativa al archivo wsgi.py
module = mi_app.wsgi:application

# Gestión de procesos
master = True
processes = 4
threads = 2

# Archivo para el ID del proceso principal
pidfile = /tmp/app_master.pid

# Ejecución en segundo plano y logs
daemonize = /var/log/uwsgi/app_log.log

# Ruta al entorno virtual
virtualenv = /home/usuario/.virtualenvs/entorno_app

Operaciones de control

Para iniciar el servicio con la configuración creada:

uwsgi --ini config_uwsgi.ini

Para detener el servidor de forma segura:

uwsgi --stop /tmp/app_master.pid

Integración con Nginx

Nginx recibirá las peticiones de los usuarios y las redirigirá a uWSGI. La configuración básica en el archivo del sitio de Nginx es la siguiente:

location / {
    # Carga los parámetros estándar de WSGI
    include uwsgi_params;
    # Dirección del socket definido en el archivo .ini
    uwsgi_pass 127.0.0.1:9000;
}

Gestión de archivos estáticos

Django no debe servir archivos estáticos en producción. Para delegar esta tarea a Nginx:

  1. Defina la ruta de recolección en settings.py: ``` STATIC_ROOT = '/var/www/mi_app/static/'
  2. Ejecute el comando de recolección: ``` python manage.py collectstatic
  3. Conifgure Nginx para servir estos archivos directamente: ``` location /static { alias /var/www/mi_app/static/; }
    
    

Balanceo de carga y Proxying

Si necesita redirigir el tráfico hacia otro servidor (como una página de inicio estática independiente), puede usar proxy_pass:

location = / {
    # Redirección exacta a otro servidor web
    proxy_pass http://192.168.1.50;
}

Para implementar alta disponibilidad o balanceo entre múltiples instancias de uWSGI, utilice el bloque upstream fuera de la sección server:

upstream cluster_django {
    server 127.0.0.1:9000;
    server 127.0.0.1:9001;
}

server {
    listen 80;
    location / {
        include uwsgi_params;
        uwsgi_pass cluster_django;
    }
}

Tras realizar cambios en la configuración de Nginx, verifique la sintaxis y reinicie el servicio:

nginx -t
nginx -s reload

Etiquetas: Django uwsgi Nginx Python Server-Deployment

Publicado el 7-17 03:25