Database Backup
Projet open source de Gauthier Painteaux
Un seul container pour backuper toutes les bases d’un serveur. Un fichier YAML décrit les jobs, et le scheduler Go intégré produit des dumps compressés, chiffrés et purgés selon la rétention.
- Go
- Docker
- PostgreSQL
- MongoDB
- Version
- v2.3.1
- Étoiles
- 1
- Licence
- MIT
- Mis à jour le
# backups.yml
defaults:
retention_days: 14
encryption:
method: age
recipients:
- age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
jobs:
- name: app-db
type: postgres
host: app-db
database: app
user: backup
password_file: /run/secrets/app_db_password
schedule: "0 2 * * *"
- name: shop-db
type: mariadb
host: shop-db
database: shop
user: backup
password_file: /run/secrets/shop_db_password
schedule: "@daily"
- name: vault
type: sqlite
path: /sources/vault/db.sqlite3
schedule: "0 3 * * *"- moteurs : PostgreSQL, MariaDB/MySQL, MongoDB, SQLite
- 4
- d’image, sans client préinstallé
- ~126 Mo
- architectures publiées : amd64 et arm64
- 2
- vérification de l’image de base Debian
- 4 × / jour
Comment fonctionne Database Backup
- 1
Validation
backups.yml est validé au démarrage.
- 2
Clients
Seuls les clients utiles sont installés.
- 3
Scheduling
Chaque job part selon son cron.
- 4
Dump
Compressé en streaming, chiffré si besoin.
- 5
Rotation
Les vieux backups sont supprimés.
Points forts de Database Backup
Quatre moteurs
PostgreSQL (toute version cliente du repo PGDG), MariaDB/MySQL, MongoDB et SQLite, avec un snapshot cohérent même en cours d’écriture.
Scheduler intégré
Expressions cron ou raccourcis comme @daily, sans daemon cron externe, avec une rétention par job.
Chiffrement au repos
GPG symétrique ou age, par passphrase ou par public key : le container n’a jamais besoin de la private key.
Non root, credentials masqués
Exécution non root, credentials jamais visibles dans la ligne de commande, healthcheck par drivers natifs.
Choix techniques de Database Backup
- Go
- Un binaire unique, compilé statiquement, qui embarque le scheduler et les drivers natifs du healthcheck.
- Debian slim
- Une base légère où les clients de chaque moteur s’installent à la demande, dans la version voulue.
- GPG et age
- Deux formats de chiffrement standards, déchiffrables sans l’outil, dont un par public key.
- GitHub Actions
- Tests, images multi-architecture et rebuild automatique quand l’image Debian change.
Installer Database Backup
- 1
Décrire les jobs dans backups.yml (ici une base SQLite backupée chaque nuit), en chmod 600.
- 2
Monter dans le container ce fichier, le dossier des backups et les données à backuper.
- 3
Lancer docker compose up -d : les dumps compressés arrivent dans ./backups.
jobs:
- name: app
type: sqlite
path: /sources/app/app.db
schedule: "0 3 * * *"
retention_days: 7services:
db-backup:
image: ghcr.io/greite/database-backup:latest
restart: unless-stopped
volumes:
- ./backups:/backups
- ./backups.yml:/config/backups.yml:ro
- ./data:/sources/app:ro