Connecteur MongoDB 🍃

Sauvegarde une base MongoDB via mongodump --archive (archive BSON binaire) et la restaure via mongorestore. Chiffrement côté bridge.

  • Image : ilygo/bridge-mongodb:7
  • Sous-commande : ilygo-bridge mongodb
  • Outils embarqués : mongodump, mongorestore (mongodb-database-tools)

Variables d'environnement

En plus des variables communes :

Variable Obligatoire Description
MONGO_URI oui URI de connexion, ex : mongodb://USER:PASSWORD@HOST:27017/DBNAME?authSource=admin

Surchargeable par commande via payload.uri.

Prérequis côté base

Créez un utilisateur avec le rôle backup (lecture de toutes les bases pour dump) :

use admin
db.createUser({
  user: "ilygo_backup",
  pwd: "un-mot-de-passe-fort",
  roles: [ { role: "backup", db: "admin" } ]
})
// Pour la restauration :
db.grantRolesToUser("ilygo_backup", [ { role: "restore", db: "admin" } ])

Déploiement (docker-compose)

services:
  app-db:
    image: mongo:7
    networks: [app-net]

  ilygo-bridge:
    image: ilygo/bridge-mongodb:7
    restart: unless-stopped
    networks: [app-net, default]
    environment:
      ILYGO_ENDPOINT: https://backup.example/api/v1
      ILYGO_API_KEY: ik_xxx
      ILYGO_PASSPHRASE: ${ILYGO_PASSPHRASE}
      ILYGO_RESTORE_SECRET: 3f87d2022d95...
      ILYGO_LABEL: prod-mongo
      MONGO_URI: mongodb://ilygo_backup:secret@app-db:27017/appdb?authSource=admin

networks:
  app-net:
    internal: true

Mécanisme de backup

mongodump --uri="$MONGO_URI" --archive
  • --archive : produit une archive unique sur stdout (pas de répertoire dump/), idéale pour le streaming.
  • Préserve indexes, collections, métadonnées.
  • Streamée → chunks chiffrés.

Mécanisme de restauration

Avec un RAT, le bridge déchiffre/décompresse l'archive, puis :

side_by_side (recommandé) — restaure dans un namespace renommé via wildcards :

mongorestore --uri="$MONGO_URI" --archive --nsFrom='*.*' --nsTo='restored__*.*'

Vos bases d'origine appdb deviennent restored__appdb — vous comparez avant de promouvoir.

in_place (destructif, exige confirm_destructive) :

mongorestore --uri="$MONGO_URI" --archive --drop

--drop supprime chaque collection avant de la recréer.

Réseau & sécurité

  • Aucun port exposé ; base sur réseau internal: true.
  • Utilisez authSource=admin dans l'URI si l'utilisateur est défini sur la base admin.
  • En prod : read_only: true + tmpfs: /tmp + cap_drop: [ALL].

Dépannage

Symptôme Cause Solution
Authentication failed mauvais authSource ou credentials Ajoutez ?authSource=admin à l'URI
not authorized on admin to execute command rôle backup manquant db.grantRolesToUser(..., [{role:"backup",db:"admin"}])
restore : namespaces inattendus mode side_by_side Les bases sont préfixées restored__ ; c'est voulu
réplicaset URI sans replicaSet= Ajoutez ?replicaSet=rs0&authSource=admin

Limites & roadmap

  • v1 : mongodump logique (cohérent par collection). Pour un dump cohérent point-in-time sur un cluster, utilisez un secondaire dédié dans l'URI.
  • Roadmap : oplog tailing pour PITR sur replica set.