D/ DJANGO CON CRITERIO

UNIDAD 8 · AZURE Y DJANGO: CONFIGURACIÓN Y DESPLIEGUE

Comando de arranque: Gunicorn o Daphne

Elige el servidor por el protocolo de la aplicación y verifica su ruta de importación.

Ilustración: Dos puertas de entrada
Dos puertas de entrada

CAPÍTULO 9 · El mismo proyecto llega a Azure

El comando de arranque tiene que corresponder al proyecto

En el PC, manage.py runserver nos permitió trabajar y observar cambios. En el alojamiento necesitamos un servidor de aplicación y un comando que encuentre el módulo correcto. La elección no depende de cómo se ve la página, sino de la interfaz de ejecución que utiliza el proyecto y de si requiere capacidades como las conexiones ASGI estudiadas antes.

Relacionamos Gunicorn con la ruta WSGI y Daphne con la ruta ASGI del ejemplo. También examinamos desde qué directorio se ejecutará el comando. Un archivo config/wsgi.py dentro de SensorHub no se encuentra de la misma manera que uno situado en la raíz del paquete. La estructura de entrega y el startup tienen que acordarse juntos.

Ya podemos describir cómo se iniciará el proceso. Pero eso todavía no garantiza que aparezcan estilos, scripts e imágenes. Durante el desarrollo recibíamos una ayuda que no debemos suponer en producción. Antes de construir el paquete tenemos que preparar explícitamente esos recursos.

Leer esta parte dentro del relato completo →

DEL RELATO A LA PRÁCTICA

Vamos a desarrollar esta decisión con su mapa, explicación, código y ejercicio.

LABORATORIO DE CONFIGURACIÓN

Prepara tu estación de despliegue

Cambia el entorno, el servidor y la identidad para comparar sus responsabilidades.

Isla con servidores y una llave

Simulación didáctica. Los valores son ejemplos: no crea recursos, no inicia sesión ni publica archivos. Sin JavaScript, consulta la tabla y los pasos de la lección.

MIRA · CONECTA · COMPRENDE

Dos puertas de entrada

Dos puertas de entrada1. HTTP: Petición web convencional; 2. Gunicorn: Importa aplicación WSGI; 3. ASGI: HTTP y tiempo real; 4. Daphne: Importa aplicación ASGI01HTTPPetición web convencional02GunicornImporta aplicación WSGI03ASGIHTTP y tiempo real04DaphneImporta aplicación ASGI

Cada carril muestra un ámbito distinto. Compara sus responsabilidades antes de unir sus configuraciones.

Selecciona una pieza para destacar su responsabilidad.

Leer la explicación del mapa
  1. HTTP. Petición web convencional
  2. Gunicorn. Importa aplicación WSGI
  3. ASGI. HTTP y tiempo real
  4. Daphne. Importa aplicación ASGI
Descargar gráfico SVG ↓

¿Para qué sirve?

Un despliegue puede terminar correctamente y fallar al arrancar porque el servidor importa otro módulo o busca config en una carpeta incorrecta.

El concepto, explicado

Gunicorn con su worker WSGI atiende HTTP mediante config.wsgi:application. Daphne atiende ASGI mediante config.asgi:application. WebSockets requiere además routing y consumidores ASGI adecuados; cambiar el binario no crea esos componentes.

El comando se ejecuta en Linux, aunque hayas desplegado desde PowerShell en Windows. Usa 0.0.0.0 y el puerto esperado por el runtime; los ejemplos de este laboratorio usan 8000.

Si manage.py y config están en la raíz del paquete, no necesitas --chdir. Si usas una carpeta interna backend, cambia a esa carpeta antes de importar config. DJANGO_SETTINGS_MODULE sigue siendo config.settings.production si config es el paquete importable.

Incluye el servidor elegido en requirements.txt. No ejecutes migraciones en cada worker ni en cada reinicio. La liberación controlada aplica migraciones una vez antes de habilitar tráfico compatible.

El comando también depende del ZIP: con config/ en la raíz usa config.wsgi:application; con SensorHub/config/ usa gunicorn --chdir SensorHub config.wsgi:application. Para Daphne cambia primero al directorio SensorHub. El simulador permite comparar ambas disposiciones.

Implementación paso a paso

  1. Identifica si el proyecto sirve HTTP WSGI o necesita ASGI/WebSockets.
  2. Comprueba requirements.txt y el archivo wsgi.py o asgi.py.
  3. Define DJANGO_SETTINGS_MODULE en la app.
  4. Guarda una de las alternativas como comando de inicio.
  5. Revisa logs de importación, puerto y una petición real; prueba también WebSocket si aplica.

Ejemplo en SensorHub

# Alternativa A: raíz del ZIP con config/ y manage.py
# App Service Linux > configuración del stack > comando de inicio
# HTTP WSGI:
gunicorn config.wsgi:application --bind 0.0.0.0:8000 --workers 2 --timeout 120

# Alternativa B: ASGI, con daphne instalado y routing configurado:
daphne -b 0.0.0.0 -p 8000 config.asgi:application

# Si config/ está dentro de backend/, WSGI:
gunicorn --chdir backend config.wsgi:application --bind 0.0.0.0:8000
# Equivalente ASGI, como comando shell:
# bash -c 'cd backend && exec daphne -b 0.0.0.0 -p 8000 config.asgi:application'

Cómo leer el ejemplo

  • Son alternativas, no cuatro comandos a ejecutar en serie.
  • Dos workers es un punto de ensayo, no una regla de capacidad; mide RAM y concurrencia.
  • exec entrega señales al servidor cuando usas un wrapper shell.
  • El timeout no resuelve consultas lentas: revisa duración del caso de uso y separa trabajos largos.

Error habitual

No uses runserver en producción ni cambies el settings module a un nombre basado en la carpeta descargada sin comprobar el import.

05 / PRACTICAR

Tu turno

El ZIP contiene backend/config/wsgi.py. Corrige ModuleNotFoundError: config.

Ver solución orientativa

Configura --chdir backend o ajusta la estructura del ZIP para poner config en la raíz. No instales un paquete llamado config para ocultar el error.

Cómo sabes que funciona

  • El log muestra el servidor elegido escuchando.
  • /health/ responde y el caso real funciona después de reiniciar.

Para profundizar

Documentación oficial para comprobar configuración, permisos y condiciones vigentes. Revisión del tema: 11 de octubre de 2026.

CONTINUAR LA EXPERIENCIA

El siguiente paso del recorrido:

Archivos estáticos: collectstatic y WhiteNoise →Continuar en modo relato