Connecteur MongoDB 🍃
Sauvegarde une base MongoDB via
mongodump --archive(archive BSON binaire) et la restaure viamongorestore. 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épertoiredump/), 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=admindans l'URI si l'utilisateur est défini sur la baseadmin. - 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 :
mongodumplogique (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.