MongoDB

MongoDB auf Windows mit WSL Ubuntu installieren

  • dani

dani

4 min read

In diesem Artikel werden wir die Datenbank MongoDB 6 lokal unter Windows mit einem WSL Ubuntu Subsystem installieren. MongoDB ist eine dokumentenbasierte Datenbank, die oft auch als NoSQL-Datenbank bezeichnet wird.

Wenn du nicht weißt, was WSL ist und erfahren möchtest, wie du es einrichten kannst, lese meinen vorherigen Artikel:

Linux mit WSL auf Windows installieren
Installation einer Linux-Distribution (z. B. Ubuntu) auf einem Windows-Computer mit Windows Subsystems for Linux (WSL).

Die offizielle WSL-Dokumentation enthält eine Anleitung zur Installation von MongoDB, bezieht sich aber auf MongoDB 5. Wir werden stattdessen mit MongoDB 6 fortfahren.

Installation von MongoDB 6

Öffne zunächst ein neues Terminal Fenster und rufe den von der MongoDB-Paketverwaltung verwendeten öffentlichen Schlüssel ab:

wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -

Erstelle eine Listendatei für MongoDB:

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

Ja, die Leerzeichen in der URL zwischen den Anführungszeichen sind in Ordnung. Daraufhin sollte die Datei /etc/apt/sources.list.d/mongodb-org-6.0.list existieren und wenn sie korrekt eingerichtet ist, können wir die lokale Paketdatenbank von Aptitude neu laden:

sudo apt-get update

Jetzt sollte das MongoDB-Repository zusammen mit den standardmäßigen Canonical Repositories aufgelistet werden:

...
Get:5 https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 Release [4412 B]
...

Installiere die MongoDB-Pakete aus dem Repository:

sudo apt-get install -y mongodb-org

Nach Beendigung des Befehls verfiziere die Installation und die Versionsnummer:

mongod --version

Die Ausgabe sollte in etwa so aussehen wie folgt:

daniel@DESKTOP:~$ mongod --version
db version v6.0.2
Build Info: {
    "version": "6.0.2",
    "gitVersion": "94fb7dfc8b974f1f5343e7ea394d0d9deedba50e",
    "openSSLVersion": "OpenSSL 1.1.1f  31 Mar 2020",
    "modules": [],
    "allocator": "tcmalloc",
    "environment": {
        "distmod": "ubuntu2004",
        "distarch": "x86_64",
        "target_arch": "x86_64"
    }
}

Lege ein neues Verzeichnis zum Speichern der Daten an:

mkdir -p ~/data/db

Starte die MongoDB-Instanz:

sudo mongod --dbpath ~/data/db

Beachte, dass dadurch die aktuelle Shell blockiert wird, bis MongoDB mit der Tastenkombination STRG + C oder der Eingabe von exit beendet wird. Normalerweise soll die Datenbank im Hintergrund laufen. Ein Nachteil von WSL ist, dass systemd nicht verfügbar ist. Wir müssen also ein Init Skript einrichten.

Init Skript erstellen

Um ein Init Skript für die Ausführung von MongoDB als Dienst einzurichten, verwenden wir das Skript aus dem MongoDB GitHub Repository. Wir laden das Skript herunter und speichern es in /etc/init.d/:

curl https://raw.githubusercontent.com/mongodb/mongo/master/debian/init.d | sudo tee /etc/init.d/mongodb >/dev/null

Mache das Skript ausführbar durch Setzen des Berechtigungsflags:

sudo chmod +x /etc/init.d/mongodb

Nun kannst du MongoDB mit folgenden Befehlen starten und stoppen:

  • sudo service mongodb status um den Status deiner Datenbank zu checken. Du solltest keinen Fehler als Antwort erhalten wenn deine MongoDB Datenbank läuft.
  • sudo service mongodb start zum Starten der MongoDB Datenbank. Du solltest die Antwort * Starting database mongod [ OK ] sehen, wenn die Datenbank erfolgreich gestartet wurde.
  • sudo service mongodb stop zum Stoppen der MongoDB Datenbank. Du solltest die Antwort * Stopping database mongod [ OK ]sehen, wenn die Datenbank erfolgreich gestoppt wurde.

Beachte, dass der Dienst nicht das zuvor erstellte Verzeichnis ~/data/db zum Speichern der Daten verwendet, da wir das Laufzeitargument nicht mehr übergeben. Um das Verzeichnis weiterhin zu verwenden, musst du die Konfigurationsdatei in /etc/mongod.conf anpassen. Das Standardverzeichnis für die Speicherung ist /var/lib/mongodb/.

Zur Datenbanken verbinden und sie testen

Prüfe, ob die Datenbank läuft, indem du dich mit der Datenbank verbindest:

mongosh

Wenn MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017 zurückgegeben wird, läuft MongoDB nicht wie erwartet. Ansonsten wirst du verbunden und kannst mit den folgenden Befehlen einen neuen Benutzer mytestuser für die Datenbank mytestdatabase erstellen:

use mytestdatabase
db.createUser(
	{
		user: "mytestuser",
		pwd: passwordPrompt(), // or cleartext password
		roles: [ { role: "readWrite", db: "test" },
             { role: "read", db: "reporting" } ]
	}
)

Du wirst in Folge einmalig nach dem Passwort gefragt und der Benutzer wird mit dem gewählten Passwort angelegt. Gebe anschließend exit ein, um die MongoDB Shell zu verlassen. Wir melden uns mit dem soeben erstellten Benutzer an:

mongosh -u mytestuser -p --authenticationDatabase mytestdatabase

Daraufhin wirst du nach dem Passwort gefragt, das du vor einer Minute eingegeben hast. Gib das Passwort ein, um dich mit der Datenbank zu verbinden. Als Nächstes verwenden wir wieder unsere Datenbank mytestdatabase und verwenden ein Beispiel aus der MongoDB Dokumentation für Insertion, um eine neue Collection zu erstellen und Daten einzufügen. Beachte, dass es keine Tabellen wie in SQL-Datenbanken gibt, so dass du keine Tabelle mit definiertem Schema erstellen musst. Als Beispiel fügen wir einen Film in eine Film-Tabelle ein:

db.movies.insertOne(
  {
    title: "The Favourite",
    genres: [ "Drama", "History" ],
    runtime: 121,
    rated: "R",
    year: 2018,
    directors: [ "Yorgos Lanthimos" ],
    cast: [ "Olivia Colman", "Emma Stone", "Rachel Weisz" ],
    type: "movie"
  }
)

Die Datenbank antwortet in etwa mit folgender Ausgabe:

{
  acknowledged: true,
  insertedId: ObjectId("63409e40c9164c75dedfb6d0")
}

Das sagt uns, dass das Objekt erstellt wurde und gibt uns den Objektbezeichner.
Mit dem Befehl show collections kannst du sehen, dass die Collection movies erstellt wurde:

mytestdatabase> show collections
movies

Wir lesen nun den speziellen Film, den wir in die Sammlung eingefügt haben, wieder aus:

mytestdatabase> db.movies.find( { title: "The Favourite" } )
[
  {
    _id: ObjectId("63409e40c9164c75dedfb6d0"),
    title: 'The Favourite',
    genres: [ 'Drama', 'History' ],
    runtime: 121,
    rated: 'R',
    year: 2018,
    directors: [ 'Yorgos Lanthimos' ],
    cast: [ 'Olivia Colman', 'Emma Stone', 'Rachel Weisz' ],
    type: 'movie'
  }
]

Das war's! Unsere MongoDB funktioniert und kann nun für die Entwicklung genutzt werden.