Guía de actualización en contenedores (modo mantenimiento)
1) Prerrequisitos
- Tabla
Settings(en la BD de configuración) con:AutoUpdateURL— URL del feed NuGet (ej.: https://nuget.ahorabh.com/v3/index.json).AutoUpdatePackageNamespace— Namespace del producto que identifica todos los nugets. (ej.: deCRMCORE.Conf.Databasesería CRMCORE).AutoUpdateBeta— 0/1 para permitir versiones prerelease.
-
Tabla
DbConnectionStrings(en la BD de configuración) con:ConnStringId(ej.:ConfConnectionString/DataConnectionString)PackageDbNamesin el prefijoProductNameni el sufijoDatabase, solo la parte intermedia (ej.:Conf) el resto se concatena con el settingAutoUpdatePackageNamespacey .Database.Active = 1yUpdateDataModel = 1para las conexiones que se deben actualizar.
-
Docker Compose:
- En backend:
- En caso de usar un repositorio nuget con credenciales usar las variables
NUGET_USERyNUGET_PASSWORD. - Variable
FLEXYGO_PACKAGES_ROOTapuntando a la misma ruta creada en el Dockerfile del backend (p. ej./var/lib/flexygo/packages). - Healthcheck para que el frontend espere a que el backend esté listo:
- El contenedor del backend debe tener
curlinstalado. - La ruta de health debe existir y devolver 200 (ver ejemplo en el punto 2). - En frontend:
- Variable
MAINT_TOKEN(el token que pedirá para la actualización). - depends_on del frontend sobre el backend con
condition: service_healthy.
- Variable
Nota: crea la carpeta de paquetes en el Dockerfile del backend, con permisos de escritura para el usuario que ejecuta la app:
RUN mkdir -p /var/lib/flexygo/packages \ && chown -R 1000:1000 /var/lib/flexygoSi usas healthcheck con
curl, instálalo:RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
2) Ejemplo docker-compose.yml
services:
flx-frontend:
image: flexygo-frontend
restart: unless-stopped
environment:
- ASPNETCORE_ENVIRONMENT=Development
- MAINT_TOKEN=${MAINT_TOKEN}
ports:
- "${FRONTEND_PORT}:8080"
volumes:
- flx-front-conf:/app/conf
- flx-front-custom:/app/custom
networks:
- flx-front-network
depends_on:
flx-backend:
condition: service_healthy
flx-backend:
image: flexygo-backend
restart: unless-stopped
environment:
- ASPNETCORE_ENVIRONMENT=Development
- FLEXYGO_PACKAGES_ROOT=/var/lib/flexygo/packages
volumes:
- flx-back-conf:/app/conf
- flx-back-custom:/app/custom
networks:
- flx-front-network
- flx-back-network
healthcheck:
test: ["CMD-SHELL", "curl -fsS http://flx-backend:8080/api/backend/Sys/ApplicationStatus || exit 1"]
interval: 10s
timeout: 3s
retries: 10
start_period: 3s
networks:
flx-front-network:
driver: bridge
flx-back-network:
driver: bridge
volumes:
flx-front-conf:
flx-front-custom:
flx-back-conf:
flx-back-custom:
3) Comportamiento al levantar nueva versión
- Lanza
docker compose up -dcon la nueva imagen. - Si la versión de la app > versión de BD, el frontend entra en modo mantenimiento automáticamente.
4) Proceso de actualización
- Accede a
/maintenance/update. - Introduce el
MAINT_TOKEN(mismo valor que en el compose del frontend). - Al confirmar:
- Se leen las conexiones de
DbConnectionStringsconActive = 1yUpdateDataModel = 1. - Se descarga el paquete NuGet (usando
FLEXYGO_PACKAGES_ROOT). - Se aplican las actualizaciones de todas las BDs marcadas.
- Se leen las conexiones de
- Al finalizar:
- Se desactiva el modo mantenimiento.
- Se redirige al login.
5) Checklist de diagnóstico rápido
DbConnectionStrings
PackageIdcorrecto (sin.Database)Active = 1yUpdateDataModel = 1
Settings
AutoUpdateURLválido y accesible desde los contenedoresAutoUpdateNugetUser/AutoUpdateNugetPassworddefinidos si el feed requiere credencialesAutoUpdateBetasegún necesites prerelease
FLEXYGO_PACKAGES_ROOT
- Existe y es escribible en el contenedor backend
MAINT_TOKEN
- Definido en el frontend y coincide con el introducido en
/maintenance/update