Zum Inhalt springen
Marketing Factory Digital GmbH
Kontakt
Logo Marketing Factory Digital GmbH
  • Agentur
    • Aktuelles
    • Über uns
    • Geschichte
  • Leistungen
    • Beratung, Analyse und Strategie
    • Programmierung und Entwicklung
      • Schnittstellen
      • PIM-/ERP-Anbindungen
      • Individualentwicklungen
      • Seamless CMS Integration
    • Hosting und Betreuung
      • Cloud-Strategien
      • Hosting Partner der Marketing Factory
    • Leistungen mit Dritten
  • Technologie
    • TYPO3
      • TYPO3 LTS Versionen im Überblick: v12, v13
    • Shopware
    • IT-Sicherheit
      • DDoS-Protection
      • Continuous Upgrading
      • Privacy First
    • Tech Stack
      • Bekenntnis zu Open Source
      • Technologieauswahl
      • PHP-Ökosystem
      • Containerisierung & Clustering
      • Content Delivery Networks
      • Suchtechnologien
  • Referenzen
    • Projekte
    • Kunden
      • Kundenliste
    • Screenshot der Homepage der neuen Maxion Wheels WebsiteNEU: Relaunch der Corporate Website von Maxion Wheels
  • Community
    • Community-Initiativen
  • Blog
  • Kontakt
  • Deutsch
  • English

Sie sind here:

  1. Blog
  2. Such mal im Container! – Solr zieht um
Eine Lupe liegt auf einer hellen Oberfläche neben einem Laptop. Die Lupe hat einen schwarzen Griff und eine runde Linse, die das Licht reflektiert.
  • Hosting
  • TYPO3
10.10.2025

Such mal im Container! – Solr zieht um


Zeige größere Version von: Das Bild zeigt eine Benutzeroberfläche eines Code-Repositorys mit Ordnerstrukturen und Dateien, die sich auf die Konfiguration von Apache Solr beziehen. Es sind Informationen über die zuletzt durchgeführten Commits und spezifische Aufgaben zu sehen.
Solr-Configset aus der TYPO3-Extension "solr" von dkd

Der Suchserver Apache Solr samt seiner Integration in TYPO3 gehört für uns seit jeher zum Technologie-Stack der Mehrzahl unserer Kundenprojekte. Solr bietet eine leistungsfähige phonetische Volltextsuche, die neben den redaktionellen Seiteninhalten in TYPO3 auch News und Glossareinträge sowie beliebige weitere Datensatztypen indizieren und durchsuchbar machen kann. Technisch besteht die Suche somit aus dem eigentlichen Suchserver, bei dem es sich um eine Java-Applikation rund um die Lucene-Bibliothek handelt sowie einer TYPO3-Extension auf Basis der PHP-Library Solarium, die mit dem Suchserver kommuniziert und Änderungen am Datenbestand in TYPO3 in diesem aktualisiert. Dadurch wird sichergestellt, dass die Suche immer auf dem aktuellen Stand ist. Die Architektur der Suche stellt manchen vor Herausforderungen, weil in Gesprächen oftmals nicht ganz klar ist, ob jemand mit “Solr” jetzt den Suchserver Apache Solr oder die TYPO3-Extension “solr” meint. Gerade in Bezug auf Versionsnummern ist das allerdings wichtig.

Für die Funktion von Apache Solr ist natürlich von ganz entscheidender Bedeutung, in welcher Sprache die Inhalte vorliegen. Hiervon hängen etliche Parameter ab, die Einfluss auf das Verhalten der späteren Suchfunktion haben. So verfügt Solr beispielsweise über eine automatische Wortstammbildung, d.h. es führt etwa Mehrzahlwörter wie “Bäume” auf die Einzahlform “Baum” zurück. Außerdem berücksichtigt es phonetische Ähnlichkeit - damit z.B. eine Suche nach “Stephan” auch Einträge mit “Stefan” findet. Das wird gelöst, indem man in Solr für jede Sprache mindestens einen sogenannten Core anlegt. Dieser verhält sich wie eine MySQL-Datenbank und hält die Daten in genau einer definierten Sprache, die jeweils ihre Regeln zur Phonetik sowie etwa eine Stoppwortliste mitbringt.

