MongoDB einrichten
Diese Seite richtet sich an Datenbankadministratoren, die MongoDB für eine Exponential-Website vorbereiten. MongoDB wird über
einen Adapter unterstützt, expMongoDB (lib/ezdb/classes/expmongodb.php), der die SQL-förmigen Aufrufe des Kernels in
MongoDB-Operationen übersetzt; er kam mit 6.0.14. Diese Seite beantwortet: was der Adapter braucht, wie Sie den Benutzer
anlegen, wie die Einstellungen aussehen, wie Sie installieren und welche Indizes Sie anlegen. Lesen Sie
MongoDB: Grenzen und Betrieb, bevor Sie MongoDB für die Produktion wählen. Quelle:
9.5 MongoDB.
Inhalt
- Anforderungen
- Den Benutzer anlegen
- Die Einstellungen
- Installieren
- Die Indizes anlegen
- Den Suchindex aufbauen
- Checkliste
Anforderungen
| Minimum | Getestet | |
|---|---|---|
| PHP | 8.2 | 8.5 |
| MongoDB-Server | 6.0 (der Assistent prüft 4.0) | 8.3 |
PHP-Erweiterung mongodb | 1.18 | 2.3.3 |
Composer-Bibliothek mongodb/mongodb | von Ihnen installiert (composer.json schlägt sie nur vor) | ^1.21 || ^2.0 in der CI |
Ohne die Bibliothek lautet der Fehler Class "MongoDB\Client" not found
(PHP-Erweiterungen je Engine).
Den Benutzer anlegen
Der Adapter verbindet sich mit der URI mongodb://<user>:<password>@<server>:<port>/<database>. MongoDB verwendet die
Datenbank im Pfad der URI als Authentifizierungsdatenbank, wenn kein authSource angegeben ist, legen Sie den Benutzer also
in der Datenbank der Website an:
mongosh --eval '
db.getSiblingDB("exponential").createUser({
user: "exponential",
pwd: passwordPrompt(),
roles: [ { role: "readWrite", db: "exponential" }, { role: "dbAdmin", db: "exponential" } ]
})'passwordPrompt() fragt nach dem Passwort, statt es in die Shell-Historie zu schreiben. readWrite deckt die Arbeit der
Website ab; dbAdmin lässt den Schema-Handler (expMongoSchema) Collections und Indizes anlegen. Die Datenbank selbst
entsteht durch den ersten Schreibzugriff; es gibt kein CREATE DATABASE.
Der Benutzer ist erforderlich, auch auf einem Testserver ohne Zugriffskontrolle: Der Adapter schreibt immer
<user>:<password>@ in die URI, und mit leerem User lehnt der Treiber sie ab mit "Failed to parse MongoDB URI: ...
'default' authentication mechanism requires a username".
Die Einstellungen
[DatabaseSettings]
DatabaseImplementation=mongodb
Server=localhost
# empty: 27017
Port=27017
User=exponential
Password=<the password>
Database=exponentialBenutzername und Passwort werden vom Adapter URL-kodiert, Sonderzeichen sind also sicher. Ein Client je Verbindungs-URI wird für die Lebensdauer des Prozesses behalten, ein Velocity-Worker verwendet seine Verbindungen also wieder.
Installieren
Auf MongoDB kann der Konfigurationsschritt des Einrichtungsassistenten ein bis drei Minuten dauern. Erhöhen Sie vorher
request_terminate_timeout von PHP-FPM, oder installieren Sie über die Konsole:
EXP_INSTALL_DB_PASSWORD='<the password>' php bin/php/console exp:install --apply --db=mongodb \
--db-host=127.0.0.1 --db-name=exponential --db-user=exponential --allow-root-user--db=mongo wird ebenfalls akzeptiert; der Kickstarter nimmt [database_choice] Type=mongodb.
Die Indizes anlegen
Die Abfragen des Kernels verlassen sich auf Indizes, die die Installation nicht anlegt. Ohne sie durchsuchen Teilbaumabfragen und URL-Alias-Suchen ganze Collections:
mongosh "mongodb://exponential@localhost:27017/exponential" --file bin/mongodb/create_indexes.jsmongosh fragt nach dem Passwort. Das Skript enthält 45 Aufrufe von createIndex auf den Collections für Inhalte, Baum,
URL-Aliase und andere, mehrere davon eindeutig (zum Beispiel ezcontentobject.id, ezcontentobject.remote_id,
ezcontentobject_tree.node_id). Führen Sie es nach einem Upgrade, das Collections hinzufügt, erneut aus; bestehende
Indizes lässt MongoDB, wie sie sind.
Den Suchindex aufbauen
Führen Sie die Cronjobs einmal aus, um den eingebauten Suchindex aufzubauen:
php runcronjobs.php --allow-root-userPlanen Sie sie dann ein wie auf jeder anderen Engine (Aufräumen: Cronjobs und Warteschlangentabellen).
Checkliste
- To do: PHP 8.2+, Erweiterung
mongodb1.18+, Bibliothekmongodb/mongodbin jedem PHP installiert, das die Website verwendet. - To do: MongoDB 6.0 oder neuer mit eingeschalteter Zugriffskontrolle.
- To do: Der Benutzer existiert in der Datenbank der Website, nur mit
readWriteunddbAdmin. - To do:
bin/mongodb/create_indexes.jswurde ausgeführt. - To do: Die Cronjobs liefen einmal und sind eingeplant.
- To do: Sicherungen mit
mongodumpsind eingeplant (Sicherungen je Engine).
Verwandte Seiten
- MongoDB: Grenzen und Betrieb
- MongoDB als Datenbank
- MongoDB für Hoster
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.