services: app: image: dev.aduanasoft.com:8443/panel-bases-anexo24/app:latest restart: unless-stopped ports: - "3000:3000" environment: # SQL Server: credenciales globales (server_name/database_name vienen de a24c.database_nodes en Postgres) - PANEL_MSSQL_USER=${PANEL_MSSQL_USER} - PANEL_MSSQL_PASSWORD=${PANEL_MSSQL_PASSWORD} - PANEL_MSSQL_DOCKER=true - IN_DOCKER=true # PostgreSQL: BD externa (ControlDesk), accesible desde el host - DB_POSTGRES_HOST=host.docker.internal - DB_POSTGRES_PORT=${DB_POSTGRES_PORT:-5432} - DB_POSTGRES_USER=${DB_POSTGRES_USER} - DB_POSTGRES_PASS=${DB_POSTGRES_PASS} - DB_POSTGRES_DB=${DB_POSTGRES_DB} # JWT - JWT_SECRET=${JWT_SECRET} # Clave Fernet compartida con a24c para cifrar la contraseña SQL de los nodos. # DEBE ser idéntica a la SECRET_KEY del backend de a24c. - SECRET_KEY=${SECRET_KEY} # [LEGADO] Solo si existen credenciales en el formato antiguo `gcm:` por migrar. Hoy TODAS # las de restore_targets siguen en ese formato, así que el instalador remoto de CRAS aún # depende de esta clave para descifrar la contraseña SSH del destino. - ENCRYPTION_KEY=${ENCRYPTION_KEY:-} # Token de servicio que usan los agentes CloudRestoreAS en /api/restore/*. Obligatorio a # propósito: service-auth.ts falla CERRADO con 500 si falta, así que sin `:?` el deploy # arrancaría bien y los agentes recibirían 500 sin que nadie sepa por qué. Mismo patrón # que MINIO_ROOT_USER en el compose de producción de a24c. - CLOUDRESTORE_API_TOKEN=${CLOUDRESTORE_API_TOKEN:?CLOUDRESTORE_API_TOKEN es obligatorio} # Ruta de respaldos montada desde el host - BACKUP_PATH=/data/backups # --- Distribución de versiones de CloudRestoreAS ----------------------- # Gitea es la fuente de verdad de los binarios; el panel solo LEE (scope read:package). - GITEA_BASE_URL=${GITEA_BASE_URL:-https://git.aduanasoft.com} - GITEA_OWNER=${GITEA_OWNER:-ADUANASOFT} - GITEA_TOKEN=${GITEA_TOKEN:-} - CRAS_PACKAGE_NAME=${CRAS_PACKAGE_NAME:-cloudrestoreas} # Caché local de artefactos (~270 MB cada uno, 2 por versión). - CRAS_RELEASES_DIR=/data/cras-releases - CRAS_CACHE_KEEP_VERSIONS=${CRAS_CACHE_KEEP_VERSIONS:-3} # URL con la que el agente instalado reportará al panel. Debe ser alcanzable desde los # servidores de restauración, no localhost. - PANEL_PUBLIC_URL=${PANEL_PUBLIC_URL:-${ORIGIN}} - PORT=3000 - ORIGIN=${ORIGIN} - NODE_ENV=production # SMTP para avisos (opcional — vacío deshabilita el envío sin errores) - SMTP_HOST=${SMTP_HOST:-} - SMTP_PORT=${SMTP_PORT:-587} - SMTP_USER=${SMTP_USER:-} - SMTP_PASSWORD=${SMTP_PASSWORD:-} - SMTP_FROM=${SMTP_FROM:-} - SMTP_USE_TLS=${SMTP_USE_TLS:-true} volumes: - ${BACKUP_HOST_PATH}:/data/backups # Caché de artefactos de CRAS. Va en un bind-mount del host (no en un volumen anónimo) # para que sobreviva a los redeploy: re-descargar cientos de MB en cada actualización # del panel sería desperdicio. - ${CRAS_RELEASES_HOST_PATH:-./data/cras-releases}:/data/cras-releases extra_hosts: - "host.docker.internal:host-gateway" networks: - aduanasoft-network networks: aduanasoft-network: external: true