Wir gehen zusätzlich so vor, dass wir für TYPO3-Installationen mit mehreren Sites auch bei ansonsten gleicher Sprache getrennte Cores anlegen. Das bringt Vorteile mit sich, wenn es sich dabei z.B. um nicht öffentliche Bereiche wie Styleguides oder Playgrounds handelt.

Zeige größere Version von: Eine Benutzeroberfläche zeigt die Details eines laufenden Containers namens "Solr". Informationen wie Hostname, Kurz-ID, letzte Aktivität und Image sind aufgeführt. Das Image enthält notwendige Dateien und Abhängigkeiten für die Anwendung im Container. Es wird auf die Version "library/solr:9.9" verlinkt.
Der laufende Solr-Container unserer eigenen Website in der Darstellung im mStudio

Solr und Mittwald

Viele unserer Projekte werden bei unserem Partner Mittwald betrieben. Dort setzen wir von Anfang an auf den Hosted-Solr-Service, der den Betrieb des Solr-Suchservers auf Mittwalds Infrastruktur bot. Solr läuft dabei auf der älteren (nicht cloudbasierten) Infrastruktur von Mittwald. Obwohl bestehende Dienste weiter verfügbar bleiben, läuft sie jedoch zunehmend aus und es lassen sich dort keine neuen Pakete mehr buchen. Es musste also eine neue Lösung her.

Unsere Kundenprojekte bei Mittwald laufen jedoch auf der neueren Cloud-Infrastruktur, die über die Verwaltungsoberfläche mStudio verwaltet werden kann. Eins der inzwischen dort verfügbaren, neueren Features ist die Möglichkeit des Container-Hostings. Hierdurch kann ein Projekt Docker-Container starten und auf diese zugreifen. Da Solr prinzipiell als Docker-Container verfügbar ist, lag es für uns nahe, Solr neben den Projekten jeweils als Docker-Container zu betreiben, um die Funktionalität weiter bereitzustellen. Das hat zudem den Vorteil, dass der Suchserver technisch näher an der Applikation betrieben wird, was Latenzen bei Zugriffen verringert und insgesamt eine etwas höhere Performance verspricht. Zudem gehört zur Wahrheit auch dazu, dass die Buchung von separaten Solr-Paketen bislang immer auch mit Mehrkosten verbunden war, die beim Container-Hosting im direkten Vergleich deutlich geringer ausfallen.

Unser Vorgehen

Die Idee des Umzugs der Solr-Instanzen war somit geboren. Als Nächstes musste ein Weg erarbeitet werden, die verschiedenen Solr-Pakete als Container neu anzulegen. Im Anschluss musste jede betroffene TYPO3-Installation die neue URL zum Solr-Server sowie neue Zugangsdaten dazu erhalten und einmalig komplett neu indiziert werden, damit der neue Solr-Suchserver mit Inhalten befüllt werden konnte. Wir haben die Gelegenheit genutzt, um gleichzeitig alle Solr-Instanzen noch einmal auf den allerneuesten Softwarestand zu heben.

Der Betrieb von Solr als Container bringt ein wenig Extraarbeit mit sich. Wir müssen uns beispielsweise selbst darum kümmern, dass die von TYPO3 benötigte Konfiguration in den Suchserver geladen wird. Außerdem müssen die benötigten Solr-Cores angelegt werden. Auf Basis des offiziellen Solr-Docker-Images werden hierzu einige XML-Dateien mit der Feldkonfiguration sowie der Grundkonfiguration von Solr in dessen Datenverzeichnis abgelegt.

Wir setzen bereits erfolgreich Terraform ein, um einen Teil unserer Infrastruktur automatisch zu verwalten. Glücklicherweise gibt es für mStudio einen Terraform-Provider, der uns erlaubt, programmatisch Ressourcen dort anzulegen. Dadurch können wir später auch die Solr-Administrationsoberfläche auf intern genutzte Hostnamen legen und inklusive Authentifizierung zugänglich machen. Dieser Weg bietet uns Infrastructure as Code und schafft eine Lösung, die wir auch dann nachhaltig weiternutzen können, wenn neue Sitesprachen - und damit Solr-Cores - hinzugefügt werden sollen.

