Backup del Homelab¶
Sistema de backup automático cada 2 días. Genera un
.tar.gzen 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/libraryexcluido). 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:
La clave pública está en~/.ssh/authorized_keys de la PC.
🛠️ Crontabs¶
Servidor (crontab -e como usuario matias):
PC CachyOS (crontab -e):
🛠️ 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 |