Sauvegarde
Vue d'ensemble
| Donnée | Mécanisme | Fréquence | Rétention | Emplacement |
|---|---|---|---|---|
Base de production (pch_sig) | réplication PostgreSQL en continu vers l'esclave de secours | continue | — | axone-dr |
| Base de production | instantanés chiffrés restic sur l'esclave | quotidienne | selon la politique restic | axone-dr |
Journaux de production (volume loki_data) | rsync incrémental + restic | quotidienne | Loki garde un an | axone-dr |
| Base de préproduction | pg_dump compressé (~/scripts/backup-database.sh) | 02:00 | 30 jours | ~/backups sur le 220 |
| GitLab de préproduction | gitlab-backup create + archive de /etc/gitlab (~/scripts/backup-gitlab.sh) | 02:30 | 14 jours | ~/backups/gitlab sur le 220 |
| Code source | dépôts Git | à chaque push | — | gitlab.com et gitlab.ucp-pch.org |
L'esclave de secours (axone-dr) est administré par Axone ; il se connecte à la production par le conteneur pch_pg_dr_proxy.
Points ouverts
- Les fichiers téléversés (volume
backend_uploads: photos, pièces jointes, documents) : leur copie hors site est à confirmer avec l'équipe qui gère l'esclave de secours. - Les sauvegardes du serveur 220 (préproduction, GitLab) restent sur ce serveur : elles ne sont pas encore copiées hors site.
Sauvegarde manuelle de la base
Avant une opération risquée (migration lourde, import massif) :
# Production
docker exec pch_postgres sh -c 'pg_dump -U "$POSTGRES_USER" -d "$POSTGRES_DB"' | gzip > ~/backups/pch_sig_$(date +%Y%m%d_%H%M%S).sql.gz
# Préproduction (nom de conteneur préfixé)
PG=$(docker ps --filter name=pch_postgres --format '{{.Names}}' | grep -v exporter | head -1)
docker exec "$PG" sh -c 'pg_dump -U "$POSTGRES_USER" -d "$POSTGRES_DB"' | gzip > ~/backups/pch_sig_$(date +%Y%m%d_%H%M%S).sql.gz
Vérifier que le fichier n'est pas vide (ls -lh ~/backups | tail -3).
Sauvegarde des fichiers téléversés
docker run --rm -v pch-sig_backend_uploads:/data:ro -v ~/backups:/out alpine \
tar -czf /out/uploads_$(date +%Y%m%d).tar.gz -C /data .
(Le nom exact du volume est donné par docker volume ls | grep uploads.)
Sauvegardes de la préproduction
0 2 * * * /home/ubuntu/scripts/backup-database.sh >> /home/ubuntu/backups/cron.log 2>&1
30 2 * * * /home/ubuntu/scripts/backup-gitlab.sh >> /home/ubuntu/backups/cron.log 2>&1
La sauvegarde GitLab comprend deux fichiers par jour, tous deux nécessaires à une restauration : l'archive applicative (*_gitlab_backup.tar) et la configuration (gitlab-config_*.tar.gz, qui contient gitlab-secrets.json). Détails dans docs/GITLAB_SERVEUR.md.
Vérifier
ls -lh ~/backups | tail -5 # dumps récents et non vides
tail -20 ~/backups/backup.log # journal du script de la préproduction
tail -20 ~/backups/gitlab-backup.log
Une sauvegarde n'est fiable que si sa restauration a été testée : voir Restauration.
Ce qui ne doit jamais être perdu
~/pch-sig/.env.prodet~/pch-sig/backend/.env(secrets),backend/config/jwt/(clés JWT) : leur contenu est dans le gestionnaire de secrets.~/smtp-relay/.env(relais SMTP),~/kobo-install/(configuration Kobo),~/gitlab(configuration GitLab).