Despliegue
Infraestructura Azure
Componentes y Servicios
| Componente | Servicio Azure | Dominio / URL |
|---|---|---|
| Web App | Container Apps | admin.recuperacionintegral.com |
| Worker | Container Apps (solo interno) | — (sin ingress externo) |
| Documentación | Static Web Apps | docs.recuperacionintegral.com |
| Base de Datos | Azure SQL | *.database.windows.net |
| Almacenamiento | Blob Storage | *.blob.core.windows.net |
| Registry | Container Registry | leancollection.azurecr.io |
Script de Despliegue
El archivo deploy.ps1 automatiza todo el proceso:
# Desplegar todo (web + worker + docs)
./deploy.ps1
# Solo la aplicación web
./deploy.ps1 -WebOnly
# Solo el worker
./deploy.ps1 -WorkerOnly
# Solo la documentación
./deploy.ps1 -DocsOnly
Procedimiento Completo de Despliegue
Paso 1: Migraciones de Base de Datos
:::warning Orden Importante Ejecutar migraciones ANTES del despliegue de la aplicación. La nueva versión del código puede depender del nuevo schema. :::
# En SSMS o Azure Data Studio:
# 1. Conectar a Azure SQL
# 2. Ejecutar scripts pendientes en orden cronológico
# Ejemplo:
prisma/migrations/add-new-feature.sql
prisma/migrations/seed-new-data.sql
Paso 2: Desplegar Aplicación Web
./deploy.ps1 -WebOnly
Acciones realizadas:
docker buildconDockerfile→ imagen de la web appdocker tag+docker pushaleancollection.azurecr.io- Sincroniza variables de entorno desde
.env.local az containerapp updatecon la nueva imagen- Espera a que el health check pase
Paso 3: Desplegar Worker
./deploy.ps1 -WorkerOnly
Acciones realizadas:
docker buildconDockerfile.worker→ imagen del worker- Push a ACR
az containerapp updatedel worker container- POST a
/healthpara verificar que arrancó
Paso 4: Desplegar Documentación
./deploy.ps1 -DocsOnly
Acciones realizadas:
cd docs-site && npm run build- Upload del contenido estático a Azure Static Web Apps
- Verifica que la URL responda correctamente
Variables de Entorno
Se sincronizan automáticamente durante el despliegue. Las principales:
| Variable | Valor | Descripción |
|---|---|---|
DATABASE_URL | (connection string) | Conexión a Azure SQL |
NEXTAUTH_URL | https://admin.recuperacionintegral.com | URL base de NextAuth |
NEXTAUTH_SECRET | (secret) | Secret para firmar JWTs |
WORKER_URL | http://lean-collection-worker | URL interna del worker |
AZURE_STORAGE_CONNECTION_STRING | (connection string) | Blob Storage |
AZURE_STORAGE_CONTAINER_NAME | import-files | Container de archivos |
tip
Las variables sensibles (secrets) se configuran como secretos en Container Apps y se referencian en la configuración del container.
Post-Despliegue
Verificaciones
# Ver logs en tiempo real
az containerapp logs show \
--name lean-collection-app \
--resource-group lean-collection-reloaded \
--follow
# Verificar health del worker
az containerapp exec \
--name lean-collection-worker \
--resource-group lean-collection-reloaded \
--command "curl http://localhost:3001/health"
Consideraciones
- Los usuarios con sesión activa serán forzados a re-loguearse si hay cambios en el esquema del JWT
- El worker ejecuta
processPendingJobsOnStartup()al arrancar → recupera jobs interrumpidos - Si hay jobs "processing" con >30 min sin actividad, se re-procesan automáticamente
Rollback de Despliegue
Si algo sale mal, revertir a la revisión anterior:
# Ver revisiones disponibles
az containerapp revision list \
--name lean-collection-app \
--resource-group lean-collection-reloaded
# Activar revisión anterior
az containerapp revision activate \
--name lean-collection-app \
--resource-group lean-collection-reloaded \
--revision <nombre-revision-anterior>
# Redirigir tráfico a la revisión anterior
az containerapp ingress traffic set \
--name lean-collection-app \
--resource-group lean-collection-reloaded \
--revision-weight <nombre-revision-anterior>=100
:::warning Rollback de Migraciones SQL Las migraciones SQL no se revierten automáticamente. Si la migración es incompatible hacia atrás, se necesita un script de rollback manual. :::
Monitoreo
| Qué monitorear | Cómo |
|---|---|
| Errores de la aplicación | Container Apps → Logs → Query errors |
| Jobs fallidos | Tabla ImportJobs / ExportJobs con Status='failed' |
| Health del worker | GET /health (debe responder 200) |
| Uso de recursos | Container Apps → Metrics → CPU/Memory |
| Blob Storage | Lifecycle policies (90 días retención exports) |