Backup & Restore - srv759970
Guide complet pour sauvegarder et restaurer les configurations et données du serveur.
Vue d'Ensemble
Nous utilisons une approche hybride pour backup/restore:
- Configurations → Versionnées dans Git (
server-configs/) - Données Docker → Backup automatique serveur (
/root/backups/) - Bases de données → Dumps inclus dans backups serveur
Structure de Backup
Repository Git (Local)
└── server-configs/ # Configurations versionnées
├── docker-compose/ # 8 services
├── nginx/ # 20+ sites
├── dashy/ # conf.yml
├── systemd/ # Services custom
└── scripts/ # Scripts de backup
Serveur (/root/backups/)
└── server-state-YYYYMMDD-HHMMSS.tar.gz # Backup complet quotidien
├── configs/ # Configs + .env avec secrets
├── docker/ # État Docker
├── volumes/ # Volumes critiques (tar.gz)
└── databases/ # Dumps SQL
📥 Synchroniser Configurations (Serveur → Local)
Sync Complet
Ce qui est synchronisé: - ✅ Docker Compose files (8 services) - ✅ Nginx configs (20+ sites) - ✅ Dashy configuration - ✅ Systemd services - ✅ État Docker (conteneurs, images, volumes, networks) - ✅ Certificats SSL (liste) - ✅ .env templates (SANS secrets) - ✅ Inventaire serveur
Durée: ~2-3 minutes
Commit dans Git
# Après sync
git add server-configs/
git commit -m "backup: server state $(date +%Y-%m-%d)"
git push
📤 Déployer Configurations (Local → Serveur)
Dry-Run (Test)
Affiche ce qui serait modifié sans faire de changements.
Déploiement Complet
Actions: - Backup automatique des fichiers existants (*.backup-YYYYMMDD) - Upload des nouvelles configs - Test Nginx (nginx -t) - Prompts pour reload/restart services
Déploiement Partiel
# Seulement Nginx
bash scripts/sync-to-server.sh --service nginx
# Seulement Dashy
bash scripts/sync-to-server.sh --service dashy
# Seulement Docker Compose
bash scripts/sync-to-server.sh --service docker-compose
💾 Backup Automatique Serveur
Installation
# Déployer le script
scp server-configs/scripts/backup-server-state.sh root@69.62.108.82:/root/scripts/
ssh root@69.62.108.82 "chmod +x /root/scripts/backup-server-state.sh"
# Setup cron
ssh root@69.62.108.82
crontab -e
# Ajouter (backup quotidien à 3h)
0 3 * * * /root/scripts/backup-server-state.sh >> /var/log/backup-cron.log 2>&1
Exécution Manuelle
Contenu du Backup
Un backup server-state-*.tar.gz contient:
configs/
├── docker-compose.yml (tous les services)
├── nginx-sites/ (tous les sites nginx)
├── nginx-snippets/ (snippets réutilisables)
├── dashy-conf.yml
├── .env files (AVEC secrets)
└── systemd/*.service
docker/
├── containers-running.txt
├── containers-all.txt
├── images.txt
├── volumes.txt
└── networks.txt
volumes/
├── dashy_icons.tar.gz
├── grafana_data.tar.gz
├── prometheus_data.tar.gz
└── loki_data.tar.gz
databases/
└── clemence_db.sql
server-info.txt
Gestion des Backups
# Lister les backups
ssh root@69.62.108.82 "ls -lh /root/backups/"
# Voir le contenu d'un backup
ssh root@69.62.108.82 "tar tzf /root/backups/server-state-20250121-030000.tar.gz | head -30"
# Télécharger un backup en local
scp root@69.62.108.82:/root/backups/server-state-20250121-030000.tar.gz ./backups/
# Supprimer les anciens backups (>30 jours)
ssh root@69.62.108.82 "find /root/backups -name 'server-state-*.tar.gz' -mtime +30 -delete"
Rétention: 30 jours (configurable dans le script)
🔄 Restauration
Restaurer Configurations (depuis Git)
1. Checkout Version Voulue
# Voir l'historique
git log --oneline server-configs/
# Checkout une version spécifique
git checkout <commit-hash> -- server-configs/
# Ou revenir à la dernière version
git checkout HEAD -- server-configs/
2. Déployer
3. Redémarrer Services
# Exemple: Dashy
ssh root@69.62.108.82 "cd /opt/dashy && docker-compose restart"
# Exemple: Nginx
ssh root@69.62.108.82 "nginx -t && systemctl reload nginx"
# Exemple: Tous les services monitoring
ssh root@69.62.108.82 "cd /opt/monitoring && docker-compose restart"
Restaurer depuis Backup Serveur
1. Extraire le Backup
ssh root@69.62.108.82
cd /tmp
tar xzf /root/backups/server-state-20250121-030000.tar.gz
cd server-state-20250121-030000/
2. Restaurer Configs Spécifiques
# Nginx
cp -r configs/nginx-sites/* /etc/nginx/sites-available/
nginx -t && systemctl reload nginx
# Docker Compose
cp configs/opt/dashy/docker-compose.yml /opt/dashy/
cd /opt/dashy && docker-compose up -d
# Dashy config
cp configs/dashy-conf.yml /opt/dashy/conf.yml
cd /opt/dashy && docker-compose restart
3. Restaurer Volumes Docker
# Exemple: Grafana data
docker run --rm \
-v grafana_data:/volume \
-v /tmp/server-state-20250121-030000/volumes:/backup \
alpine sh -c "cd /volume && tar xzf /backup/grafana_data.tar.gz --strip 1"
# Redémarrer le service
cd /opt/monitoring && docker-compose restart grafana
4. Restaurer Base de Données
# MySQL (Clemence)
docker exec -i mysql-clemence mysql -u clemence_user -pClemenceDB2025 clemence_db \
< databases/clemence_db.sql
# Vérifier
docker exec mysql-clemence mysql -u clemence_user -pClemenceDB2025 -e "SHOW TABLES;" clemence_db
🚨 Disaster Recovery
Scénario: Serveur Complètement Détruit
Étape 1: Nouveau Serveur
- Provisionner nouveau VPS Ubuntu 24.04
- Installer Docker, Docker Compose, Nginx, Certbot
- Configurer SSH avec ta clé publique
Étape 2: Restaurer Configurations
# Clone le repo Git
git clone https://github.com/julienfernandez/hostinger.git
cd hostinger
# Déployer TOUTES les configs
bash scripts/sync-to-server.sh
Étape 3: Restaurer Données
# Upload backup le plus récent
scp local-backups/server-state-latest.tar.gz root@NEW_IP:/tmp/
# Extraire et restaurer
ssh root@NEW_IP
cd /tmp
tar xzf server-state-latest.tar.gz
cd server-state-*/
# Restaurer volumes critiques
# (voir section "Restaurer Volumes Docker" ci-dessus)
# Restaurer databases
# (voir section "Restaurer Base de Données" ci-dessus)
Étape 4: Certificats SSL
# Regénérer tous les certificats
ssh root@NEW_IP
systemctl stop nginx
certbot certonly --standalone \
-d dashy.srv759970.hstgr.cloud \
-d whisperx.srv759970.hstgr.cloud \
-d monitoring.srv759970.hstgr.cloud \
# ... (tous les domaines)
systemctl start nginx
Étape 5: Démarrer Services
# Démarrer tous les Docker Compose stacks
for service in dashy whisperx faster-whisper-queue monitoring neutts-air memvid mkdocs; do
echo "Starting $service..."
ssh root@NEW_IP "cd /opt/$service && docker-compose up -d"
done
Étape 6: Vérification
# Vérifier tous les conteneurs
ssh root@NEW_IP "docker ps"
# Vérifier Nginx
ssh root@NEW_IP "nginx -t"
ssh root@NEW_IP "systemctl status nginx"
# Tester les URLs
curl -I https://dashy.srv759970.hstgr.cloud
curl -I https://docs.srv759970.hstgr.cloud
📅 Calendrier de Backup Recommandé
Automatique
- Quotidien (3h): Backup complet serveur (
/root/backups/) - Toutes les 6h: Sync Git (optionnel via cron local)
Manuel
- Avant changement majeur: Backup manuel + commit Git
- Après déploiement: Sync configs vers Git
- Mensuel: Télécharger backup serveur en local
🔐 Sécurité des Backups
⚠️ Secrets dans les Backups
Repository Git: - ❌ .env réels PAS dans Git - ✅ .env.template seulement (valeurs masquées)
Backups Serveur: - ✅ Contiennent les .env avec secrets - ⚠️ DANGER: /root/backups/ sur serveur non chiffré - ✅ Recommandation: Télécharger en local et chiffrer
Chiffrer un Backup Local
# Télécharger
scp root@69.62.108.82:/root/backups/server-state-20250121.tar.gz ./
# Chiffrer avec GPG
gpg --symmetric --cipher-algo AES256 server-state-20250121.tar.gz
# Fichier chiffré: server-state-20250121.tar.gz.gpg
# Supprimer original
rm server-state-20250121.tar.gz
Déchiffrer
📊 Monitoring des Backups
Vérifier Derniers Backups
# Sur le serveur
ssh root@69.62.108.82 "ls -lht /root/backups/ | head -5"
# Vérifier le log cron
ssh root@69.62.108.82 "tail -50 /var/log/backup-cron.log"
Tester un Backup
# Tester l'intégrité
ssh root@69.62.108.82 "tar tzf /root/backups/server-state-latest.tar.gz > /dev/null && echo 'OK' || echo 'CORRUPTED'"
# Voir la taille
ssh root@69.62.108.82 "du -h /root/backups/server-state-latest.tar.gz"
🛠️ Troubleshooting
Sync Failed
# Vérifier connexion SSH
ssh root@69.62.108.82 "echo OK"
# Re-exécuter avec debug
bash -x scripts/sync-from-server.sh
Backup Failed
# Vérifier espace disque
ssh root@69.62.108.82 "df -h /"
# Vérifier permissions
ssh root@69.62.108.82 "ls -la /root/scripts/backup-server-state.sh"
# Exécuter manuellement avec verbose
ssh root@69.62.108.82 "bash -x /root/scripts/backup-server-state.sh"
Restore Failed
# Vérifier le backup
tar tzf backup.tar.gz | grep -i error
# Extraire partiellement
tar xzf backup.tar.gz configs/nginx-sites/
# Vérifier Docker
docker ps -a
docker logs <container>
📚 Voir Aussi
- server-configs/README.md - Documentation structure
- INVENTORY.md - Inventaire serveur
- Docker Infrastructure
- Nginx Infrastructure
- Security
Dernière mise à jour: 2025-01-21 Prochaine révision: Après premier disaster recovery test