Aller au contenu principal

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
Voir sur GitHub(ouvre dans un nouvel onglet)
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. 1

    Validation

    backups.yml est validé au démarrage.

  2. 2

    Clients

    Seuls les clients utiles sont installés.

  3. 3

    Scheduling

    Chaque job part selon son cron.

  4. 4

    Dump

    Compressé en streaming, chiffré si besoin.

  5. 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. 1

    Décrire les jobs dans backups.yml (ici une base SQLite backupée chaque nuit), en chmod 600.

  2. 2

    Monter dans le container ce fichier, le dossier des backups et les données à backuper.

  3. 3

    Lancer docker compose up -d : les dumps compressés arrivent dans ./backups.

backups.yml
jobs:
  - name: app
    type: sqlite
    path: /sources/app/app.db
    schedule: "0 3 * * *"
    retention_days: 7
compose.yml
services:
  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