Saltar a contenido

Backup del Homelab

Sistema de backup automático cada 2 días. Genera un .tar.gz en el servidor y lo sincroniza a la PC via SSH.


📁 Rutas y configs

Qué Dónde
Script servidor /opt/scripts/backup.sh
Backups servidor /opt/backups/
Log servidor /opt/backups/backup.log
Script PC ~/scripts/sync-backup.sh
Backups PC ~/backups/homelab/

🔄 Cómo funciona

Servidor (3:00 AM, cada 2 días)
  → Para todos los contenedores
  → rsync de /opt/docker/ (con exclusiones)
  → rsync de bind mounts de cada contenedor
  → Levanta los contenedores
  → Comprime todo en un .tar.gz
  → Notifica a la PC via SSH para sync inmediato

PC CachyOS (12:00 PM, todos los días — respaldo)
  → Si la PC estaba apagada cuando corrió el backup, descarga lo pendiente
  → Borra backups de más de 30 días

⚠️ NO se hacen dumps de bases de datos. Antes se dumpeaban MariaDB (Nextcloud) y PostgreSQL (Immich), pero se eliminaron del proceso. Ahora los bind mounts de bases de datos se respaldan directamente (paradas). El sync se dispara automáticamente al terminar el backup via SSH a matias@192.168.0.12. El cron del mediodía en la PC es solo un respaldo para cuando estaba apagada a las 3AM.


📦 Qué incluye el backup

Incluido Excluido
Configs y composes de todos los servicios (/opt/docker/) nextcloud/db
Bind mounts de todos los contenedores nextcloud/redis
Datos de Vaultwarden (vw-data) immich/db
Variables de entorno (.env) immich/library (fotos)
immich/model-cache
immich/postgres
portainer/portainer_data/compose/*/downloads
scrutiny/
Bind mounts en /mnt/hdd_2tb/
Directorios que terminan en */cache/*, */tmp/*, */temp/*, */redis*, */pgdata*, */mysql*, */node_modules*, */model-cache*, */library/*, */downloads/*

⚠️ Las fotos de Immich no están en el backup (immich/library excluido). Si necesitás respaldarlas, hacelo por separado a un disco externo.


🔑 SSH servidor → PC

El servidor necesita conectarse a la PC para disparar el sync. La clave está en:

~/.ssh/id_ed25519_pc  (servidor)
La clave pública está en ~/.ssh/authorized_keys de la PC.


🛠️ Crontabs

Servidor (crontab -e como usuario matias):

0 3 */2 * * /opt/scripts/backup.sh

PC CachyOS (crontab -e):

0 12 * * * ~/scripts/sync-backup.sh

🛠️ Comandos útiles

# Correr el backup manualmente (servidor)
/opt/scripts/backup.sh

# Seguir el log en tiempo real
tail -f /opt/backups/backup.log

# Ver backups disponibles en el servidor
ls -lh /opt/backups/

# Sincronizar backups manualmente (PC)
~/scripts/sync-backup.sh

# Ver backups disponibles en la PC
ls -lh ~/backups/homelab/

🔥 Problemas comunes

Problema Solución
rsync falla con Permission denied en adguard/cady/nextcloud sudo setfacl -R -m u:matias:rX,d:u:matias:rX /opt/docker/adguard /opt/docker/cady /opt/docker/nextcloud/app/config
rsync no conecta desde la PC Verificar conectividad SSH a 192.168.0.12
Servidor no puede conectarse a la PC para sync Verificar que la clave ~/.ssh/id_ed25519_pc exista y la PC esté encendida
No hay espacio en /opt/backups/ Borrar backups viejos: find /opt/backups -name "*.tar.gz" -mtime +7 -delete