Por que almacenar los backups de forma remota
Almacenar los respaldos en el mismo servidor que se esta respaldando es una practica peligrosa: si el servidor sufre un fallo de disco, un ataque de ransomware, un incendio fisico en el datacenter, o una suspension de la cuenta por el proveedor, los respaldos locales se pierden junto con los datos originales. La regla 3-2-1 de los respaldos establece: mantener 3 copias de los datos, en 2 tipos de almacenamiento diferentes, con al menos 1 copia en una ubicacion geograficamente diferente al servidor principal.
Opciones de almacenamiento remoto para backups
| Opcion | Costo aproximado | Facilidad de configuracion | Recomendado para |
|---|---|---|---|
| Backblaze B2 | $0.006/GB/mes | Media | Backups grandes y economicos |
| Amazon S3 | $0.023/GB/mes | Media | Integracion con el ecosistema AWS |
| Google Cloud Storage | $0.020/GB/mes | Media | Integracion con Google Cloud |
| Servidor FTP/SFTP propio | Costo del servidor secundario | Baja | Control total sobre el almacenamiento |
| Rclone + cualquier nube | Costo del servicio en la nube | Media | Flexibilidad maxima |
Configurar backups remotos con rclone
Rclone es una herramienta de codigo abierto que permite sincronizar archivos con mas de 40 proveedores de almacenamiento en la nube diferentes. Es compatible con Amazon S3, Google Drive, Backblaze B2, SFTP, FTP y muchos otros.
# Instalar rclone curl https://rclone.org/install.sh | sudo bash # Configurar un nuevo destino remoto (asistente interactivo) rclone config # Sincronizar la carpeta de backups al destino remoto rclone sync /home/backups/ remote:nombre-bucket/servidor1/ # Ver que hay en el destino remoto rclone ls remote:nombre-bucket/
Script de backup remoto automatico
#!/bin/bash
# Script de backup completo con envio remoto
FECHA=$(date +%Y%m%d_%H%M)
LOCAL_DIR="/home/backups/$FECHA"
mkdir -p $LOCAL_DIR
# Backup de archivos web
tar -czf $LOCAL_DIR/web_$FECHA.tar.gz /var/www/html/
# Backup de base de datos
mysqldump -u root -pPASSWORD --all-databases | gzip > $LOCAL_DIR/db_$FECHA.sql.gz
# Enviar al almacenamiento remoto
rclone copy $LOCAL_DIR remote:mi-bucket/servidor1/$FECHA/
# Eliminar backups locales mayores a 7 dias
find /home/backups -type d -mtime +7 -exec rm -rf {} +
# Eliminar backups remotos mayores a 30 dias
rclone delete remote:mi-bucket/servidor1/ --min-age 30d
echo "Backup completado: $FECHA"Programar el backup con crontab
# Editar el crontab del root crontab -e # Ejecutar el backup todos los dias a las 2:30 AM 30 2 * * * /home/scripts/backup_remoto.sh >> /var/log/backup.log 2>&1
