MongoDB est une base orientée documents très utilisée pour les API, les applications Node.js et l'analytique. Ubuntu ne la fournit pas dans ses dépôts : on l'installe depuis le dépôt officiel de MongoDB. Ce guide la met en place sur un VPS Linux Infrawire, active l'authentification et limite les accès.
📋 Prérequis
- Un VPS sous Ubuntu 24.04 (noble) en x86_64 ou ARM64, avec accès SSH root (IP et mot de passe root dans votre espace client)
- Un processeur exposant le jeu d'instructions AVX (exigé depuis MongoDB 5.0) :
grep -c avx /proc/cpuinfodoit renvoyer un nombre supérieur à 0 - Au moins 2 Go de RAM recommandés
1. Ajouter le dépôt officiel
Importez la clé de signature et déclarez le dépôt pour Ubuntu 24.04.
Bashapt update && apt install -y curl gnupg curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | gpg -o /usr/share/keyrings/mongodb-server-8.0.gpg --dearmor echo 'deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-8.0.gpg ] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.0 multiverse' > /etc/apt/sources.list.d/mongodb-org-8.0.list
2. Installer et démarrer le service
Bashapt update apt install -y mongodb-org systemctl enable --now mongod systemctl status mongod --no-pager
Le méta-paquet mongodb-org installe le serveur (mongod), le shell (mongosh) et les outils. Les données sont dans /var/lib/mongodb, les journaux dans /var/log/mongodb/mongod.log.
3. Créer l'administrateur
L'authentification est encore désactivée : le shell local se connecte sans identifiants. Créez le premier administrateur dans la base admin ; passwordPrompt() demande le mot de passe pour qu'il n'apparaisse jamais dans l'historique du shell.
Bashmongosh
JavaScript1use admin 2db.createUser({ 3 user: 'admin', 4 pwd: passwordPrompt(), 5 roles: [ { role: 'userAdminAnyDatabase', db: 'admin' }, 'readWriteAnyDatabase' ] 6})
4. Activer l'authentification
Modifiez /etc/mongod.conf et ajoutez (ou décommentez) le bloc security :
YAMLsecurity: authorization: enabled
Bashsystemctl restart mongod
Désormais, toute connexion doit s'authentifier.
5. Créer un utilisateur applicatif
Votre application ne doit jamais utiliser le compte administrateur. Donnez-lui un utilisateur limité à sa propre base.
Bashmongosh -u admin -p --authenticationDatabase admin
JavaScript1use appdb 2db.createUser({ 3 user: 'appuser', 4 pwd: passwordPrompt(), 5 roles: [ { role: 'readWrite', db: 'appdb' } ] 6})
La chaîne de connexion correspondante est mongodb://appuser:PASSWORD@127.0.0.1:27017/appdb?authSource=appdb.
6. Accès réseau et pare-feu
Par défaut, MongoDB écoute uniquement sur 127.0.0.1, ce qui est le réglage le plus sûr quand l'application tourne sur le même VPS. Pour autoriser un autre serveur, ajoutez l'adresse du VPS dans /etc/mongod.conf :
YAMLnet: port: 27017 bindIp: 127.0.0.1,VPS_IP
Autorisez ensuite uniquement le serveur applicatif dans le pare-feu, et n'ouvrez jamais le port 27017 à tout Internet :
Bashufw allow OpenSSH ufw allow from APP_SERVER_IP to any port 27017 proto tcp ufw enable systemctl restart mongod
✅ Vérifier l'installation
Bashmongod --version mongosh --eval 'db.runCommand({ ping: 1 })' mongosh -u appuser -p --authenticationDatabase appdb appdb --eval 'db.test.insertOne({ ok: true })' ss -ltnp | grep 27017
La dernière commande indique l'adresse sur laquelle MongoDB écoute. Une requête non authentifiée comme db.getUsers() doit maintenant échouer avec une erreur d'autorisation.
🔧 Dépannage
mongod ne démarre pas (Illegal instruction ou code de sortie 132) : le processeur virtuel n'expose pas AVX. Vérifiez avec grep avx /proc/cpuinfo ; sans AVX, MongoDB 8.0 ne peut pas fonctionner sur cette machine.
Échec du démarrage avec des erreurs de permissions : corrigez le propriétaire des fichiers de données et du socket avec chown -R mongodb:mongodb /var/lib/mongodb /var/log/mongodb, supprimez un éventuel /tmp/mongodb-27017.sock résiduel, puis redémarrez. Les détails sont dans journalctl -u mongod.
Authentication failed : l'utilisateur a été créé dans une base précise. Indiquez la bonne avec --authenticationDatabase (ou authSource dans l'URI).
La connexion distante expire : vérifiez bindIp, les règles de ufw status et que l'IP du client correspond à celle que vous avez autorisée.
🎉 MongoDB 8.0 est installé, protégé par authentification et prêt pour votre application !