Mittwald selbst hat erkannt, dass es einen Bedarf gibt, Solr-Instanzen auf der Cloudinfrastruktur programmatisch anzulegen. Daher gibt es ein entsprechendes Terraform-Modul, das einen möglichen Weg aufzeigt, wie das mit Terraform umgesetzt werden kann. Das Modul startet einen Container auf Basis des offiziellen Solr-Docker-Images und ergänzt dann das Konfigurationsset aus dem Repository der TYPO3-Extension solr. Auf diese Weise lässt sich das später auch aktualisieren. Im Ergebnis sieht eine typische Projektkonfiguration jetzt wie folgt aus:

locals {
  mittwald_project_id = "02159b81-c0bb-4f62-ae57-8dd2e6bd5113"

  solr_version = "9.9"
  solr_heap = "1g"
  solr_hostname = "solr.live.mfc.invalid"

  solr_users = {
    cs = "9PxfZq9si08ebsxB1pwOylsB6uw3nCAkKz4dlKPzfws= ZGtkNHhyNWE5czAxN2xhZA=="
    mp = "2/JqksIj3gA3lXgA7E9BuW9D4t8Ki+x/yWLRUGcFFBY= bjljYzdzbnYwNGVxcTB5ag=="
    sk = "wE0pHBx3d0osQUP2i2LSDiGeqfJhSuc1viaWB5+y6Ao= cWIwZTY3cmNkbDh2aXB1Ng=="

    mfd = "Slw0Dts2bGMS7hKEyuXSxYMpahP8eaAF/3wAXyluwiQ= ZHJlcHlhcGwwcHlpZXBvcQ=="
  }
  solr_cores = {
    "www_marketing_factory_de_de_de" = {
      language = "german"
    }
    "www_marketing_factory_com_en_us" = {
      language = "english"
    }
    "sg_marketing_factory_de_de_de" = {
      language = "german"
    }
    "sg_marketing_factory_com_en_us" = {
      language = "english"
    }
  }
}

Sie definiert die Solr-Version, die einzurichtenden Solr-Cores samt ihrer Sprache sowie die Nutzer, die Zugriff haben sollen. Darunter am Ende einer, den TYPO3 selbst benutzen wird. Zu Beginn wird noch angegeben, in welchem Mittwald-Projekt das Ganze angelegt werden soll. Hierzu ist die Projekt-ID hinterlegt - eine UUID, die jedes Projekt in der Cloudinfrastruktur eindeutig beschreibt.

Überlegungen zur Sicherheit

Ein Aspekt darf nicht vergessen werden: das Thema Sicherheit. Die von Mittwald zuvor bereitgestellten Solr-Pakete wurden hinter einem Reverse-Proxy betrieben, der gleichzeitig Authentifizierung per HTTP-Basic durchgeführt hat. Der Solr-Container selbst stellt diese Funktionalität derzeit nicht bereit. TYPO3 kommuniziert später über ein internes, privates Netzwerk mit dem Container, sodass das da nicht ins Gewicht fällt. Im Regelfall will man allerdings auch auf den Solr-Admin zugreifen wollen. Da es in der Cloudinfrastruktur keine eingebaute Möglichkeit gibt, Authentifizierung für Domains zu aktivieren (Mittwald verschiebt diese Aufgabe auf die dahinterliegende Applikation), haben wir die Authentifizierung in Solr aktiviert.

Das geht mittels einer security.json, die man im Datenverzeichnis von Solr ablegt. Diese würde sogar feingranulares Rollen- und Rechtemanagement erlauben. Da wir das bei uns allerdings nicht in dieser Komplexität benötigen, haben wir darauf verzichtet. Die nötigen Benutzerpasswörter werden als Hashes hinterlegt. Es gibt Online-Tools, die das benötigte Format samt Salt lokal per JavaScript im Browser erzeugen können und die man sehr gut nutzen kann. Jeder Nutzer kann sein Passwort dann selbst hashen und im Konfigurations-Repository committen, sodass die Vertraulichkeit gewahrt bleibt.

Diese Datei sieht dann im Beispiel wie folgt aus (die Hashes sind natürlich nicht echt und für dieses Beispiel neu erzeugt 😉):

