CVE Watch
Cybersécuritédevsecops4 min de lecture

MongoDB en production : installation, sécurisation et sauvegarde

MB
Massioudath Bankole
13 mai 2026 · 69 vues

Pourquoi MongoDB avec Docker ?

Installer MongoDB directement sur le serveur fonctionne mais crée des dépendances système difficiles à gérer. Avec Docker, MongoDB tourne dans un container isolé, facile à mettre à jour, à sauvegarder et à migrer.

1. Lancer MongoDB avec Docker

docker run -d \
  --name mongodb \
  -p 127.0.0.1:27017:27017 \
  --restart always \
  -v /home/app/mongo-data:/data/db \
  mongo:7

Explications :

  • -p 127.0.0.1:27017:27017 : MongoDB n'est accessible que depuis le serveur lui-même, pas depuis internet
  • --restart always : MongoDB redémarre automatiquement si le serveur reboot ou si le container plante
  • -v /home/app/mongo-data:/data/db : les données sont stockées sur le serveur hôte et non dans le container. Si le container est supprimé, les données sont préservées

Vérifier que MongoDB tourne :

docker ps | grep mongodb

2. Le problème de sécurité par défaut

Par défaut, MongoDB démarre sans authentification. N'importe qui ayant accès au serveur peut lire, modifier ou supprimer toutes les données sans mot de passe.

En 2017, des centaines de milliers de bases MongoDB exposées sur internet ont été effacées par des attaquants qui demandaient une rançon pour les restaurer. La plupart n'avaient aucune authentification.

Il faut activer l'authentification avant de mettre quoi que ce soit en production.

3. Créer les utilisateurs

Se connecter à MongoDB :

docker exec -it mongodb mongosh

Créer un utilisateur administrateur :

use admin
db.createUser({
  user: "adminUser",
  pwd: "MotDePasseFort",
  roles: ["root"]
})

Créer un utilisateur dédié à l'application avec des droits limités :

use mabase
db.createUser({
  user: "appUser",
  pwd: "AutreMotDePasse",
  roles: [{ role: "readWrite", db: "mabase" }]
})
exit

Il est important de créer deux utilisateurs distincts :

  • L'administrateur a tous les droits mais ne doit être utilisé que pour les opérations de maintenance
  • L'utilisateur applicatif a uniquement les droits de lecture et écriture sur sa base de données

4. Activer l'authentification

Recrée le container avec l'option --auth :

docker stop mongodb
docker rm mongodb
docker run -d \
  --name mongodb \
  -p 127.0.0.1:27017:27017 \
  --restart always \
  -v /home/app/mongo-data:/data/db \
  mongo:7 --auth

Les données sont préservées grâce au volume. Seul le container est recréé.

Vérifier que l'authentification fonctionne :

docker exec -it mongodb mongosh -u adminUser -p "MotDePasseFort" --authenticationDatabase admin

5. Connecter l'application à MongoDB

Dans le fichier .env de l'application, mets à jour l'URI de connexion :

MONGO_URI=mongodb://appUser:AutreMotDePasse@MONGO_IP:27017/mabase?authSource=mabase

Pour trouver l'IP du container MongoDB :

docker inspect mongodb | grep IPAddress

Note : cette IP peut changer si le container est recréé. Pour une configuration plus stable, utilise un réseau Docker dédié.

6. Créer un réseau Docker dédié

Plutôt que d'utiliser l'IP du container qui peut changer, crée un réseau Docker pour que les containers communiquent par leur nom :

docker network create app-network

Recrée les containers en les attachant à ce réseau :

docker run -d \
  --name mongodb \
  --network app-network \
  -p 127.0.0.1:27017:27017 \
  --restart always \
  -v /home/app/mongo-data:/data/db \
  mongo:7 --auth

docker run -d \
  --name mon-backend \
  --network app-network \
  --env-file /home/app/.env \
  -p 8000:8000 \
  --restart always \
  mon-backend-image

Maintenant dans le .env du backend, utilise le nom du container MongoDB au lieu de son IP :

MONGO_URI=mongodb://appUser:AutreMotDePasse@mongodb:27017/mabase?authSource=mabase

7. Sauvegarder MongoDB automatiquement

Une base de données non sauvegardée est une base de données perdue. Voici un script de sauvegarde automatique.

Créer le dossier de sauvegarde :

mkdir -p /home/app/backups/mongodb

Créer le script :

sudo nano /home/app/backup-mongo.sh
#!/bin/bash
DATE=$(date +%Y-%m-%d_%H-%M)
BACKUP_DIR="/home/app/backups/mongodb"

docker exec mongodb mongodump \
  -u appUser \
  -p AutreMotDePasse \
  --authenticationDatabase mabase \
  --db mabase \
  --out /tmp/backup-$DATE

docker cp mongodb:/tmp/backup-$DATE $BACKUP_DIR/

find $BACKUP_DIR -type d -mtime +7 -exec rm -rf {} +

echo "Sauvegarde terminee : $DATE"
sudo chmod +x /home/app/backup-mongo.sh

Tester le script :

sudo /home/app/backup-mongo.sh

Automatiser avec cron, chaque nuit à 2h :

sudo crontab -e

0 2 * * * /home/app/backup-mongo.sh >> /var/log/backup-mongo.log 2>&1

8. Restaurer une sauvegarde

En cas de problème, voici comment restaurer une sauvegarde :

docker cp /home/app/backups/mongodb/backup-2026-05-13_02-00 mongodb:/tmp/restore
docker exec mongodb mongorestore \
  -u adminUser \
  -p MotDePasseFort \
  --authenticationDatabase admin \
  --db mabase \
  /tmp/restore/mabase

9. Migrer des données depuis une autre machine

Pour transférer une base de données d'une machine locale vers le serveur de production :

Sur la machine locale, exporte la base :

mongodump --uri="mongodb://localhost:27017" --db=mabase --out=./backup

Transfère le backup sur le serveur :

scp -r ./backup user@IP_SERVEUR:/home/app/

Sur le serveur, importe dans le container MongoDB :

docker cp /home/app/backup/mabase mongodb:/tmp/restore
docker exec mongodb mongorestore \
  -u adminUser \
  -p MotDePasseFort \
  --authenticationDatabase admin \
  --db mabase \
  /tmp/restore

Conclusion

MongoDB bien configuré est une base solide pour n'importe quelle application en production. Les trois points essentiels sont l'authentification obligatoire, l'accès restreint au localhost et les sauvegardes automatiques régulières.

Ne jamais exposer MongoDB directement sur internet et ne jamais laisser l'authentification désactivée en production.

devsecops
Partager cet article

Commentaires (0)

Sois le premier à commenter !

Articles similaires