Aller au contenu

Sauvegardes & restauration

Deux mécanismes complémentaires : backup.sh (dumps SQL + rsync, hors-machine) et dockmate (backup transactionnel avant chaque update, avec rollback).

backup.sh (cron /etc/cron.d/docker-backup, dim. 03:00)

Quoi Comment
Bases SQL dumps en ligne : PostgreSQL/TimescaleDB (pg_dumpall), MariaDB (mariadb-dump --all-databases --single-transaction) → db_dumps/<conteneur>.sql.gz
Configs & volumes rsync /srv/dockersrv_docker/ (avec --delete), en excluant les data dirs des bases (…/postgresql/data, …/pgdata/data, …/mysql)
Destinations primaire /mnt/hdd/backups/<DATE>/ + secondaire /mnt/sdcard/backups/<DATE>/
Rotation KEEP=4 (4 horodatages)
Journaux errors.log, MANIFEST.txt par backup ; sortie cron → /var/log/docker-backup.log

Couvert ✅ vs Non couvert ❌

  • ✅ Tout /srv/docker/volumes/ (configs, états, et le wiki volumes/wiki/), + dumps SQL.
  • Library Immich (/mnt/raid/immich/library, ~330 Go — média).
  • Enregistrements Frigate (/mnt/frigate).
  • ❌ Caches régénérables (/srv/docker/cache/).

Le wiki est sauvegardé automatiquement

volumes/wiki/ (markdown + .git) est dans le périmètre rsync → capturé chaque dimanche. En plus, le contenu est poussé en git vers un remote privé (sauvegarde hors-site).

Procédure de RESTAURATION

a) Restaurer un fichier / une config

DATE=$(ls -1dt /mnt/hdd/backups/20*-* | head -1)
rsync -a "$DATE/srv_docker/volumes/<service>/" /srv/docker/volumes/<service>/
docker compose up -d <service>

b) Restaurer une base PostgreSQL/TimescaleDB

DATE=$(ls -1dt /mnt/hdd/backups/20*-* | head -1)
gunzip -c "$DATE/db_dumps/timescaledb.sql.gz" | docker exec -i timescaledb psql -U <user>

c) Restaurer une base MariaDB

gunzip -c "$DATE/db_dumps/mariadb.sql.gz" | docker exec -i mariadb mariadb -u root -p

d) Restaurer le wiki

# depuis le backup local…
rsync -a "$DATE/srv_docker/volumes/wiki/" /srv/docker/volumes/wiki/
# …ou depuis le remote git :
git clone <remote-wiki> /srv/docker/volumes/wiki
docker compose up -d wiki

À tester périodiquement

Une sauvegarde non testée n'en est pas une. Faire un essai de restauration (au moins d'une base et d'un volume) de temps en temps. Library Immich & Frigate : prévoir une stratégie média dédiée (non couverte ici).