MongoDB ist eine dokumentenorientierte Datenbank, die häufig für APIs, Node.js-Anwendungen und Analysen eingesetzt wird. Ubuntu liefert sie nicht in den eigenen Paketquellen mit, daher installieren Sie sie aus dem offiziellen MongoDB-Repository. Diese Anleitung richtet sie auf einem VPS Linux Infrawire ein, aktiviert die Authentifizierung und beschränkt den Zugriff.
📋 Voraussetzungen
- Ein VPS mit Ubuntu 24.04 (noble) auf x86_64 oder ARM64 und SSH-Root-Zugang (IP und Root-Passwort stehen in Ihrem Kundenbereich)
- Eine CPU mit AVX-Befehlssatz (ab MongoDB 5.0 erforderlich):
grep -c avx /proc/cpuinfomuss eine Zahl größer 0 liefern - Empfohlen sind mindestens 2 GB RAM
1. Offizielles Repository hinzufügen
Importieren Sie den Signaturschlüssel und tragen Sie das Repository für Ubuntu 24.04 ein.
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. Dienst installieren und starten
Bashapt update apt install -y mongodb-org systemctl enable --now mongod systemctl status mongod --no-pager
Das Metapaket mongodb-org installiert den Server (mongod), die Shell (mongosh) und die Werkzeuge. Die Daten liegen in /var/lib/mongodb, die Logs in /var/log/mongodb/mongod.log.
3. Administrator anlegen
Die Authentifizierung ist noch aus, die lokale Shell verbindet sich daher ohne Zugangsdaten. Legen Sie den ersten Administrator in der Datenbank admin an; passwordPrompt() fragt das Passwort ab, sodass es nie in Ihrer Shell-Historie landet.
Bashmongosh
JavaScript1use admin 2db.createUser({ 3 user: 'admin', 4 pwd: passwordPrompt(), 5 roles: [ { role: 'userAdminAnyDatabase', db: 'admin' }, 'readWriteAnyDatabase' ] 6})
4. Authentifizierung aktivieren
Bearbeiten Sie /etc/mongod.conf und fügen Sie den Block security hinzu (oder entkommentieren Sie ihn):
YAMLsecurity: authorization: enabled
Bashsystemctl restart mongod
Ab jetzt muss sich jede Verbindung authentifizieren.
5. Anwendungsbenutzer anlegen
Ihre Anwendung sollte niemals das Administratorkonto verwenden. Geben Sie ihr einen Benutzer, der auf die eigene Datenbank beschränkt ist.
Bashmongosh -u admin -p --authenticationDatabase admin
JavaScript1use appdb 2db.createUser({ 3 user: 'appuser', 4 pwd: passwordPrompt(), 5 roles: [ { role: 'readWrite', db: 'appdb' } ] 6})
Die passende Verbindungszeichenfolge lautet mongodb://appuser:PASSWORD@127.0.0.1:27017/appdb?authSource=appdb.
6. Netzwerkzugriff und Firewall
Standardmäßig lauscht MongoDB nur auf 127.0.0.1. Das ist die sicherste Einstellung, wenn die Anwendung auf demselben VPS läuft. Um einen weiteren Server zuzulassen, tragen Sie die Adresse des VPS in /etc/mongod.conf ein:
YAMLnet: port: 27017 bindIp: 127.0.0.1,VPS_IP
Erlauben Sie in der Firewall anschließend nur den Anwendungsserver und öffnen Sie Port 27017 niemals für das gesamte Internet:
Bashufw allow OpenSSH ufw allow from APP_SERVER_IP to any port 27017 proto tcp ufw enable systemctl restart mongod
✅ Installation prüfen
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
Der letzte Befehl zeigt, auf welcher Adresse MongoDB lauscht. Eine nicht authentifizierte Abfrage wie db.getUsers() muss jetzt mit einem Autorisierungsfehler scheitern.
🔧 Fehlerbehebung
mongod startet nicht (Illegal instruction oder Exit-Code 132) : Die virtuelle CPU stellt AVX nicht bereit. Prüfen Sie grep avx /proc/cpuinfo; ohne AVX läuft MongoDB 8.0 auf diesem System nicht.
Start schlägt mit Berechtigungsfehlern fehl : Korrigieren Sie den Besitzer der Daten- und Socket-Dateien mit chown -R mongodb:mongodb /var/lib/mongodb /var/log/mongodb, entfernen Sie eine veraltete /tmp/mongodb-27017.sock und starten Sie neu. Details stehen in journalctl -u mongod.
Authentication failed : Der Benutzer wurde in einer bestimmten Datenbank angelegt. Geben Sie die richtige mit --authenticationDatabase an (oder authSource in der URI).
Remote-Verbindung läuft in ein Timeout : Prüfen Sie bindIp, die Regeln in ufw status und ob die Client-IP mit der freigegebenen übereinstimmt.
🎉 MongoDB 8.0 ist installiert, durch Authentifizierung geschützt und bereit für Ihre Anwendung!