Configurar uWSGI como servicio para Django

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.