Initial commit: CloudRestoreAS v1.0.0 - Aplicación completa de restauración automática SQL Server
This commit is contained in:
322
ADVANCED.md
Normal file
322
ADVANCED.md
Normal file
@@ -0,0 +1,322 @@
|
||||
# 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**:
|
||||
1. Coloca el `.001` en la carpeta de entrada
|
||||
2. Las demás partes deben estar en la misma carpeta
|
||||
3. 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**:
|
||||
```powershell
|
||||
# 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.100` o `SQLSERVER01`
|
||||
- Carpeta Data SQL: Ruta UNC o local del servidor remoto
|
||||
- Ejemplo: `\\SQLSERVER01\C$\SQLData` o configurar localmente en el servidor
|
||||
|
||||
**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:
|
||||
|
||||
```sql
|
||||
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`:
|
||||
|
||||
```python
|
||||
# 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:
|
||||
|
||||
```powershell
|
||||
# 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):
|
||||
|
||||
```powershell
|
||||
# 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**:
|
||||
|
||||
```powershell
|
||||
# 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:
|
||||
|
||||
```python
|
||||
# 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:
|
||||
|
||||
```powershell
|
||||
# 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:
|
||||
|
||||
```powershell
|
||||
# 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`:
|
||||
```python
|
||||
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):
|
||||
```powershell
|
||||
# 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:
|
||||
|
||||
```powershell
|
||||
# Elevar prioridad del proceso Python
|
||||
Get-Process python | ForEach-Object { $_.PriorityClass = 'AboveNormal' }
|
||||
```
|
||||
|
||||
**O en código**: Modificar `runner.py`:
|
||||
```python
|
||||
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:
|
||||
|
||||
```powershell
|
||||
# Configurar path de base de datos
|
||||
$env:CLOUDRESTORE_DB_PATH = "D:\CustomData\app.db"
|
||||
|
||||
# Modo debug
|
||||
$env:CLOUDRESTORE_DEBUG = "1"
|
||||
```
|
||||
|
||||
## Performance Tips
|
||||
|
||||
1. **Disco**: Usa SSD para carpeta de extracción
|
||||
2. **SQL Server**: Configura `max degree of parallelism` apropiadamente
|
||||
3. **Workers**: No exceder núcleos CPU / 2
|
||||
4. **Logs**: Si no necesitas logs detallados, cambia nivel a WARNING
|
||||
|
||||
## Seguridad
|
||||
|
||||
1. **Passwords**: Cifrados con DPAPI, vinculados al usuario/máquina
|
||||
2. **Permisos**: Ejecutar con cuenta de servicio dedicada
|
||||
3. **Carpetas**: Restringir acceso a carpetas configuradas
|
||||
4. **SQL**: Usar Windows Auth cuando sea posible
|
||||
|
||||
---
|
||||
|
||||
Para más información, consulta:
|
||||
- [README.md](README.md) - Documentación completa
|
||||
- [QUICKSTART.md](QUICKSTART.md) - Guía rápida
|
||||
Reference in New Issue
Block a user