Sauvegarder une application Docker Compose et tester la restauration
Sauvegardez la configuration Docker Compose, les volumes nommés et PostgreSQL dans un stockage privé, puis prouvez la restauration sur un serveur isolé.
Dépôt GitHub compagnonScripts compagnons de reprise Docker ComposeTylorMayfield/docker-compose-spaces-recoveryVoir sur GitHubDécider ce qui doit revenir
Une application Docker Compose est récupérable seulement si vous pouvez reconstruire sa configuration, restaurer ses données et la démarrer sans deviner quel secret ou quelle version elle utilisait. Une sauvegarde ou un snapshot de Droplet reste utile pour un problème de machine. Il ne remplace pas un test de restauration de l’application.
Commencez par une seule application. Notez son dossier Compose, son fichier `.env`, ses volumes nommés, ses montages, ses tags d’image, son service de base, son nom public et un contrôle inoffensif. Si vous ne pouvez pas les nommer, n’automatisez pas encore la sauvegarde.
- Copiez la configuration seulement depuis un dossier protégé. Ne commitez jamais un `.env` de production.
- Utilisez un dump logique PostgreSQL pour les données PostgreSQL. N’archivez pas ses fichiers actifs avec tar.
- Gardez l’identité de déchiffrement hors du serveur applicatif et du compartiment.
Tenir un inventaire de reprise court
Exécutez ces commandes en lecture seule dans le dossier de l’application. Elles montrent les services, la configuration Compose résolue et les volumes Docker disponibles. Notez les volumes qui comptent. Un volume appelé `postgres_data` est fréquent, pas obligatoire.
cd /srv/YOUR_APP
sudo docker compose config --services
sudo docker compose config
sudo docker volume ls
sudo docker compose psRemplacez avant l’utilisation : YOUR_APP
Créer un stockage privé et des clés séparées
Créez un compartiment Spaces privé pour ce lot de reprise. Activez le versioning et choisissez une règle de cycle de vie qui correspond à la rétention approuvée. Utilisez une clé à accès complet seulement pour configurer les règles. Donnez à la tâche planifiée une clé limitée à ce compartiment. Créez une deuxième clé limitée en lecture pour le test.
Gardez le compartiment privé. N’ajoutez ni CDN, ni politique publique, ni listing public.
Vérifier la première réponse
- Résultat attendu
- Le serveur de test déchiffre un lot complet, démarre l’application récupérée sous un nom de test et expose une donnée connue en lecture seule sans contacter la production.
- Arrêter si
- Arrêtez si la cible est un serveur de production, si le lot manque son manifeste ou a des horodatages différents, si le service récupéré peut envoyer du trafic sortant, si un nom de production reste présent ou si un secret apparaît dans la sortie.
- Étape suivante
- Consignez l’horodatage, la durée et le résultat. Retirez les données récupérées du serveur de test et examinez chaque changement manuel avant de planifier la tâche.
Exécuter une première sauvegarde avant de la planifier
Le script compagnon crée un lot horodaté. Il produit un dump PostgreSQL au format personnalisé via le conteneur de base quand vous le configurez. Il arrête ensuite la pile Compose pendant l’archive des volumes sélectionnés hors base, puis chiffre le lot avant l’envoi.
Cette courte pause est volontaire. Si l’application ne peut pas la supporter, utilisez la méthode de sauvegarde en ligne documentée par son éditeur.
Avant de continuer : Exécutez la première sauvegarde manuellement et vérifiez son manifeste avant de la planifier. Gardez le fichier de configuration hors du dépôt cloné.
git clone https://github.com/TylorMayfield/docker-compose-spaces-recovery.gitcd docker-compose-spaces-recoverysudo install -m 600 .env.example /etc/compose-recovery.envsudo nano /etc/compose-recovery.envsudo ./scripts/backup-compose-app.sh /etc/compose-recovery.env
Vérifier le lot avant de lui faire confiance
La commande doit laisser un manifeste et les fichiers chiffrés sous le même horodatage. Listez le préfixe distant après la première exécution et notez l’horodatage. Un manifeste manquant, une archive vide ou un dump sans configuration correspondante signifie que la sauvegarde a échoué.
Planifiez seulement la commande déjà inspectée. Envoyez stderr vers l’alerte que l’équipe consulte.
set -a
. /etc/compose-recovery.env
set +a
aws s3 ls "s3://$BUCKET/$PREFIX/" --endpoint-url "https://$REGION.digitaloceanspaces.com" | tail -8Restaurer sur un autre serveur
Utilisez un Droplet Linux neuf, un nom de test et un Cloud Firewall qui limite HTTPS à l’administrateur de récupération. Bloquez le trafic sortant avant le démarrage. Cela évite l’envoi de messages, de paiements ou de callbacks depuis un état récupéré.
Téléchargez un lot complet et son manifeste correspondant avec la clé en lecture seule. Déchiffrez-le seulement sur le serveur de test. Le compagnon crée de nouveaux volumes Docker avec un préfixe de récupération et restaure les archives sélectionnées. Si le lot contient PostgreSQL, démarrez d’abord un conteneur neuf et une base de test vide. Dans le fichier de restauration réservé à root, renseignez le conteneur, la base, l’utilisateur et son mot de passe : le script transmet ce mot de passe seulement au processus de restauration. La commande applique les données uniquement dans ces nouveaux volumes et cette base de test, jamais en production. Remplacez le nom de production par le nom de test avant le démarrage.
Avant de continuer : La commande d’application écrit les données récupérées dans de nouveaux volumes de reprise et une base de test. Exécutez-la seulement sur le serveur de test isolé après avoir bloqué le trafic sortant et confirmé RESTORE_ENV=test.
git clone https://github.com/TylorMayfield/docker-compose-spaces-recovery.gitcd docker-compose-spaces-recoverysudo install -m 600 .env.example /etc/compose-recovery-restore.envsudo nano /etc/compose-recovery-restore.envsudo ./scripts/restore-compose-app.sh /etc/compose-recovery-restore.envsudo ./scripts/restore-compose-app.sh --apply /etc/compose-recovery-restore.env
Prouver l’application puis nettoyer
Une liste de conteneurs verts ne suffit pas. Connectez-vous au nom de test, trouvez une donnée connue et lancez le contrôle inoffensif choisi au début. Pour une app web, ouvrez une page en lecture seule. Pour un worker, vérifiez son démarrage avec son trafic sortant bloqué.
Notez l’horodatage, la durée et le résultat. Renouvelez tout identifiant exposé hors de son emplacement protégé. Détruisez le serveur de test ou effacez les données récupérées après le test.