Saltar a contenido

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.

  1. Ve a tu Proyecto > Secrets
  2. 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

  1. Ve a Tareas > + Nueva
  2. 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

Frecuencia: Diaria
Hora: 03:00 (cuando hay menos carga)
Zona horaria: Europe/Madrid

Paso 3: Configura rotación

Crea una segunda tarea para limpiar backups antiguos:

Nombre: cleanup-old-backups
Schedule: Semanal (Domingos 04:00)

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:

  1. Ve a Configuración > Canales
  2. Configura un canal de Slack o Email
  3. 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

  1. En la tarea, haz clic en Ejecutar ahora
  2. Monitorea la ejecución en tiempo real
  3. 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:

aws s3 ls s3://mi-bucket/backups/database/

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:

  1. Descarga el archivo de S3
  2. Descomprime: gunzip backup_2024-01-15.sql.gz
  3. 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.