--- title: Backup des Bases de Donnees url: https://blog.guigpap.com/fr/workflows/database-backup/ url_md: https://blog.guigpap.com/fr/workflows/database-backup.md category: automation date: '2026-03-28' maturite: production techno: - postgresql application: - infrastructure - operations --- # Backup des Bases de Donnees > Sauvegarde quotidienne automatisee des bases PostgreSQL vers Google Drive avec rotation et alertes ## 1. Quoi ? — Definition et contexte 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. > **Note - Rclone** > > **Rclone** est un outil en ligne de commande qui synchronise des fichiers avec des services cloud (Google Drive, S3, etc.). Il gere le chunked upload pour les gros fichiers et supporte la rotation automatique des anciennes sauvegardes. ### Ce qui est sauvegarde | Donnee | Source | Taille typique | |--------|--------|----------------| | Base N8N | PostgreSQL n8n-stack | ~500 MB | | Base Odoo (`guig_db`) | PostgreSQL odoo-stack | ~200 MB | | Base TimeTrackr | PostgreSQL timetrackr-stack | ~10 MB | | Filestore Odoo | `/var/lib/odoo/filestore/` | ~1 GB | | Cle N8N | `N8N_ENCRYPTION_KEY` | Quelques octets | --- ## 2. Pourquoi ? — Enjeux et motivations ### Problemes resolus | Probleme | Sans backup auto | Avec backup auto | |----------|-----------------|-----------------| | **Perte de donnees** | Corruption DB = tout perdu | Restauration depuis GDrive | | **Oubli de backup** | "Ca fait combien de temps ?" | Cron quotidien 3h00 | | **Pas de retention** | Disque local plein | Rotation locale 7j, GDrive 30j | | **Echec silencieux** | Backup echoue, personne ne sait | Alerte Telegram immediate | --- ## 3. Comment ? — Mise en oeuvre technique ### Architecture ```mermaid flowchart TD Cron["Cron host · 03:00 quotidien"] subgraph Script["scripts/backup-databases.sh"] direction TB Dump["pg_dump · 3 DB via docker exec"] GzDB["gzip dumps"] Filestore["tar filestore Odoo"] Key["Export N8N_ENCRYPTION_KEY"] Upload["rclone copy → GDrive"] LocalRot["Rotation locale · -7j"] RemoteRot["Rotation GDrive · -30j"] end Local["/backups/ · retention 7j"] GDrive["GDrive · retention 30j"] Hub["Notification Hub · alerte si échec"] Cron --> Dump --> GzDB --> Filestore --> Key --> Local Local --> Upload --> GDrive Upload --> LocalRot --> RemoteRot Script -.->|failure| Hub ``` ### Le script `backup-databases.sh` Le script est declenche par crontab a 3h00 (`0 3 * * *`). Il execute dans l'ordre : 1. **Dump PostgreSQL** — `pg_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](/fr/workflows/notification-hub/) en fin d'execution. ### Politique de retention | Stockage | Retention | Rotation | |----------|-----------|----------| | Local (`/backups/`) | 7 jours | Script quotidien | | Google Drive | 30 jours | rclone delete `--min-age 30d` | ### Verification ```bash # 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 ``` > **Caution - Cle de chiffrement N8N** > > La cle `N8N_ENCRYPTION_KEY` est indispensable pour dechiffrer les credentials stockees dans la base N8N. Sans cette cle, les workflows importes ne pourront pas acceder aux services externes. Elle est sauvegardee dans un fichier separe sur GDrive. --- ## 4. Et si ? — Perspectives et limites ### Limites actuelles | Limite | Impact | Mitigation | |--------|--------|------------| | **Pas de test de restauration** | On decouvre les problemes au pire moment | Test mensuel prevu | | **GDrive single point** | Si GDrive down, pas de backup distant | Ajouter un 2e provider (S3) | | **Pas de backup incremental** | Full dump chaque nuit | Acceptable pour les volumes actuels | ### Scenarios d'evolution **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 --- ## Pages liees ### Infrastructure - [Architecture VPS](/fr/infrastructure/architecture-vps/) — Vue d'ensemble des stacks - [N8N en mode Queue](/fr/infrastructure/n8n-queue-mode/) — Base N8N sauvegardee - [Odoo 18 sur Docker](/fr/infrastructure/odoo-18-setup/) — Base Odoo sauvegardee ### Workflows - [Notification Hub](/fr/workflows/notification-hub/) — Alertes en cas d'echec - [N8N Export GitHub](/fr/workflows/n8n-export-github/) — Backup complementaire des workflows ## Metadonnees agent - Cet article est issu du blog GuiGPaP Lab. - Contexte global du blog: https://blog.guigpap.com/llms.txt - Contact auteur: https://odoo.guigpap.com/mon-cv - Licence: CC-BY-SA 4.0