
Wie Drupal Multisite unter der Haube funktioniert
Ein Drupal-Multisite ist eine Installation, die es uns ermöglicht, eine Codebasis zu nutzen, um mehrere Websites zu betreiben. In diesem Beitrag werde ich ausführlich erklären, wie Drupal-Multisites funktionieren und welche Ansätze zur Einrichtung einer Multisite-Installation möglich sind. Ich werde auch einige der Einstellungen erläutern, die für eine Multisite wichtig sein können und die nicht anwendbar sind, wenn wir nur eine einzige Website auf Drupal aufbauen.
Die Grundlagen eines standardmäßigen Drupal-Multisites
Eine Drupal-Website besteht aus einigen wichtigen Dingen:
- Drupal-Kern
- Contrib- und benutzerdefinierte Module
- Theme
- Datenbank
- Konfiguration
Wenn ein Browseranfrage von Drupal bearbeitet wird, zählt das Bootsstrapping der Datenbank und das Laden der Konfiguration zu den ersten Schritten. Aus der Datenbank und der Konfiguration weiß das System dann:
- welche der verfügbaren Module und Themes aktiviert sind,
- wie alles eingerichtet ist:
- wo sich öffentliche und private Dateiordner befinden,
- welche Blöcke wo sind,
- welche Inhalte verfügbar sind,
- was sich auf der Startseite befindet,
- welche Menüs in welchen Regionen sind, welche Links in welchen Menüs sind,
- und fast alles andere zur Konfiguration der Website.
Um eine Verbindung zur Datenbank herzustellen, liest Drupal die Verbindungsinformationen, die in der Datei settings.php gespeichert sind (die sich normalerweise im Ordner /sites/default befindet).
Beachten Sie den default-Ordner. Er wird als standard bezeichnet, weil er ein Fallback-Ordner ist, wenn keine anderen Ordner gefunden werden. In einer einzelnen Drupal-Installation werden normalerweise keine anderen Ordner eingerichtet und die meisten Websites werden aus dem Default-Ordner ausgeführt.
In einer Multisite-Installation richten wir jedoch separate Ordner für separate Websites ein.
Zum Beispiel:
- /sites/example-one.com
- /sites/example-two.com
Wenn wir solche Ordner erstellen, wird eine neue Anfrage die Basisdomain (Basis-URL, wie Drupal sie nennt) überprüfen und versuchen, sie dem korrekten Ordner zuzuordnen. Die Reihenfolge ist wie folgt:
Wenn eine Anfrage mit einer Basis-URL von www.example-one.com eingeht, prüft Drupal, ob es gibt:
- Einen Ordner namens /sites/www.example-one.com und sucht dort nach der settings.php.
- Wenn nicht, überprüft Drupal einen höhergeordneten Domain-Ordner - /sites/example-one.com in diesem Fall.
- Findet es dort keine settings.php, wechselt es zu /sites/default.
Wir haben einen Multisite erreicht - viele Websites auf einer Codebasis
Wenn wir 2 Ordner für 2 verschiedene Domains haben, können wir 2 separate settings.php-Dateien haben, die Drupal mit zwei separaten Datenbanken verbinden, die separate Konfigurationen laden und verschiedene aktivierte Module und Themes nutzen.
Im Wesentlichen enden wir mit 2 verschiedenen Websites, die ihre eigenen Datenbanken, Inhalte, Dateien und Konfigurationen haben, obwohl sie auf einem Drupal-Code sitzen.
Wenn wir zusätzliche Ordner hinzufügen, erhalten wir zusätzliche Websites, ohne den Code duplizieren zu müssen.
Drupal kann auf diese Weise Hunderte von Websites aus einer einzigen Installation ausführen.
Die Datei sites.php hilft, Domains für Ordner zuzuordnen
Um bei der Zuordnung von Basis-URLs zu Ordnern zu helfen, bietet Drupal eine Datei namens sites.php an, die verwendet werden kann, um Basis-URLs den richtigen Ordnern zuzuordnen.
Im /sites/-Ordner wird uns eine Datei angeboten, die example.sites.php heißt. Ändern Sie den Namen zu sites.php und Drupal wird sie verwenden. Die Konfiguration der Zuordnungen ist recht einfach:
$sites['an-old-domain-to-map.coom'] = 'example-one.com;
Diese Datei ermöglicht es uns, mehrere Domains einer Website zuzuordnen, wenn wir das benötigen, und hilft erheblich bei der Entwicklung, da Entwicklungsumgebungen normalerweise andere URLs als Produktionsumgebungen haben.
$sites['localhost.example'] = 'example.com';
Einige Entwicklerteams nutzen diese Funktion auch, um den sites-Ordner übersichtlicher zu halten, wenn es Hunderte von Websites mit verschiedenen Domains gibt, manchmal in Fremdsprachen. Das Entwicklerteam kann kurze, klare Ordnernamen haben.
$sites['nom-de-domaine-de-marque-tres-long.fr
'] = 'brand-x-fr;
Das ist auch manchmal nützlich, wenn sich die Domain für eine der Websites ändert.
Welche Website kann welche Module nutzen
Typischerweise kennen wir eine Situation, in der
- alle Module im Module-Verzeichnis abgelegt sind (oder in sites/all/modules in Drupal 7 und früheren Versionen),
- alle Themes im Themenverzeichnis abgelegt sind (oder in sites/all/themes in Drupal 7 und früheren Versionen).
Wenn wir eine Website im System haben, ist keine weitere Konfiguration notwendig. Wir fügen nur die Module hinzu, die wir benötigen.
In einer Multisite-Installation kann es jedoch notwendig sein zu spezifizieren, welche Websites welche Module oder Themes verwenden können. In einem großen System mit Hunderten von Websites und Administratoren kann es entscheidend sein, solche Einschränkungen zu haben, um sicherzustellen, dass nur Funktionen auf jeder Website erlaubt sind, die gut zusammenarbeiten.
Wir können dies auf 2 Arten steuern:
1. Über Installationsprofile
Jede Website auf Drupal basiert auf einem Installationsprofil. Typischerweise ist dies das standard oder das minimal-Profil, das von Drupal out-of-the-box angeboten wird. Sie wählen zwischen diesen, wenn Sie Drupal installieren, und Sie können sie im /core/profiles-Ordner sehen. Keines dieser beiden Profile hat Module oder Themes, aber ein Profil kann diese bereitstellen.
Drupal bietet zum Beispiel ein demo_umami-Profil an, das ein Demo-Profil ist und sowohl ein demo_umami_content-Modul als auch ein umami-Theme enthält. Wenn Sie eine Standardinstallation durchführen, wird Ihnen zum Beispiel das umami-Theme im Admin-Panel nicht zur Verfügung stehen.
Wenn Sie steuern müssen, welche Websites Zugriff auf welche Themes oder Module haben, platzieren Sie diese in Ihren benutzerdefinierten Installationsprofilen. Nur die Websites, die auf einem bestimmten Installationsprofil installiert sind, können auf das zugreifen und verwenden, was es bereitstellt.
Cool ist, dass Profile Vererbung ermöglichen. Sie können beispielsweise ein Profil mit Drupal Commerce-Modulen erstellen und dann zwei zusätzliche Kinderprofile, die dann Zugriff auf die Drupal Commerce-Module haben.
Während wir Drupal-Dienstleistungen für unsere Kunden erbringen, haben wir verschiedene Szenarien mit unterschiedlichen Granularitätsstufen umgesetzt. Sie könnten sogar ein Kinderprofil für jede Website erstellen, um eine sehr granulare Kontrolle zu ermöglichen. Dies könnte jedoch etwas übertrieben sein.
2. Pro-Website-Module über den Website-Ordner
Module und Themes können auch in den Website-Ordner hinzugefügt werden. In unserem Beispiel könnten wir sie unterbringen in:
- sites/example-one.com/modules
- sites/example-one.com/themes
Module und Themes, die in diesen Verzeichnissen platziert werden, stehen nur für die Website example-one.com zur Verfügung.
Als Faustregel sollten Sie wahrscheinlich vermeiden, hier zu viele Module zu haben, da es wahrscheinlich gegen das Konzept eines Multisites geht, für jede Website einen völlig unterschiedlichen Code zu haben. Doch manchmal besteht die Notwendigkeit, einige webseitenbezogene Anpassungen vorzunehmen oder für jede Website ein Subtheme zu erstellen, das einige Dinge in einem gemeinsamen Basistheme überschreibt.
Einmal Code aktualisieren, 100 Mal Update ausführen
Eine der großartigen Eigenschaften eines Multisites ist die reduzierte Wartung. Wenn Sie 100 Websites in einem System haben und eine neue Version von Drupal herauskommt, müssen Sie den Code nur einmal aktualisieren statt 100 Mal.
Bedenken Sie, dass die Einstellungen und Datenbanken für alle 100 Websites getrennt sind. Sie müssen das update.php-Skript für jede einzeln ausführen!
Zusammenfassung
Oben habe ich im Detail erklärt, wie Drupal Multisite unter der Haube funktioniert. Im Wesentlichen ist es eine sehr einfache, aber dennoch leistungsstarke Funktion von Drupal, die es Unternehmen ermöglicht, den Wartungsaufwand und die technische Verschuldung zu reduzieren und die Wartung einfacher zu gestalten, wenn sie viele Websites pflegen müssen.