Backups automatizados¶
Configura backups automáticos de base de datos con notificación y rotación.
Objetivo¶
Al final de esta guía tendrás:
- ✅ Backup diario de base de datos
- ✅ Almacenamiento en ubicación segura
- ✅ Rotación automática (eliminar backups antiguos)
- ✅ Notificaciones de éxito/fallo
Prerrequisitos¶
- Proyecto creado en Nexus
- Acceso a la base de datos (credenciales)
- Ubicación de almacenamiento (S3, NAS, etc.)
Paso 1: Configura los secrets¶
Primero, guarda las credenciales de forma segura.
- Ve a tu Proyecto > Secrets
- Crea los siguientes secrets:
| Nombre | Valor |
|---|---|
DATABASE_URL |
postgresql://user:pass@host:5432/db |
AWS_ACCESS_KEY |
Tu access key de AWS |
AWS_SECRET_KEY |
Tu secret key de AWS |
S3_BUCKET |
Nombre del bucket |
Paso 2: Crea la tarea de backup¶
- Ve a Tareas > + Nueva
- Configura:
Información básica¶
Nombre: backup-database-daily
Descripción: Backup diario de la base de datos de producción
Proyecto: [Tu proyecto]
Agente¶
Selecciona un agente con capacidad de: - Ejecutar comandos de sistema - Acceso a la base de datos - Acceso a S3
Prompt¶
Realiza un backup de la base de datos PostgreSQL y súbelo a S3.
## Pasos a ejecutar:
1. **Crear backup**
- Usa pg_dump con la conexión: ${DATABASE_URL}
- Formato: comprimido (.sql.gz)
- Nombre del archivo: backup_YYYY-MM-DD_HH-MM.sql.gz
2. **Subir a S3**
- Bucket: ${S3_BUCKET}
- Ruta: backups/database/[nombre del archivo]
- Usar credenciales AWS configuradas
3. **Verificar**
- Confirma que el archivo existe en S3
- Reporta el tamaño del backup
4. **Limpiar**
- Elimina el archivo local temporal
- Lista backups existentes en S3
## Manejo de errores:
- Si falla la conexión a la BD, reporta el error específico
- Si falla la subida a S3, mantén el archivo local y notifica
Schedule¶
Paso 3: Configura rotación¶
Crea una segunda tarea para limpiar backups antiguos:
Prompt¶
Limpia los backups antiguos en S3.
## Política de retención:
- Mantener backups de los últimos 7 días completos
- Mantener 1 backup por semana del último mes
- Mantener 1 backup por mes de los últimos 6 meses
- Eliminar todo lo demás
## Pasos:
1. Lista todos los backups en s3://${S3_BUCKET}/backups/database/
2. Aplica la política de retención
3. Elimina los backups que no cumplan
4. Reporta:
- Backups eliminados
- Backups mantenidos
- Espacio liberado
Paso 4: Configura notificaciones¶
Para recibir alertas sobre los backups:
- Ve a Configuración > Canales
- Configura un canal de Slack o Email
- En la tarea de backup, añade el canal
O incluye en el prompt:
## Al finalizar:
- Si es exitoso: envía mensaje a Slack con resumen
- Si falla: envía alerta urgente con detalles del error
Paso 5: Prueba el backup¶
- En la tarea, haz clic en Ejecutar ahora
- Monitorea la ejecución en tiempo real
- Verifica el resultado:
┌─────────────────────────────────────────────────────────────────┐
│ Resultado: backup-database-daily ✅ Exitoso │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Backup completado exitosamente │
│ │
│ Detalles: │
│ - Archivo: backup_2024-01-15_03-00.sql.gz │
│ - Tamaño: 245 MB │
│ - Ubicación: s3://mi-bucket/backups/database/ │
│ - Duración: 4 minutos 32 segundos │
│ │
│ Verificación: │
│ - ✅ Archivo existe en S3 │
│ - ✅ Checksum verificado │
│ - ✅ Archivo local eliminado │
│ │
└─────────────────────────────────────────────────────────────────┘
Paso 6: Verifica en S3¶
Comprueba que el backup está en S3:
Verificación final¶
Tu sistema de backups está completo si:
- [ ] La tarea de backup se ejecuta diariamente
- [ ] Los archivos aparecen en S3
- [ ] La tarea de limpieza funciona
- [ ] Recibes notificaciones
Restauración¶
Para restaurar un backup:
- Descarga el archivo de S3
- Descomprime:
gunzip backup_2024-01-15.sql.gz - Restaura:
psql $DATABASE_URL < backup_2024-01-15.sql
Buenas prácticas¶
Prueba las restauraciones
Periódicamente restaura un backup en un entorno de prueba para verificar que son válidos.
Múltiples ubicaciones
Considera guardar backups en múltiples ubicaciones (ej: S3 + Azure Blob).
Encriptación
Encripta los backups si contienen datos sensibles.
Siguiente: CI/CD con Nexus - Integra con tu pipeline.