Cómo usar Django con uWSGI

uWSGI es un servidor de contenedores de aplicaciones rápido, auto-reparador y amigable para desarrolladores/sysadmins codificado en C puro.

Ver también

Los docs de uWSGI ofrecen una tutorial que cubre Django, nginx y uWSGI (una posible configuración de despliegue entre muchas). Los docs a continuación se centran en cómo integrar Django con uWSGI.

Requisito previo: uWSGI

La wiki de uWSGI describe varios procedimientos de instalación. Utilizando pip, el administrador de paquetes Python, puedes instalar cualquier versión de uWSGI con un solo comando. Por ejemplo:

# Install current stable version.
$ python -m pip install uwsgi

# Or install LTS (long term support).
$ python -m pip install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz

Modelo de uWSGI

uWSGI opera en un modelo cliente-servidor. Tu servidor web (por ejemplo, nginx, Apache) se comunica con un proceso de «trabajo» django-uwsgi para servir contenido dinámico.

Configuración y arranque del servidor uWSGI para Django

uWSGI admite múltiples formas de configurar el proceso. Consulta la documentación de configuración de uWSGI.

Aquí tienes un ejemplo de comando para arrancar un servidor uWSGI:

uwsgi --chdir=/path/to/your/project \
    --module=mysite.wsgi:application \
    --env DJANGO_SETTINGS_MODULE=mysite.settings \
    --master --pidfile=/tmp/project-master.pid \
    --socket=127.0.0.1:49152 \      # can also be a file
    --processes=5 \                 # number of worker processes
    --uid=1000 --gid=2000 \         # if root, uwsgi can drop privileges
    --harakiri=20 \                 # respawn processes taking more than 20 seconds
    --max-requests=5000 \           # respawn processes after serving 5000 requests
    --vacuum \                      # clear environment on exit
    --home=/path/to/virtual/env \   # optional path to a virtual environment
    --daemonize=/var/log/uwsgi/yourproject.log      # background the process

Se asume que tienes una paqueta de proyecto en nivel superior llamada mysite, y dentro de ella un módulo mysite/wsgi.py que contiene un objeto de aplicación WSGI. Esto es el layout que tendrás si ejecutaste django-admin startproject mysite (utilizando tu propio nombre de proyecto en lugar de mysite) con una versión reciente de Django. Si este archivo no existe, necesitarás crearlo. Consulta la documentación Cómo desplegar con WSGI para los contenidos por defecto que debes poner en este archivo y qué más puedes agregar a él.

Aquí tienes las opciones específicas de Django:

  • chdir: El camino al directorio que necesita estar en el camino de importación de Python – es decir, el directorio que contiene la paqueta mysite.

  • module: El módulo WSGI a utilizar – probablemente el módulo mysite.wsgi que startproject crea.

  • env: Debería contener al menos la variable de entorno DJANGO_SETTINGS_MODULE.

  • home: Ruta opcional a tu entorno virtual de proyecto.

Example ini configuration file: Ejemplo de archivo de configuración ini.

[uwsgi]
chdir=/path/to/your/project
module=mysite.wsgi:application
master=True
pidfile=/tmp/project-master.pid
vacuum=True
max-requests=5000
daemonize=/var/log/uwsgi/yourproject.log

Example ini configuration file usage: Uso del ejemplo de archivo de configuración ini.

uwsgi --ini uwsgi.ini

Corrigiendo UnicodeEncodeError para subidas de archivos

If you get a UnicodeEncodeError when uploading files with file names that contain non-ASCII characters, make sure uWSGI is configured to accept non-ASCII file names by adding this to your uwsgi.ini: Si obtienes un error de codificación Unicode (UnicodeEncodeError) al subir archivos con nombres que contienen caracteres no ASCII, asegúrate de que uWSGI esté configurado para aceptar nombres de archivo no ASCII agregando esto a tu uwsgi.ini.

env = LANG=en_US.UTF-8

Consulte la sección sobre archivos Unicode del guía de referencia Unicode para obtener más detalles.

See the uWSGI docs on managing the uWSGI process for information on starting, stopping and reloading the uWSGI workers. Consulte la documentación de uWSGI sobre _gestion del proceso uWSGI para obtener información sobre cómo iniciar, detener y recargar los trabajadores de uWSGI.