Aller au contenu principal

Sauvegarde

Vue d'ensemble​

DonnéeMécanismeFréquenceRétentionEmplacement
Base de production (pch_sig)réplication PostgreSQL en continu vers l'esclave de secourscontinue—axone-dr
Base de productioninstantanés chiffrés restic sur l'esclavequotidienneselon la politique resticaxone-dr
Journaux de production (volume loki_data)rsync incrémental + resticquotidienneLoki garde un anaxone-dr
Base de préproductionpg_dump compressé (~/scripts/backup-database.sh)02:0030 jours~/backups sur le 220
GitLab de préproductiongitlab-backup create + archive de /etc/gitlab (~/scripts/backup-gitlab.sh)02:3014 jours~/backups/gitlab sur le 220
Code sourcedé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.prod et ~/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).