<WRAP center round important 60%> ⚠️ CRITIQUE : Les backups sont essentiels à la continuité de service. Vérifiez régulièrement leur bon fonctionnement ! </WRAP>
| Service | Fréquence | Rétention | Taille moyenne | Critique |
|---|---|---|---|---|
| Généalogie | Quotidien 2h | 30 jours | ~500 MB | ⚠️ HAUTE |
| Paperless | Quotidien 2h | 30 jours | ~2 GB | ⚠️ HAUTE |
| Vaultwarden | Quotidien 2h + 12h | 60 jours | ~50 MB | 🔴 CRITIQUE |
| Configurations | Hebdomadaire | 30 jours | ~100 MB | ⚠️ HAUTE |
| Certificats SSL | Hebdomadaire | 90 jours | ~10 MB | 🟡 MOYENNE |
/opt/backups/ (local)| Script | Description | Emplacement |
|---|---|---|
backup-all.sh | Backup global (tous services) | /opt/scripts/ |
backup-genealogie.sh | Backup Webtrees + MariaDB | /opt/scripts/ |
backup-paperless.sh | Backup Paperless + PostgreSQL | /opt/scripts/ |
backup-vaultwarden.sh | Backup coffre-fort mots de passe | /opt/scripts/ |
backup-configs.sh | Backup configs + SSL | /opt/scripts/ |
check-backups.sh | Vérification état backups | /opt/scripts/ |
# Lancer le backup global sudo /opt/scripts/backup-all.sh # Résultat : # - /opt/backups/genealogie/YYYYMMDD-HHMMSS/ # - /opt/backups/paperless/YYYYMMDD-HHMMSS/ # - /opt/backups/vaultwarden/YYYYMMDD-HHMMSS/ # - /opt/backups/configs/YYYYMMDD-HHMMSS/
# Généalogie (Webtrees) sudo /opt/scripts/backup-genealogie.sh # Paperless sudo /opt/scripts/backup-paperless.sh # Vaultwarden (CRITIQUE) sudo /opt/scripts/backup-vaultwarden.sh # Configurations (Traefik, AdGuard, etc.) sudo /opt/scripts/backup-configs.sh
# Script de vérification sudo /opt/scripts/check-backups.sh # Résultat attendu : # ✅ genealogie: 450MB (il y a 0 jours) # ✅ paperless: 1.8GB (il y a 0 jours) # ✅ vaultwarden: 45MB (il y a 0 jours) # ✅ configs: 95MB (il y a 2 jours)
# Tous les backups ls -lht /opt/backups/*/ # Backups d'un service spécifique ls -lht /opt/backups/genealogie/ ls -lht /opt/backups/paperless/ ls -lht /opt/backups/vaultwarden/ # Taille totale du -sh /opt/backups/*
Les backups automatiques sont configurés via crontab :
# Voir les tâches planifiées sudo crontab -l # Éditer les tâches sudo crontab -e
Configuration actuelle :
# Backup quotidien à 2h du matin (tous les services) 0 2 * * * /opt/scripts/backup-all.sh # Backup Vaultwarden supplémentaire à midi (sécurité) 0 12 * * * /opt/scripts/backup-vaultwarden.sh >> /var/log/backup-vaultwarden.log 2>&1 # Nettoyage des logs tous les lundis à 5h 0 5 * * 1 find /var/log -name "backup-*.log" -mtime +30 -delete
# Log du backup global tail -50 /var/log/backup-all.log # Log Vaultwarden tail -50 /var/log/backup-vaultwarden.log # Logs des dernières 24h grep "$(date +'%Y-%m-%d')" /var/log/backup-all.log
<WRAP center round alert 60%> ⚠️ ATTENTION : La restauration écrase les données existantes ! Toujours faire un backup avant de restaurer. </WRAP>
# 1. Choisir le backup BACKUP_DIR="/opt/backups/genealogie/20260201-020000" # 2. Lire les instructions cat $BACKUP_DIR/README.txt # 3. Arrêter les services cd /opt/stacks/genealogie docker compose down # 4. Backup de sécurité de l'état actuel sudo cp -r /opt/stacks/genealogie /opt/backups/genealogie-avant-restore-$(date +%Y%m%d) # 5. Restaurer la base de données docker compose up -d genealogie-db sleep 10 docker exec -i genealogie-db mariadb -u root -p$(grep MYSQL_ROOT_PASSWORD .env | cut -d= -f2) < $BACKUP_DIR/genealogie-database.sql # 6. Restaurer les données et médias tar -xzf $BACKUP_DIR/genealogie-data.tar.gz -C /opt/stacks/genealogie # 7. Redémarrer tout docker compose down docker compose up -d # 8. Vérifier docker logs genealogie-app --tail 30 curl -I https://genealogie.cotting.fr
# 1. Choisir le backup BACKUP_DIR="/opt/backups/paperless/20260201-020000" # 2. Arrêter cd /opt/stacks/paperless docker compose down # 3. Backup de sécurité sudo cp -r /opt/stacks/paperless /opt/backups/paperless-avant-restore-$(date +%Y%m%d) # 4. Restaurer la base PostgreSQL docker compose up -d paperless-db sleep 10 docker exec -i paperless-db psql -U paperless -d paperless < $BACKUP_DIR/paperless-database.sql # 5. Restaurer les documents tar -xzf $BACKUP_DIR/paperless-data.tar.gz -C /opt/stacks/paperless # 6. Redémarrer docker compose down docker compose up -d # 7. Vérifier docker logs paperless-app --tail 30 curl -I https://paperless.cotting.fr
<WRAP center round alert 80%> 🔴 TRÈS CRITIQUE : Contient tous vos mots de passe ! Procédez avec la plus grande prudence. </WRAP>
# 1. Choisir le backup BACKUP_DIR="/opt/backups/vaultwarden/20260201-020000" # 2. Arrêter cd /opt/stacks/vaultwarden docker compose down # 3. Backup de sécurité sudo cp -r /opt/stacks/vaultwarden /opt/backups/vaultwarden-avant-restore-$(date +%Y%m%d) # 4. Restaurer les données tar -xzf $BACKUP_DIR/vaultwarden-data.tar.gz -C /opt/stacks/vaultwarden # 5. Redémarrer docker compose up -d # 6. Vérifier docker logs vaultwarden --tail 30 curl -I https://vaultwarden.cotting.fr # 7. Tester la connexion avec votre compte
<WRAP center round tip 60%> 💡 RECOMMANDATION : Toujours avoir une copie externe des backups critiques ! </WRAP>
# Monter le NAS sudo mount -t cifs //192.168.1.XXX/backups /mnt/nas -o username=admin,password=xxx # Synchroniser rsync -avz --delete /opt/backups/ /mnt/nas/docker-backups/ # Démonter sudo umount /mnt/nas
# Configurer rclone (une fois) rclone config # Synchroniser vers Google Drive rclone sync /opt/backups gdrive:docker-backups --progress # Ou vers autre cloud rclone sync /opt/backups dropbox:backups --progress
Ajouter à crontab :
# Sync vers NAS/Cloud le dimanche à 4h 0 4 * * 0 /opt/scripts/sync-to-external.sh >> /var/log/sync-external.log 2>&1
Créer un script de vérification :
#!/bin/bash # /opt/scripts/verify-backups.sh ERRORS=0 # Vérifier que les backups ont moins de 2 jours for service in genealogie paperless vaultwarden; do LATEST=$(ls -td /opt/backups/$service/20* 2>/dev/null | head -1) if [ -n "$LATEST" ]; then AGE=$(( ($(date +%s) - $(stat -c %Y "$LATEST")) / 86400 )) if [ $AGE -gt 2 ]; then echo "❌ ERREUR: Backup $service trop ancien ($AGE jours)" ERRORS=$((ERRORS+1)) fi else echo "❌ ERREUR: Aucun backup trouvé pour $service" ERRORS=$((ERRORS+1)) fi done if [ $ERRORS -eq 0 ]; then echo "✅ Tous les backups sont OK" exit 0 else echo "⚠️ $ERRORS erreur(s) détectée(s)" # Optionnel : Envoyer une alerte # curl -d "ALERTE: Problème backups" https://ntfy.sh/cotting-backup exit 1 fi
<WRAP center round important 60%> ⚠️ Recommandation : Tester une restauration complète tous les 3 mois </WRAP>
Procédure de test :
sudo /opt/scripts/check-backups.shdf -h /opt/backupstail -50 /var/log/backup-all.logEn cas de problème critique avec les backups :
/opt/scripts/