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é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 psCré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.
Exécuter une première sauvegarde avant de la planifier
Le script compagnon crée un lot horodaté. Il arrête les services applicatifs actifs avant le dump PostgreSQL et la copie des volumes hors base. PostgreSQL reste disponible pour le dump. Le script relance seulement les services arrêtés, puis chiffre le lot. Suspendez aussi les écritures externes pendant toute la capture.
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 ces commandes, installez AWS CLI et age sur le serveur. Docker et Compose doivent déjà exécuter votre application. Générez l'identité age sur votre poste d'administration, conservez la clé privée hors du serveur et renseignez seulement son destinataire public dans AGE_RECIPIENT.
Pour la première répétition, utilisez l’exemple fixture/ du dépôt sur un serveur jetable. Il crée un enregistrement de base pointant vers uploads/record-42.txt dans un volume nommé. Son README fournit la correspondance exacte et le contrôle de reprise.
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-recoverygit checkout 08fcc40647eef74eb7015fb66c00a96386795dc0sudo 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.
sudo bash -c 'set -a; . /etc/compose-recovery.env; set +a; export AWS_DEFAULT_REGION=us-east-1; aws s3 ls "s3://$BUCKET/$PREFIX/" --endpoint-url "https://$REGION.digitaloceanspaces.com"'Restaurer 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-recoverygit checkout 08fcc40647eef74eb7015fb66c00a96386795dc0sudo 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.
Vérifier le résultat
- 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.