Configurar uWSGI como servicio para Django

Clase 14 de 22Curso de Despliegue de Aplicaciones Python en la Nube

Resumen

Configura uWSGI con Nginx para servir Django en producción con control de procesos, estabilidad y mejor desempeño. Partiendo de una ejecución previa con Gunicorn, aquí se muestra cómo instalar uWSGI, crear el archivo .ini, enlazarlo con el esquema de apps-available/apps-enabled, validar el service y escalar processes sin interrumpir tu sitio.

¿Qué lograrás al configurar uwsgi con nginx para django?

Conseguirás mayor flexibilidad que con Gunicorn: podrás definir la cantidad de procesos o workers, crear un proceso master que administre los hijos y mantener el sitio en línea durante deploys. Además, establecerás un socket para comunicar uWSGI con Nginx y apuntarás al entorno virtual con rutas exactas.

  • Control de recursos: define processes y límites.
  • Alta disponibilidad: el master reemplaza procesos viejos por nuevos durante el deploy.
  • Integración con Nginx: comunicación vía socket en /tmp.

¿Cómo instalar y crear la configuración .ini de uwsgi?

Primero, conéctate al servidor con tu llave, usuario e IP. Luego instala uWSGI y valida el comando.

sudo apt install uwsgi
uwsgi  # verifica parámetros disponibles y ayuda

Crea el archivo de configuración en /etc/uwsgi dentro de la ruta de aplicaciones disponibles.

cd /etc/uwsgi/apps-available
sudo vim [tu-app].production.ini

¿Qué parámetros clave debe incluir el .ini?

El archivo es un .ini y define la aplicación, plugins, socket y entorno. Ejemplo de estructura según lo explicado:

[uwsgi]
module = config.uwsgi:application
plugins = python3
socket = /tmp/deploy-with-python3.production.sock
chdir = /ruta/absoluta/a/tu/proyecto
home = /ruta/absoluta/a/tu/entorno/virtual
env = <variable de entorno para la configuración de Django>
master = true
; opcionalmente: processes = 4
  • module: apunta a la app WSGI, por ejemplo config.uwsgi:application.
  • plugins: usa el de Python 3 para ejecutar aplicaciones de Python.
  • socket: archivo en /tmp para conectar con Nginx.
  • chdir: ruta absoluta del proyecto.
  • home: ruta del entorno virtual para cargar librerías y dependencias.
  • env: variable de entorno para los ajustes de Django.
  • master: habilita el proceso maestro.

¿Cómo definir el socket y el entorno virtual?

El socket es un archivo que Nginx usará para comunicarse con uWSGI. Colócalo en /tmp con un nombre único para evitar choques entre procesos. Tip: abre dos terminales para copiar rutas exactas con pwd y navegar hasta tu entorno virtual.

  • Crea un nombre específico: deploy-with-python3.production.sock.
  • Verifica que /tmp sea accesible para el servicio.
  • Copia la ruta del proyecto y del entorno virtual para chdir y home.

¿Cómo activar la app con apps-available y apps-enabled?

Como en Nginx, tu archivo .ini debe estar en apps-available y habilitarse con un enlace simbólico en apps-enabled.

cd /etc/uwsgi/apps-enabled
sudo ln -s ../apps-available/[tu-app].production.ini .
ls -lh  # verifica el link simbólico

Controla el servicio y valida su estado.

sudo service uwsgi status

¿Cómo diagnosticar errores y escalar procesos con uwsgi?

Si uWSGI no aparece como proceso activo, revisa el estado, los logs mostrados por el service y usa utilidades del sistema para encontrar fallos de configuración o enlaces.

¿Cómo verificar el servicio y procesos con htop?

Usa htop para observar procesos y filtrar por uWSGI.

htop
# Presiona F4 y escribe: uwsgi
  • Si no ves procesos: el servicio pudo terminar en exit.
  • Revisa también que el socket exista en /tmp.
ls /tmp | grep .sock

¿Cómo corregir el error de symbolic links?

Si ves “too many levels of symbolic links”, el enlace apunta a sí mismo. Encuentra el comando problemático en el historial y corrígelo.

history | grep ln
# borra el link mal creado y vuelve a enlazar desde apps-available
sudo rm [tu-app].production.ini
sudo ln -s ../apps-available/[tu-app].production.ini .
sudo service uwsgi restart
  • Habilidad clave: depuración con history | grep.
  • Validación: imprime el contenido del link con tu herramienta habitual para confirmar que apunta al archivo correcto.

¿Cómo ajustar processes y usar master sin caídas?

Edita el .ini para escalar processes y reinicia el servicio.

sudo vim /etc/uwsgi/apps-available/[tu-app].production.ini
# agrega o ajusta
processes = 4

sudo service uwsgi restart
  • Verifica en htop: verás un master y los procesos definidos.
  • Beneficio del master: durante el deploy, elimina procesos viejos y crea nuevos manteniendo el sitio en línea.
  • Servicio de Linux: al reiniciar el servidor, uWSGI se ejecutará según tu .ini.

¿Tienes dudas, atascos con los enlaces o quieres compartir tus parámetros preferidos de uWSGI? Deja tu comentario y cuéntanos tu resultado del reto.