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.
sudoaptinstall 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
sudovim[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:applicationplugins=python3socket=/tmp/deploy-with-python3.production.sockchdir=/ruta/absoluta/a/tu/proyectohome=/ruta/absoluta/a/tu/entorno/virtualenv=<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
sudoln -s ../apps-available/[tu-app].production.ini .ls -lh # verifica el link simbólico
Controla el servicio y valida su estado.
sudoservice 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|grepln# borra el link mal creado y vuelve a enlazar desde apps-availablesudorm[tu-app].production.ini
sudoln -s ../apps-available/[tu-app].production.ini .sudoservice 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.
sudovim /etc/uwsgi/apps-available/[tu-app].production.ini
# agrega o ajustaprocesses =4sudoservice 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.