CAPÍTULO 9 · El mismo proyecto llega a Azure
Subir el archivo y desplegarlo no siempre significan lo mismo
El autor describe una forma de trabajo cómoda: entrar a las herramientas avanzadas y cargar el ZIP desde la interfaz disponible en su entorno. Esa experiencia reduce pasos de conexión desde el computador. Para convertirla en una explicación útil, necesitamos distinguir qué hace exactamente la pantalla al recibir el archivo.
Una operación de despliegue puede preparar dependencias y dejar registros de su resultado; un explorador puede limitarse a copiar o extraer contenido. Por eso seguimos el estado de publicación, el build y el arranque. También reconocemos que las interfaces disponibles varían y que la UI clásica de ZIP no se puede prometer para cualquier App Service Linux.
Si el paquete está alojado, el servicio necesita acceso a sus bytes, no a una página de vista previa. Si la interfaz elegida no ofrece un despliegue compatible, el recorrido no debe detenerse. Conservamos una segunda vía manual que publica el mismo artefacto desde la terminal con un destino explícito.
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.
MIRA · CONECTA · COMPRENDE
El muelle de Kudu
Las flechas resumen el recorrido conceptual. Los controles y dependencias se detallan debajo.
Selecciona una pieza para destacar su responsabilidad.
Leer la explicación del mapa
- deploy.zip. Paquete manual preparado
- Kudu. Usa una operación de despliegue
- Build Linux. Instala dependencias
- Validación. Revisa logs y resultado
01 / EL PROBLEMA
¿Para qué sirve?
Arrastrar un ZIP, subirlo como archivo y pedir a Kudu que lo despliegue no son operaciones equivalentes.
02 / COMPRENDER
El concepto, explicado
Abre App Service, Herramientas de desarrollo, Herramientas avanzadas y la URL SCM mostrada por el portal. Allí inspeccionas despliegues y logs. El contenedor de construcción y el proceso de la aplicación pueden tener entornos distintos.
La interfaz clásica Tools > Zip Push Deploy permite arrastrar paquetes donde está soportada. La documentación advierte que ese endpoint UI no funciona en App Service Linux; para nuestro recorrido Python/Linux usa CLI o la API de publicación. Si tu portal presenta otra pantalla, identifica la operación y revisa sus logs.
Con un ZIP alojado, el servicio obtiene el paquete desde la URL. Usa un blob privado y acceso temporal de lectura, o el mecanismo de acceso admitido por tu infraestructura. La URL debe ser alcanzable desde el despliegue y seguir vigente hasta terminar.
No pongas un SAS real en el material del curso, Git ni capturas. Subir site.zip al explorador de archivos sin invocar despliegue no instala dependencias ni selecciona el arranque.
El autor describe que en su entorno arrastra el ZIP desde Herramientas avanzadas y prefiere ese recorrido. Se conserva como experiencia de uso, pero la pantalla concreta no ha quedado identificada aquí. Comprueba que produzca un registro de despliegue exitoso, instalación de dependencias y arranque del proyecto; arrastrar a una carpeta puede limitarse a copiar o extraer archivos.
La documentación actual señala que la UI clásica Tools > Zip Push Deploy no funciona en Linux. Por eso el curso no promete ese botón para todos los App Service Python: muestra el recorrido donde esté disponible y conserva az webapp deploy como alternativa verificable. Una URL compartida de OneDrive puede devolver una página de vista previa en lugar del ZIP; el servicio necesita descargar directamente los bytes del paquete con acceso vigente.
03 / CONSTRUIR
Implementación paso a paso
- Entrar al App Service de destino y abrir Herramientas avanzadas; comprobar app y entorno.
- Identificar si la pantalla es una operación de despliegue de ZIP o únicamente un explorador de archivos.
- Si la interfaz admite desplegar el paquete, cargar deploy.zip y esperar su registro de resultado. En Python/Linux usar CLI/API cuando esa UI no esté soportada.
- Si usas una URL alojada, comprobar descarga directa, vigencia y permisos de lectura del paquete.
- Revisar build, instalación de dependencias y startup; después probar salud, estilos y una lectura de datos.
04 / APLICAR
Ejemplo en SensorHub
# PowerShell + Azure CLI: URL leída sin dejarla literal en el script
$rg = "rg-sensorhub-dev"
$app = "app-sensorhub-dev"
$packageUrl = Read-Host "URL temporal del ZIP; no compartir esta sesión"
az webapp deploy -g $rg -n $app --src-url $packageUrl --type zip
if ($LASTEXITCODE -ne 0) { throw "Revisar despliegue en Kudu" }
# Alternativa independiente: Kudu publish con identidad de operador
# $scm = "https://URL-SCM-EXACTA-DEL-PORTAL"
# $token = az account get-access-token --query accessToken -o tsv
# $body = @{packageUri = $packageUrl} | ConvertTo-Json
# Invoke-RestMethod -Method Post -Uri "$scm/api/publish?type=zip" `
# -Headers @{Authorization = "Bearer $token"} `
# -ContentType "application/json" -Body $body
# Revisa respuesta/estado de despliegue; aceptar la petición no prueba salud.
Remove-Variable packageUrlCómo leer el ejemplo
- --src-url obtiene un ZIP remoto; --src-path lee uno local.
- El token del ejemplo Kudu corresponde al operador con permisos, no al client secret de la aplicación web.
- Read-Host normal no oculta el texto: usa una sesión privada sin transcripción y evita logs de depuración con secretos.
Error habitual
No conviertas el contenedor de artefactos en público para evitar configurar permisos. Un fallo de descarga puede ser expiración, red o autorización.
05 / PRACTICAR
Tu turno
El ZIP se descarga pero Django no se importa. ¿Qué log examinas?
Ver solución orientativa
El log de construcción: comprueba requirements.txt en raíz, build habilitado y dependencias instaladas. Luego revisa el entorno de startup.
06 / VERIFICAR
Cómo sabes que funciona
- La operación aparece en el historial de despliegues.
- El artefacto obtenido coincide con la entrega esperada y el sitio pasa las pruebas.
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:
Publicar desde PowerShell con Azure CLI →Continuar en modo relato