- Added new environment variables for deduplication and SQL Server password encryption. - Updated docker-compose files to include SECRET_KEY and ENCRYPTION_KEY for compatibility with a24c. - Enhanced the navigation structure to reflect changes in admin-only views and report access. - Introduced new functions for handling SQL Server connections and database management, including parsing server addresses and listing user databases. This update improves security and functionality related to database management and user access control.
65 lines
3.2 KiB
Plaintext
65 lines
3.2 KiB
Plaintext
# 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
|
||
# Depuración de bases duplicadas: tolerancia de tamaño (fracción 0–1) para marcar una base como
|
||
# segura para borrar del servidor viejo. El nuevo debe pesar >= (1 - tolerancia) del viejo. Default 0.2.
|
||
# PANEL_DEDUP_SIZE_TOLERANCE=0.2
|
||
# "Mandar al nuevo": carpeta donde el SQL viejo escribe el .bak (default: data_folder del servidor).
|
||
# PANEL_DEDUP_BACKUP_FOLDER=
|
||
# Ventana de verificación tras enviar (ms) antes de dar la base por "en tránsito". Default 180000.
|
||
# PANEL_DEDUP_MOVE_VERIFY_TIMEOUT_MS=180000
|
||
# Intervalo de sondeo de la verificación (ms). Default 5000.
|
||
# PANEL_DEDUP_MOVE_POLL_MS=5000
|
||
# requestTimeout de SQL Server para BACKUP/DROP (el default de node-mssql, 15 s, no alcanza para
|
||
# bases reales). Default 3600000 (1 h).
|
||
# PANEL_DEDUP_DDL_TIMEOUT_MS=3600000
|
||
|
||
# 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 respaldos (LEGACY / fallback): carpeta única leída por la vista "Respaldos
|
||
# Almacenados" y por /backup?file=... cuando no se especifica restaurador. Las vistas nuevas
|
||
# "Respaldos Restaurados" y "Restores Fallidos" resuelven la carpeta de CADA restaurador de
|
||
# forma relativa (derivada de la Entrada que reporta cada uno), sin usar esta variable.
|
||
# Apúntala a una carpeta de procesados accesible por filesystem (local o share) si usas el modo legacy.
|
||
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 <token>
|
||
# 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 compartida con a24c para cifrar la contraseña SQL de los nodos en reposo.
|
||
# El panel cifra en Fernet (AES-128-CBC + HMAC) derivando la clave como sha256(SECRET_KEY),
|
||
# EXACTAMENTE igual que a24c, para que a24c pueda descifrar database_nodes.sql_password.
|
||
# ⚠️ DEBE ser idéntica a la SECRET_KEY del backend de a24c, o a24c no podrá conectar.
|
||
SECRET_KEY=
|
||
|
||
# [LEGADO] Clave AES-256 (32 bytes) del formato antiguo `gcm:` del panel. Solo se usa para
|
||
# LEER credenciales cifradas antes de migrar a Fernet; las nuevas se escriben con SECRET_KEY.
|
||
# Puede quedar vacía en instalaciones nuevas. Generar (si aplica) con:
|
||
# node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
|
||
ENCRYPTION_KEY=
|