Files
PANEL_BASES_ANEXO24/docker-compose.prod.yml
2026-07-30 07:27:44 -06:00

79 lines
3.4 KiB
YAML

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