Aller au contenu

Backup des Bases de Donnees

Chaque nuit a 3h du matin, un script sauvegarde les quatre bases de donnees PostgreSQL de l’infrastructure, le filestore Odoo, et la cle de chiffrement N8N vers Google Drive. Si quelque chose echoue, une alerte part immediatement via le Notification Hub.

DonneeSourceTaille typique
Base N8NPostgreSQL n8n-stack~500 MB
Base Odoo (guig_db)PostgreSQL odoo-stack~200 MB
Base TimeTrackrPostgreSQL timetrackr-stack~10 MB
Filestore Odoo/var/lib/odoo/filestore/~1 GB
Cle N8NN8N_ENCRYPTION_KEYQuelques octets

ProblemeSans backup autoAvec backup auto
Perte de donneesCorruption DB = tout perduRestauration depuis GDrive
Oubli de backup”Ca fait combien de temps ?”Cron quotidien 3h00
Pas de retentionDisque local pleinRotation locale 7j, GDrive 30j
Echec silencieuxBackup echoue, personne ne saitAlerte Telegram immediate

scripts/backup-databases.sh

failure

Cron host · 03:00 quotidien

pg_dump · 3 DB via docker exec

gzip dumps

tar filestore Odoo

Export N8N_ENCRYPTION_KEY

rclone copy → GDrive

Rotation locale · -7j

Rotation GDrive · -30j

/backups/ · retention 7j

GDrive · retention 30j

Notification Hub · alerte si échec

Le script est declenche par crontab a 3h00 (0 3 * * *). Il execute dans l’ordre :

  1. Dump PostgreSQLpg_dump pour chaque base via docker exec
  2. Compression — gzip des dumps
  3. Copie filestore — Archive tar du filestore Odoo
  4. Export cle N8N — Extraction de N8N_ENCRYPTION_KEY depuis les variables d’environnement
  5. Upload GDrive — rclone copy vers le dossier distant
  6. Rotation locale — Suppression des fichiers de plus de 7 jours
  7. Rotation GDrive — Suppression des fichiers de plus de 30 jours

Si une etape echoue, le script continue les autres et envoie une notification d’erreur au Notification Hub en fin d’execution.

StockageRetentionRotation
Local (/backups/)7 joursScript quotidien
Google Drive30 joursrclone delete --min-age 30d
Fenêtre de terminal
# Voir les derniers backups locaux
ls -lh /backups/
# Voir les logs
tail -20 /var/log/backup-databases.log
# Verifier le cron
crontab -l | grep backup

LimiteImpactMitigation
Pas de test de restaurationOn decouvre les problemes au pire momentTest mensuel prevu
GDrive single pointSi GDrive down, pas de backup distantAjouter un 2e provider (S3)
Pas de backup incrementalFull dump chaque nuitAcceptable pour les volumes actuels

Si volume de donnees augmente :

  • Passer aux backups incrementaux (WAL archiving PostgreSQL)
  • Compresser avec zstd au lieu de gzip (plus rapide, meilleur ratio)

Si besoin de restauration rapide :

  • Script de restore automatise
  • Test de restauration automatique hebdomadaire dans un conteneur ephemere