# Credenciales SQL Server (mismo usuario en todos los nodos salvo sql_password en database_nodes). # Si no defines PANEL_MSSQL_*, se usan DB_PRIMARY_* / DB_SECONDARY_* como respaldo. PANEL_MSSQL_USER=sa PANEL_MSSQL_PASSWORD=Clave.2025 # En contenedor Docker: reescribe localhost en server_name → host.docker.internal # PANEL_MSSQL_DOCKER=true # PostgreSQL - Usuarios del panel + catálogo ControlDesk (tablas a24c.* las crea otra app) DB_POSTGRES_HOST=localhost DB_POSTGRES_PORT=5434 DB_POSTGRES_USER=postgres DB_POSTGRES_PASS=Control. DB_POSTGRES_DB=CONTROLDESK # JWT Secret (cambiar en producción) JWT_SECRET=change-this-secret-in-production-please-use-a-long-random-string # Ruta de backups BACKUP_PATH=D:/BackupSFTP/ # SMTP para envío de avisos de alertas críticas # Si SMTP_HOST está vacío los botones "Enviar avisos" no hacen nada (sin error). SMTP_HOST= SMTP_PORT=587 SMTP_USER= SMTP_PASSWORD= SMTP_FROM= SMTP_USE_TLS=true # Integración CloudRestoreAS # Token Bearer que CloudRestoreAS envía en Authorization: Bearer # para /api/restore/target-for, /api/restore/job-result y /api/restore/instance-config. # DEBE ser idéntico al valor "Token API del PANEL" en CloudRestoreAS (pestaña Config). # Generar uno largo y aleatorio, p. ej.: # node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" CLOUDRESTORE_API_TOKEN= # Clave AES-256 (32 bytes) para cifrar credenciales SQL/SSH de restore_targets en reposo. # Solo la usa el panel; CloudRestoreAS no necesita esta variable. # Generar con: # node -e "console.log(require('crypto').randomBytes(32).toString('base64'))" ENCRYPTION_KEY=