8.2 KiB
CloudRestoreAS - Configuración Avanzada
Escenarios Avanzados
1. Múltiples Bases de Datos
Configura un nodo por cada base de datos:
Nodo 1:
- Nombre: BACKUP_VENTAS.ZIP
- DB: Ventas_DB
Nodo 2:
- Nombre: BACKUP_INVENTARIO.ZIP
- DB: Inventario_DB
Nodo 3:
- Nombre: BACKUP_CONTABILIDAD.ZIP
- DB: Contabilidad_DB
2. Procesamiento Concurrente
Para procesar múltiples restauraciones simultáneamente:
Configuración → Concurrencia:
- Extract Workers: 2-3 (dependiendo de CPU/disco)
- Restore Workers: 1 (recomendado para no saturar SQL)
Nota: Solo aumenta restore_workers si:
- Tienes múltiples discos para SQL Server
- CPU y RAM suficientes
- Restauras a bases de datos diferentes en instancias SQL diferentes
3. Archivos ZIP Multipart Grandes
Para archivos de varios GB divididos en partes:
Carpeta Entrada:
├── BACKUP_GRANDE.ZIP.001
├── BACKUP_GRANDE.ZIP.002
├── BACKUP_GRANDE.ZIP.003
└── BACKUP_GRANDE.ZIP.004
Configuración:
- Timeout Extracción: 60-120 min (dependiendo del tamaño)
- Carpeta Extracción: En disco con suficiente espacio
Proceso:
- Coloca el
.001en la carpeta de entrada - Las demás partes deben estar en la misma carpeta
- 7-Zip detectará y extraerá todas las partes automáticamente
4. Marcador .ready para Archivos Grandes
Si copias archivos muy grandes que tardan en transferirse:
Configuración → Estabilidad:
- ✓ Usar Marcador .ready
- Duración Estable: 5s (puede ser menor con marcador)
Uso:
# Copia el archivo
Copy-Item "BACKUP.ZIP" "C:\Backups\Entrada\"
# Una vez completado, crea el marcador
New-Item "C:\Backups\Entrada\BACKUP.ZIP.ready" -ItemType File
5. Modo Dry Run para Pruebas
Para probar sin ejecutar restauraciones reales:
Configuración → Características:
- ✓ Modo Dry Run
Comportamiento:
- Extrae el ZIP normalmente
- Ejecuta FILELISTONLY
- Genera el SQL de RESTORE pero NO lo ejecuta
- Registra el SQL generado en los steps
- Útil para validar estructura sin afectar SQL Server
6. SQL Server Remoto
Para restaurar en un servidor SQL remoto:
Configuración → SQL Server:
- Servidor:
192.168.1.100oSQLSERVER01 - Carpeta Data SQL: Ruta UNC o local del servidor remoto
- Ejemplo:
\\SQLSERVER01\C$\SQLDatao configurar localmente en el servidor
- Ejemplo:
Consideraciones:
- Asegúrate de que el puerto 1433 esté abierto
- Usa SQL Auth o cuenta de servicio con permisos
- La carpeta de datos debe ser accesible
7. Múltiples Instancias SQL
Para diferentes nodos en diferentes instancias:
Limitación Actual: La app solo soporta una conexión SQL configurada.
Workaround:
- Configura la instancia principal
- Usa vistas/linked servers para redireccionar
- O ejecuta múltiples instancias de la app (cada una con su propia config)
8. Permisos Mínimos SQL
Script para crear usuario con permisos mínimos:
USE [master];
GO
-- Crear login
CREATE LOGIN [CloudRestoreUser] WITH PASSWORD = 'YourStrongP@ssw0rd';
GO
-- Otorgar permisos de servidor
ALTER SERVER ROLE [dbcreator] ADD MEMBER [CloudRestoreUser];
GO
-- Permisos adicionales para ALTER DATABASE
GRANT ALTER ANY DATABASE TO [CloudRestoreUser];
GO
-- Si necesitas crear carpetas de datos
-- (opcional, solo si SQL Server corre con otra cuenta)
-- Dar permisos de escritura en carpetas de datos a nivel Windows
9. Rotación de Logs Personalizada
Edita app/utils/logger.py:
# Cambiar parámetros de RotatingFileHandler
file_handler = RotatingFileHandler(
log_path,
maxBytes=50 * 1024 * 1024, # 50MB en lugar de 10MB
backupCount=20, # 20 archivos en lugar de 10
encoding='utf-8'
)
10. Verificación de Espacio en Disco
Recomendación: Antes de procesar, verifica espacio:
# Script PowerShell para verificar espacio
$disk = Get-PSDrive C
$freeGB = [math]::Round($disk.Free / 1GB, 2)
if ($freeGB -lt 50) {
Write-Warning "Espacio bajo: $freeGB GB libres"
}
Futura Mejora: Agregar verificación automática en el motor.
11. Limpieza Automática de Archivos Procesados
Por defecto, los archivos procesados se acumulan en Procesados/.
Script de limpieza (ejecutar manualmente o con Task Scheduler):
# Eliminar archivos procesados más antiguos que 30 días
$days = 30
$processedPath = "C:\Backups\Procesados"
Get-ChildItem $processedPath -Recurse -File |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$days) } |
Remove-Item -Force
12. Backup de la Base de Datos SQLite
La base de datos SQLite contiene todo el historial y configuración.
Backup Automático:
# Script para backup diario
$source = "C:\Aduanasoft\CloudRestoreAs\data\app.db"
$backup = "C:\Backups\DB_Backups\app_$(Get-Date -Format 'yyyyMMdd').db"
Copy-Item $source $backup
13. Notificaciones por Email
Futura Mejora: Integrar notificaciones por email.
Workaround Actual: Monitorear tabla events con script externo:
# monitor_events.py
from app.db.event_repository import EventRepository
import smtplib
events = EventRepository.get_all(level="ERROR", limit=10)
if events:
# Enviar email con eventos de error
send_email("Errores en CloudRestoreAS", str(events))
14. Integración con Task Scheduler
Para iniciar automáticamente al arrancar Windows:
# Crear tarea programada
$action = New-ScheduledTaskAction -Execute "C:\Aduanasoft\CloudRestoreAs\venv\Scripts\python.exe" -Argument "C:\Aduanasoft\CloudRestoreAs\runner.py"
$trigger = New-ScheduledTaskTrigger -AtLogon
$principal = New-ScheduledTaskPrincipal -UserId "$env:USERDOMAIN\$env:USERNAME" -LogonType Interactive
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
Register-ScheduledTask -TaskName "CloudRestoreAS" -Action $action -Trigger $trigger -Principal $principal -Settings $settings
15. Monitoreo con PowerShell
Script para consultar estado:
# monitor_status.ps1
$dbPath = "C:\Aduanasoft\CloudRestoreAs\data\app.db"
# Usando sqlite3 CLI (si está instalado)
sqlite3 $dbPath "SELECT status, COUNT(*) FROM jobs GROUP BY status;"
# O importar módulo de Python
python -c "from app.db.job_repository import JobRepository; print(JobRepository.get_stats())"
16. Reintentos Automáticos
Configurado pero no en UI actualmente:
En app/constants.py:
DEFAULT_CONFIG = {
"retries": {
"max_attempts": 3, # Máximo 3 intentos
"retry_delay_seconds": 60 # Esperar 60s entre intentos
}
}
Para implementar: Agregar lógica en el worker para reintentar jobs fallados.
17. Archivos con Caracteres Especiales
La aplicación maneja correctamente:
- Rutas con espacios
- Caracteres Unicode
- Rutas largas (> 260 caracteres en Windows 10+)
Configuración Windows (si tienes problemas con rutas largas):
# Habilitar rutas largas en Windows 10+
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force
18. Prioridad de Procesos
Para dar más recursos a la app en servidor ocupado:
# Elevar prioridad del proceso Python
Get-Process python | ForEach-Object { $_.PriorityClass = 'AboveNormal' }
O en código: Modificar runner.py:
import psutil
import os
# Al inicio
p = psutil.Process(os.getpid())
p.nice(psutil.HIGH_PRIORITY_CLASS)
Variables de Entorno
Para configuración avanzada sin UI:
# Configurar path de base de datos
$env:CLOUDRESTORE_DB_PATH = "D:\CustomData\app.db"
# Modo debug
$env:CLOUDRESTORE_DEBUG = "1"
Performance Tips
- Disco: Usa SSD para carpeta de extracción
- SQL Server: Configura
max degree of parallelismapropiadamente - Workers: No exceder núcleos CPU / 2
- Logs: Si no necesitas logs detallados, cambia nivel a WARNING
Seguridad
- Passwords: Cifrados con DPAPI, vinculados al usuario/máquina
- Permisos: Ejecutar con cuenta de servicio dedicada
- Carpetas: Restringir acceso a carpetas configuradas
- SQL: Usar Windows Auth cuando sea posible
Para más información, consulta:
- README.md - Documentación completa
- QUICKSTART.md - Guía rápida