Configurar uWSGI como servicio para Django
Clase 14 de 22 • Curso de Despliegue de Aplicaciones Python en la Nube
Contenido del curso
Configuración de Servidores en la Nube para Despliegue
- 6

Cómo elegir recursos de servidor en AWS
03:33 min - 7

Cómo crear cuenta AWS con free tier
07:17 min - 8

Crear una instancia EC2 con Ubuntu en AWS
12:44 min - 9

SSH con llave .pem en Ubuntu AWS
08:41 min - 10

Cómo gestionar Ubuntu con apt y sudo
10:13 min - 11

Cómo DNS convierte tu IP en dominio memorable
13:55 min - 12

Cómo instalar certificados SSL con Certbot
05:16 min
Administración y Optimización de Servidores para Producción
- 13

Cómo clonar Django en servidor con SSH y Deploy Keys
14:41 min - 14

Configurar uWSGI como servicio para Django
Viendo ahora - 15

Conectar NGINX con uWSGI por proxy reverso
04:33 min - 16

Logs específicos por aplicación en Python
11:49 min - 17

Cómo configurar Sentry en Django
08:54 min - 18

Variables de entorno Django en servidor
04:28 min
Integración de Servicios Complementarios para Aplicaciones Python
Automatización y CI/CD para Despliegues Python
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.