{
  "authentication": {
    "blockUnknown": true,
    "class": "solr.BasicAuthPlugin",
    "credentials": {
      "cs": "9PxfZq9si08ebsxB1pwOylsB6uw3nCAkKz4dlKPzfws= ZGtkNHhyNWE5czAxN2xhZA==",
      "mfd": "Slw0Dts2bGMS7hKEyuXSxYMpahP8eaAF/3wAXyluwiQ= ZHJlcHlhcGwwcHlpZXBvcQ==",
      "mp": "2/JqksIj3gA3lXgA7E9BuW9D4t8Ki+x/yWLRUGcFFBY= bjljYzdzbnYwNGVxcTB5ag==",
      "sk": "wE0pHBx3d0osQUP2i2LSDiGeqfJhSuc1viaWB5+y6Ao= cWIwZTY3cmNkbDh2aXB1Ng=="
    },
    "forwardCredentials": false,
    "realm": "Solr administration",
    "scheme": "basic"
  },
  "authorization": {
    "class": "solr.RuleBasedAuthorizationPlugin",
    "permissions": [
      {
        "name": "security-edit",
        "role": "admin"
      }
    ],
    "user-role": {
      "cs": "admin",
      "mfd": "admin",
      "mp": "admin",
      "sk": "admin"
    }
  }
}

Fazit

Inzwischen sind alle bisherigen Solr-Pakete umgezogen, die Migration hat reibungslos funktioniert. Das neue Setup ermöglicht uns, die Services rund um ein Projekt zusammen mit diesem auf derselben Infrastruktur zu betreiben. Die Nutzung von Terraform bringt den zusätzlichen Vorteil, dass wir nötige Arbeiten wie das Eintragen von IP-Adressen für den Zugriff auf den Solr-Admin auch durch Terraform durchführen lassen können, sofern es für den jeweiligen Domain-Registrar einen Terraform-Provider gibt. Das verringert manuelle Arbeiten nochmals zusätzlich und reduziert Fehlerquellen.

Mit dem Container-Hosting können wir neben Solr natürlich jetzt noch weitere Dinge, die aktuell rund um die Projekte betrieben werden, umziehen, sofern sie als Docker-Image vorliegen. Ideen gibt es da auch bereits.

Christian Spoo

"Mr. Fix-It" zwingt Soft- und Hardware gerne seinen Willen auf. Spricht fließend Meme und Picdump. Bei der Marketing Factory für die Bereiche Entwicklung und technische Konzeption zuständig.

Weitere Beiträge dieses Autors

Blog als RSS-Feed abonnieren

Verwandte Beiträge

  • Effiziente Entwicklungsumgebungen: Warum wir Kubernetes durch Virtual Machines ersetzt haben
  • AWS CloudFront Logfileauswertung in Matomo
  • Die große Firewall – Herausforderungen beim Hosting in China
  • Domainverwaltung (2): Domainadministration im Unternehmen

Wir freuen uns, wenn Ihr diesen Beitrag teilt.


Kommentare

Keine Kommentare gefunden.

Kommentar verfassen.

Ich bin darauf hingewiesen worden, dass die Verarbeitung meiner Daten auf freiwilliger Basis erfolgt und dass ich mein Einverständnis ohne für mich nachteilige Folgen verweigern bzw. jederzeit gegenüber der Marketing Factory Digital GmbH per Post (Erkrather Straße 401, D-40231 Düsseldorf) oder E-Mail (info@marketing-factory.de) widerrufen kann.

Mir ist bekannt, dass die oben angegebenen Daten so lange gespeichert werden, wie ich die Kontaktaufnahme durch Marketing Factory wünsche. Nach meinem Widerruf werden meine Daten gelöscht. Eine weitergehende Speicherung kann im Einzelfall erfolgen, wenn dies gesetzlich vorgeschrieben ist.

  • Datenschutzerklärung
  • Impressum

© Marketing Factory Digital GmbH

Bildnachweise
  1. Bild: © Christian Spoo / Marketing Factory Digital GmbH
  2. Bild: © Christian Spoo / Marketing Factory Digital GmbH
  3. "Die Lupe sitzt neben dem Laptop auf einem Tisch": MJ Duford / Lizenz: Unsplash License