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} # Cifrado en reposo de las credenciales SQL/SSH de restore_targets (AES-256-GCM). # Sin esta clave el panel no puede descifrar la contraseña SSH y por lo tanto no puede # instalar CRAS en un servidor. - ENCRYPTION_KEY=${ENCRYPTION_KEY:?ENCRYPTION_KEY es obligatoria} # Token de servicio que usan los agentes CloudRestoreAS en /api/restore/*. Los endpoints # fallan cerrado (500) sin él, y el instalador remoto lo siembra en el .env del agente. - 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