Le problème#
J’ai récemment perdu un disque dur sans avertissement. Ce n’était pas catastrophique car j’avais des sauvegardes, mais cela m’a rendu conscient que beaucoup de passionnés avec des serveurs domestiques n’ont aucune stratégie de protection des données. Si ton serveur Docker s’arrête demain, combien de temps te faudrait-il pour le récupérer ?
Dans cet article, je partage comment j’ai automatisé les sauvegardes de mon infrastructure Docker en utilisant rsync et cron. C’est simple, efficace et ça fonctionne.
La stratégie#
Mon approche est straightforward :
- rsync pour synchroniser de manière incrémentale uniquement ce qui a changé
- cron pour automatiser l’exécution quotidienne
- Un disque USB externe comme destination de sauvegarde
- La rétention de plusieurs snapshots pour une récupération granulaire
Ce n’est pas une sauvegarde en cloud. C’est une sauvegarde locale, rapide et sous mon contrôle.
Configuration étape par étape#
1. Préparer le stockage#
J’ai connecté un disque USB et l’ai monté sur /mnt/backup. Vérifiez qu’il soit disponible :
lsblk
mount | grep backup2. Script de sauvegarde#
J’ai créé /usr/local/bin/docker-backup.sh :
#!/bin/bash
BACKUP_DEST="/mnt/backup"
DOCKER_DATA="/var/lib/docker"
COMPOSE_DIR="/home/user/docker-compose"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_PATH="$BACKUP_DEST/backups/$TIMESTAMP"
# Crear directorio de backup
mkdir -p "$BACKUP_PATH"
# Backup de volúmenes Docker
echo "[$(date)] Iniciando backup de Docker volumes..."
rsync -av --delete "$DOCKER_DATA/volumes/" "$BACKUP_PATH/volumes/" >> /var/log/docker-backup.log 2>&1
# Backup de configuraciones docker-compose
echo "[$(date)] Iniciando backup de docker-compose..."
rsync -av "$COMPOSE_DIR/" "$BACKUP_PATH/compose/" >> /var/log/docker-backup.log 2>&1
# Backup incremental de datos de aplicaciones
echo "[$(date)] Iniciando backup de datos..."
rsync -av --delete "/home/user/app-data/" "$BACKUP_PATH/app-data/" >> /var/log/docker-backup.log 2>&1
# Limpiar backups más antiguos (mantener 7 últimos)
echo "[$(date)] Limpiando backups antiguos..."
ls -t "$BACKUP_DEST/backups" | tail -n +8 | xargs -I {} rm -rf "$BACKUP_DEST/backups/{}"
echo "[$(date)] Backup completado" >> /var/log/docker-backup.logLe rendre exécutable :
chmod +x /usr/local/bin/docker-backup.sh3. Configurer cron#
J’ai édité la table cron de l’utilisateur root :
sudo crontab -eJ’ai ajouté cette ligne pour l’exécuter à 2 AM tous les jours :
0 2 * * * /usr/local/bin/docker-backup.shPour vérifier qu’il est enregistré :
sudo crontab -l4. Surveillance#
J’ai créé un deuxième script pour me alerter si quelque chose échoue. Dans /usr/local/bin/check-backup.sh :
#!/bin/bash
LAST_BACKUP=$(ls -t /mnt/backup/backups | head -1)
BACKUP_TIME=$(date -d "$(stat -c %y /mnt/backup/backups/$LAST_BACKUP | cut -d' ' -f1)" +%s)
CURRENT_TIME=$(date +%s)
DIFF=$((($CURRENT_TIME - $BACKUP_TIME) / 3600))
if [ $DIFF -gt 25 ]; then
echo "ALERTA: No hay backup desde hace $DIFF horas"
else
echo "Último backup: $DIFF horas atrás - OK"
fiJe l’exécute manuellement chaque semaine ou via cron si je le souhaite :
chmod +x /usr/local/bin/check-backup.sh
/usr/local/bin/check-backup.shConsidérations importantes#
Espace disque : rsync avec --delete synchronise exactement la source. Je vérifiez que la destination dispose d’au moins 1,5 fois la taille des données Docker.
Permissions : Le script s’exécute en tant que root, donc il peut accéder à /var/lib/docker. Si tu utilises un utilisateur régulier, tu auras besoin de permissions spéciales.
Tests : Une fois par mois, je simule une récupération en restaurant un fichier aléatoire sur une machine de test. Une sauvegarde qui n’a jamais été testée n’existe pas.
Chiffrement : Mon disque USB est chez moi avec moi, donc je ne le chiffre pas. Si tu le conservais ailleurs, considère --backup-dir avec synchronisation vers une destination chiffrée.
Résultat#
Je dors mieux maintenant. Chaque nuit à 2 AM, Docker, les configurations et les données se synchronisent automatiquement. Si le serveur meurt, je récupère tout en 30 minutes.
La clé est : automatisation simple, vérification manuelle. N’attends pas que quelque chose échoue pour tester ta sauvegarde.
Équipement recommandé#
- Raspberry Pi 3 B+ — Serveur léger et peu consommateur d’énergie pour commencer ton homelab
- Raspberry Pi 4 (4GB) — La base parfaite pour homelab, Docker et surveillance
Liens d’affiliation. Aucun coût supplémentaire pour toi.