Docker: Schnelleres Cache-Warming für TYPO3

Nach einem Deployment auf Produktionssysteme mit TYPO3 mussten wir oft lange warten bis alle Bilder im richtigen Zuschnitt für Desktop, Tablet und Smartphone online wieder verfügbar waren. Grund: Das Füllen des Caches dauerte für Seiten mit vielen Bildern bis zu 2 Minuten. Im Beitrag erklären wir, wie wir diese Zeit auf wenige Sekunden verringern konnten, indem wir skalierte und zugeschnittene Bilder nicht löschen.

Docker: Schnelleres Cache-Warming für TYPO3
Foto: 
JÉSHOOTS auf Pexels

Cache

Wir nutzen Docker für unsere TYPO3-Projekte. Um Codeänderungen auf dem Live-System zu veröffentlichen, müssen wir nur den master-Branch der TYPO3-Projekterweiterung ändern und Jenkins macht den Rest: Ein neues Webserver-Image mit dem ganzen PHP-Code bauen, dieses auf den Produktionsserver ziehen, den neuen Container starten, den Zwischenspeicher (Cache) leeren und den alten Container stoppen.

Weil sich am Code zwischen den Deployments potentiell alles geändert haben könnte, müssen wir alle Caches im TYPO3 leeren. Abgesehen von den Datenbankcachetabellen werden auch alle Dateien in typo3temp/ geleert.

Responsive Layout & focuspoint

Unsere TYPO3-Projekte haben ein „responsive Design“ – es kann in jeder Auflösung angeschaut werden, und es sieht immer gut aus. Unterschiedliche Auflösungen und Bildschirmformate benötigen oftmals unterschiedliche Bildgrößen und -formate – und diese Bilder müssen automatisch generiert werden.

Um sicherzustellen, daß der wichtige Teil eines Bilds unabhängig vom gewünschten Seitenverhältnis erhalten bleibt, nutzen wir die Focuspoint-Erweiterung für TYPO3. Redakteure markieren den wichtigen Teil eines Bildes im TYPO3-Backend, und dieser bleibt beim Zuschneiden auf jeden Fall erhalten.

Wenn man das Zuschneiden mit verschiedenen Auflösungen für normale und hochauflösende Bildschirme kombiniert, haben wir bis zu 6 Bilder die für jedes einzelne Bild auf der Website generiert werden müssen (2 unterschiedliche Seitenverhältnisse + 2 Auflösungen für jedes davon).

Beim Leeren von typo3temp/ werden alle diese zugeschnittenen und skalierten Bilder weggeworfen und müssen neu generiert werden. Der Aufruf einer Seite mit vielen Bildern dauerte bis zu 2 Minuten – erst dann waren alle Bildvarianten neu berechnet. Das dauerte viel zu lange.

Ordner für generierte Bilder

Unser Ziel war es also, die generierten Bilder zu behalten. Die Dateinamen sind ein Hash der Bildverarbeitungskonfigurationsoptionen und damit über die Zeit stabil. Das Leeren des Zwischenspeichers hat keine Auswirkungen auf den Dateinamen.

Informationen über diese automatisch erstellten Dateien werden auch in der Datenbank gespeichert, und zwar in der Tabelle sys_file_processedfile. Da die Datenbank über Deployments hinaus bestehen bleibt, ist der Inhalt dieser Tabelle auch immer verfügbar.

Wenn man einen Abzug der Live-Datenbank auf dem Test- oder Entwicklungssystem verwendet, merkt TYPO3 wenn Dateien fehlen und generiert sie automatisch neu.

Lösung

focuspoint speicherte zugeschnittene Dateien bisher in typo3temp/focuscrop, was ja beim Deployment gelöscht wurde. Wir haben einen Patch gebaut, um das konfigurierbar zu machen.

Damit haben wir einen neuen Ordner im Hauptverzeichnis angelegt: processed. Dieser wurde ins TYPO3 über einen Dateispeicher-Datensatz („file storage“) eingebunden (mit uid 2), der seinen Basispfad auf processed gesetzt bekommt (Pfadtyp: relativ).

Die focuspoint-Erweiterung wurde so eingestellt, daß sie ihre Dateien in processed/focuspoint ablegt.

Der Dateispeicher „fileadmin (auto-generated)“ wurde angepasst, damit er die bearbeiteten und temporären Bilder in 2:_processed_ speichert.

Nach diesen Änderungen landen alle automatisch generierten Bilder im Verzeichnis processed. Wir haben den Docker-Container so konfiguriert, daß processed vom Hostsystem eingebunden wird und damit die Daten behält, wenn neue CMS-Container ausgespielt werden.

typo3cms:
 image: docker.example.com/project-typo3cms:latest
 volumes_from:
   - storage
 volumes:
   - ./semitemp/processed:/var/www/site/htdocs/processed

Das Generieren einer Seite mit über 200 Bildern dauert direkt nach dem Deployment mit leeren Caches wenige Sekunden anstatt von Minuten. Mission erfüllt.

Dieser Artikel ist die Übersetzung des Blogeintrags Improving TYPO3 docker cache warming speed unseres Mitarbeiters Christian Weiske.

Wir sind MOGIC,

eine Digitalagentur mit rund 30 Mitarbeiter*innen aus Leipzig. Wir lösen digitale Herausforderungen, seit über 20 Jahren - für Ihr Unternehmen, Startup oder Institution. Wir entwickeln und betreiben Websites, Online-Portale, Online-Shops, webbasierte Softwarelösungen und mobile Apps. Wir sind MOGIC - wir gestalten digital.

MOGIC Geschäftsleitung

Geschäftsleitung: Matthias Hennig, Stefan Berger und Gunter Schwarz

Bereit für eine kostenlose Erstberatung oder einfach einen ersten Kaffee?

Nehmen Sie ganz unverbindlich Kontakt zu uns auf.

Vielen Dank für Ihre E-Mail. In der Regel erhalten Sie innerhalb von 24 Stunden Rückantwort von uns.
Die E-Mail wurde nicht versendet. Bitte versuchen Sie es erneut.

Rufen Sie uns gern an unter +49 341 656797-0 oder vereinbaren Sie einen Termin direkt in unserem Kalender.

Wir verwenden Ihre persönlichen Daten ausschließlich zur Bearbeitung Ihrer Anfrage. Weitere Informationen finden Sie in der Datenschutzerklärung.
BVMW
TYPO3 Gold Member

Deutscher Mittelstands-Bund (DMB)