Prérequis
- Un serveur Ubuntu 22.04/24.04 ou Debian 11/12
- Accès root ou sudo
- Minimum 2 Go de RAM
MongoDB est une base de données NoSQL orientée documents. Idéale pour les applications modernes nécessitant flexibilité et scalabilité, notamment avec Node.js.
1. Installer MongoDB
# Importer la clé GPG
curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | gpg --dearmor -o /usr/share/keyrings/mongodb-server-8.0.gpg
# Ajouter le dépôt (Ubuntu 22.04)
echo "deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/8.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-8.0.list
# Installer MongoDB
apt update
apt install -y mongodb-org
# Démarrer et activer
systemctl start mongod
systemctl enable mongod
# Vérifier
systemctl status mongod
mongod --version# Créer le fichier de dépôt MongoDB
cat > /etc/yum.repos.d/mongodb-org-8.0.repo << 'EOF'
[mongodb-org-8.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/9/mongodb-org/8.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://pgp.mongodb.com/server-8.0.asc
EOF
# Installer MongoDB
dnf install -y mongodb-org
# Démarrer et activer
systemctl start mongod
systemctl enable mongod
# Vérifier
systemctl status mongod
mongod --version2. Se connecter à MongoDB
# Se connecter au shell MongoDB
mongosh
# Ou avec une URI
mongosh "mongodb://localhost:27017"3. Créer un utilisateur administrateur
// Se connecter à la base admin
use admin
// Créer un administrateur
db.createUser({
user: "admin",
pwd: "mot_de_passe_admin_securise",
roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" },
"clusterAdmin"
]
})
// Quitter
exit4. Activer l'authentification
# Éditer la configuration
nano /etc/mongod.conf
# Ajouter/modifier dans la section security :
security:
authorization: enabled
# Redémarrer MongoDB
systemctl restart mongod# Maintenant il faut s'authentifier
mongosh -u admin -p --authenticationDatabase admin
# Ou avec l'URI complète
mongosh "mongodb://admin:mot_de_passe@localhost:27017/admin"5. Créer une base et un utilisateur applicatif
// Se connecter en admin
use admin
db.auth("admin", "mot_de_passe_admin")
// Créer la base de données (créée automatiquement à l'insertion)
use mon_application
// Créer un utilisateur pour cette base
db.createUser({
user: "app_user",
pwd: "mot_de_passe_app",
roles: [
{ role: "readWrite", db: "mon_application" }
]
})
// Tester en insérant un document
db.utilisateurs.insertOne({
nom: "Test",
email: "test@example.com",
date_creation: new Date()
})
// Vérifier
db.utilisateurs.find()6. Commandes MongoDB utiles
// Lister les bases
show dbs
// Utiliser une base
use ma_base
// Lister les collections
show collections
// Insérer un document
db.ma_collection.insertOne({ nom: "exemple" })
// Trouver des documents
db.ma_collection.find()
db.ma_collection.find({ nom: "exemple" })
// Mettre à jour
db.ma_collection.updateOne(
{ nom: "exemple" },
{ $set: { actif: true } }
)
// Supprimer
db.ma_collection.deleteOne({ nom: "exemple" })
// Compter
db.ma_collection.countDocuments()
// Supprimer une collection
db.ma_collection.drop()
// Supprimer une base
db.dropDatabase()7. Autoriser les connexions distantes
# Éditer mongod.conf
nano /etc/mongod.conf
# Modifier la section net :
net:
port: 27017
bindIp: 0.0.0.0 # Écouter sur toutes les interfaces
# Redémarrer
systemctl restart mongod
# Ouvrir le port (limitez à des IP spécifiques !)
ufw allow from 192.168.1.0/24 to any port 27017# Ouvrir le port (limitez à des IP spécifiques !)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="27017" accept'
firewall-cmd --reloadSécurité critique
N'exposez JAMAIS MongoDB sur Internet sans authentification ! Les bases MongoDB non sécurisées sont régulièrement piratées et leurs données supprimées.
8. Backup et Restore
# Exporter une base
mongodump --db mon_application --out /backup/
# Exporter avec authentification
mongodump --db mon_application -u admin -p mot_de_passe --authenticationDatabase admin --out /backup/
# Exporter en archive compressée
mongodump --db mon_application --archive=/backup/mon_app.archive --gzip
# Restaurer
mongorestore --db mon_application /backup/mon_application/
# Restaurer depuis archive
mongorestore --archive=/backup/mon_app.archive --gzip9. Script de sauvegarde automatique
cat > /opt/mongo_backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/var/backups/mongodb"
DATE=$(date +%Y-%m-%d)
KEEP_DAYS=7
mkdir -p $BACKUP_DIR
# Backup de toutes les bases
mongodump --archive=$BACKUP_DIR/mongodb-$DATE.archive --gzip
# Supprimer les vieux backups
find $BACKUP_DIR -type f -mtime +$KEEP_DAYS -delete
echo "Backup completed: $BACKUP_DIR/mongodb-$DATE.archive"
EOF
chmod +x /opt/mongo_backup.sh
# Ajouter au cron
(crontab -l 2>/dev/null; echo "0 3 * * * /opt/mongo_backup.sh") | crontab -10. Connexion depuis Node.js
// npm install mongoose
const mongoose = require('mongoose');
// URI de connexion
const uri = 'mongodb://app_user:mot_de_passe@localhost:27017/mon_application';
mongoose.connect(uri)
.then(() => console.log('Connecté à MongoDB'))
.catch(err => console.error('Erreur de connexion:', err));
// Définir un schéma
const userSchema = new mongoose.Schema({
nom: String,
email: String,
date_creation: { type: Date, default: Date.now }
});
const User = mongoose.model('User', userSchema);MongoDB installé !
Votre base de données MongoDB est prête. Elle est particulièrement adaptée aux applications JavaScript/Node.js et aux données non structurées.