TYPO3 Hosting

Hosting und Applikationsbetrieb in einem nahtlosen Gesamtpaket

Hosting für TYPO3 ist bei individuellen Setups immer mehr als „Server hinstellen und fertig“: Es braucht eine Infrastruktur, die zuverlässig läuft und technisch aktuell bleibt.

Viele Hoster liefern genau diesen Unterbau – die Verantwortung für Betrieb, Wartung und Pflege der Anwendung (TYPO3) liegt dann aber beim Betreiber. CosmoCode geht hier einen Schritt weiter: Wir verbinden Hosting und Applikationsbetrieb zu einem nahtlosen Gesamtpaket.

Grundlage sind Server in einem deutschen Rechenzentrum, z. B. bei Hetzner – wahlweise als klassisches Setup auf virtualisierten Systemen oder containerisiert (Kubernetes). Und wenn Sie bereits einen Hoster haben, schließen wir die Lücke mit einem Applikations-Support.

Unser Update-Prozess für TYPO3 ist weitgehend automatisiert: Mit Renovate, einem Tool zur intelligenten Dependency-Automatisierung, überwachen und aktualisieren wir den TYPO3 Core, Erweiterungen, Bibliotheken und Sicherheits-Patches kontinuierlich.
Ein automatisierter QS-/Test-Prozess gewährleistet, dass die Applikation mit den Updates weiterhin funktionsfähig ist, bevor die Übertragung auf die Staging-/Produktionsumgebung erfolgt.

Wie schnell eine TYPO3-Seite antwortet, entscheidet sich zu einem großen Teil im Betrieb: Cache-Warmup nach dem Deploy, Datenbank- und Webserver-Einstellungen. Was davon messbar etwas bringt, beschreiben wir unter TYPO3 schneller machen: erst messen, dann optimieren.

Planbarer Betrieb – mit fester Zuständigkeit.

Leistungsbeschreibung: TYPO3 Hosting & Betrieb

Serverstandort Deutschland

Betrieb auf Servern in Deutschland (Hetzner, DE). Pro Projekt eine logisch getrennte Umgebung (z. B. eigene Instanz/Namespace/Container/VM – je nach Setup), damit Ressourcen, Zugriffe und Risiken separiert sind.

CPU/RAM/Storage werden passend zur erwarteten Last dimensioniert und können später skaliert werden. Je nach Projektprofil sind getrennte Komponenten für Datenbank, Objektspeicher (z.B. S3), Cache und Webserver möglich.

Staging- und Produktivsystem

Optional zwei Umgebungen: Staging (Test/Abnahme) und Produktion (Livebetrieb). Staging ist ein möglichst reales Abbild der Produktion (Konfiguration, PHP-Version, Extensions, Caching, Parameter), damit Updates und Deployments zuverlässig validiert werden können.

Änderungen werden zuerst im Staging geprüft und nach Freigabe in Produktion übernommen. Für geplante Releases können Wartungsfenster vereinbart werden; für kritische Security-Fixes gelten verkürzte Abläufe nach SLA. Bei Bedarf sind weitere Umgebungen möglich (z. B. für neue Schnittstellen).

Automatisierte Deployments (CI/CD)

Deployments erfolgen automatisiert und reproduzierbar (CI/CD) – inkl. Code, Konfiguration, Tests und ggf. Datenbankmigrationen. Der Prozess ist versioniert (Git), nachvollziehbar (Logs/Artefakte) und enthält eine Rollback-Strategie.

Ziel: standardisierte Releases mit weniger Handarbeit, weniger Risiko und schnellerer Reaktionsfähigkeit.

Backups & Wiederherstellung

Regelmäßige, automatisierte Backups vom Dateisystem (z. B. fileadmin, Konfiguration, ggf. Deploy-Artefakte) und der Datenbank. Zusätzlich: Einzeldatei-Wiederherstellung (Restore einzelner Dateien/Verzeichnisse) sowie kompletter Restore bei schweren Fehlern.

Der Applikations-Quellcode ist in einem Versionskontrollsystem (Git) abgelegt und erlaubt eine Wiederherstellung von früheren Zuständen der Code-Basis.

Backup-Frequenz und Aufbewahrungszeiten (Retention) werden gemeinsam definiert.

Updates & Security Maintenance

Einspielen von Updates für TYPO3 Core (Security-/Bugfix-/Maintenance-Releases der verwendeten LTS Version), Extensions (TER/Composer) und PHP/Composer Libraries (Dependencies). Updates werden zuerst im Staging eingespielt und per Smoke-Tests geprüft (Backend-Login, zentrale Seitentypen/Layouts, Formulare, Caching, Logs).

Nach Freigabe erfolgt der Rollout in Produktion. Für Security-Advisories gilt ein beschleunigter Prozess nach SLA (zeitnahes Patchen). Ziel ist ein dauerhaft wartbarer Zustand ohne „Upgrade-Schulden“.

Unser Update-Prozess für TYPO3 ist weitgehend automatisiert: Mit Renovate, einem Tool zur intelligenten Dependency-Automatisierung, überwachen und aktualisieren wir den TYPO3 Core, Erweiterungen, Bibliotheken und Sicherheits-Patches kontinuierlich. Ein automatisierter QS-/Test-Prozess gewährleistet, dass die Applikation mit den Updates weiterhin funktionsfähig ist, bevor die Übertragung auf die Staging-/Produktionsumgebung erfolgt.

Zertifikatsmanagement (TLS/SSL)

Zertifikatsmanagement inkl. Einrichtung, Erneuerung und Prüfung. Umfasst TLS-Zertifikate (z. B. Let’s Encrypt oder kundeneigene Zertifikate), HTTPS-Weiterleitungen und sichere Basiskonfiguration.

Monitoring & Alerting

Überwachung von Uptime, Fehlerquoten, Antwortzeiten und Ressourcen (CPU/RAM/Disk) inkl. Alarmierung. Optional: Log-Monitoring (500er, PHP-Fatals, TYPO3-Exceptions) und proaktives Erkennen von Engpässen.

Benachrichtigungen erfolgen, je nach Priorität, über verschiedene Kommunikationskanäle (Push-Notification, Slack, E-Mail), um eine schnelle Reaktionsfähigkeit zu gewährleisten.

Sicherheit & Härtung

Basishärtung (Firewalls, Fail2ban/Rate limiting, restriktive Zugriffe, SSH-Key-Only, Minimalrechte). Optional: WAF/Reverse-Proxy-Regeln.

Zusätzlich: Security-Headers, CSP-Konzept, CORS, HSTS Header, SSRF Abwehr

Performance & Skalierung

Performance-Optimierung (Caching-Strategie, Redis/Valkey, Varnish/Static File Cache, CDN, S3, Bildoptimierung, Datenbank-Tuning). Ziel ist stabile Performance – auch bei Lastspitzen.

Mailzustellung & DNS

Einrichtung stabiler Mailzustellung via SMTP-Relay sowie SPF/DKIM/DMARC-Konfiguration. Optional Bounce-Handling/Monitoring, wenn viele Formulare oder Newsletter-Integrationen im Einsatz sind.

Was TYPO3 vom Hosting braucht

Die Anforderungen der TYPO3-Versionen, die heute noch Updates bekommen – kostenlos oder über ELTS.

Quelle: get.typo3.org. Nach dem Ende des kostenlosen Supports gibt es Updates nur noch über ELTS.
TYPO3 PHPMariaDB abMySQL abPostgreSQL abKostenloser Support bis
14.3 LTS 8.2 – 8.510.4.38.0.1710.030.6.2029
13.4 LTS 8.2 – 8.510.4.38.0.1710.031.12.2027
12.4 LTS 8.1 – 8.410.38.0.1710.030.4.2026
11.5 LTS 7.4.1 – 8.310.2.75.7.9–31.10.2024
10.4 LTS 7.2 – 7.410.2.75.5–30.4.2023

Dazu kommt für jede dieser Versionen:

  • PHP-Einstellungen: memory_limit 256M, max_execution_time 240, max_input_vars 1500 und pcre.jit an; post_max_size und upload_max_filesize passend zur größten Datei, die Redakteure hochladen.
  • PHP-Erweiterungen: PDO mit pdo_mysql (bevorzugt) oder mysqli, dazu intl, mbstring, XML, session und tokenizer; empfohlen sind fileinfo, GD, zip, zlib und OpenSSL.
  • Bildverarbeitung: GraphicsMagick ab 1.3 oder ImageMagick ab 6.
  • Webserver: Apache mit mod_rewrite oder NGINX.
  • Cronjob für den TYPO3-Scheduler (vendor/bin/typo3 scheduler:run), meist minütlich.
  • Composer im Build; auf dem Server selbst nur, wenn dort gebaut wird.

Welche PHP-Version zu welcher TYPO3-Version passt, zeigt die Seite Welche PHP-Version braucht TYPO3? Wie Core-Updates im Betrieb ablaufen, beschreibt Wie spielt man ein TYPO3 Core-Update ein?

TYPO3 im Container betreiben

Mehrere unserer TYPO3-Projekte laufen in Kubernetes, auf einem gemeinsamen Basis-Image. Was wir dabei gelernt haben, gilt für jedes Container-Setup.
Webserver: Keep-Alive kurz, Worker am Speicher bemessen

Mit Apache im Prefork-Modus belegt jede offene Keep-Alive-Verbindung einen ganzen Worker. Hinter einem Reverse Proxy hat Debians Voreinstellung von 5 Sekunden den Pool leerlaufen lassen, Anfragen warteten sekundenlang auf einen freien Worker. In unserem Basis-Image steht der Wert deshalb auf 1 Sekunde.

Die Zahl der Worker ergibt sich aus dem Speicher, denn jeder darf bis zum PHP-memory_limit wachsen: 8 Worker mit 256 MB brauchen im ungünstigsten Fall rund 2,3 GiB, und das Speicherlimit des Containers muss das tragen. Welche Stellschrauben sonst messbar etwas bringen, steht unter TYPO3 schneller machen.

GraphicsMagick an die Grenzen des Containers binden

GraphicsMagick läuft als eigener Prozess, das PHP-memory_limit gilt für ihn nicht. Seinen Speicher bemisst er am Arbeitsspeicher des Servers, nicht am Limit des Containers: Ein einziges übergroßes Bild kann auf 5 bis 6 GB anwachsen, und der Container wird wegen Speichermangels beendet.

Abhilfe schaffen Grenzen über Umgebungsvariablen, bei uns MAGICK_LIMIT_MEMORY und MAGICK_LIMIT_MAP mit je 256 MB und MAGICK_LIMIT_PIXELS als harte Obergrenze. Den Überlauf lenkt MAGICK_TMPDIR auf ein Volume auf der Platte, nicht im Arbeitsspeicher. Große Bilder werden dann langsamer verarbeitet statt gar nicht.

Dasselbe gilt für die Threads: GraphicsMagick richtet sich nach den Kernen des Servers, nicht nach dem CPU-Kontingent des Containers, und bremst sich damit selbst aus. Mit OMP_NUM_THREADS=1 war jede Umwandlung bei uns rund 17 % schneller.

Beim Start aufräumen

Liegt var/cache/ auf einem Volume, überlebt der Cache einen Neustart des Containers, auch einen harten wegen Speichermangels mitten im Schreiben. Der neue Container startet dann mit halb geschriebenen Cache-Dateien und meldet Fehler, bis jemand die Caches leert.

Unser Basis-Image räumt deshalb beim Start auf, bevor der Webserver Anfragen annimmt: Cache-Verzeichnis leeren, fehlende Ordner anlegen (install:fixfolderstructure), den System-Cache aufwärmen (cache:warmup --group system). Beide TYPO3-Befehle laufen mit festem Zeitlimit, sodass sich die Startprüfung des Containers (startupProbe) daran bemessen lässt.

Sprachpakete gehören ins Image

Im Container ist das Dateisystem meist schreibgeschützt, language:update kann beim Deploy dort nichts ablegen. Wir legen die Sprachpakete deshalb ins Image. Ein geplanter CI-Job aktualisiert sie regelmäßig und öffnet dafür einen Merge Request.

Scheduler während des Deploys anhalten

Läuft der Scheduler als eigener Cronjob, kann er während eines Deploys gegen eine Datenbank laufen, deren Schema noch nicht aktualisiert ist. Wir halten ihn vor dem Deploy an und warten laufende Aufgaben ab – der Neuaufbau des Referenzindex kann Minuten dauern. Danach schalten wir ihn wieder ein, auch wenn der Deploy scheitert.

Neustart von Redis erkennen

Liegt der Seitencache in Redis, ist er nach einem Neustart von Redis leer, während die übrigen Caches in der Datenbank weiterleben. Die beiden Stände passen dann nicht mehr zusammen, und TYPO3 antwortet mit Fehler 503, bis jemand alle Caches leert.

Mit b13/graceful-cache übersteht die Seite einen kurzen Ausfall von Redis. Für den Neustart prüft bei uns ein Scheduler-Task jede Minute die Kennung, die Redis bei jedem Start neu vergibt (run_id). Ändert sie sich, leert er alle Caches.

Eine Umgebung, ein Datenbankserver

Teilen sich Staging und Produktion einen Datenbankserver, kann eine Schemaänderung oder eine ausufernde Abfrage auf Staging die Live-Seite treffen. Wir geben jeder Umgebung einen eigenen Server.

Galera-Cluster meiden wir für TYPO3. Galera repliziert nur InnoDB-Tabellen, Schreibzugriffe auf MyISAM- oder Aria-Tabellen landen ohne Fehlermeldung nur auf einem Knoten. Schemaänderungen laufen unter einer Sperre für den ganzen Cluster, und database:updateschema löst sie wiederholt aus. Tabellen ohne Primärschlüssel repliziert Galera nicht zuverlässig.

Hinter dem Reverse Proxy

TYPO3 wertet die X-Forwarded-*-Header nur für Anfragen von Adressen aus reverseProxyIP aus. Deckt die Einstellung das Netz des Ingress ab, aber nicht die Loopback-Adresse, liefert eine Anfrage an 127.0.0.1 im Container eine 404-Seite statt der Seite: TYPO3 hält die Verbindung für http, und die Site mit https-Basis passt nicht. Zum Testen im Container deshalb die IP des Pods ansprechen, mit Host- und X-Forwarded-Proto-Header.

Beim Wechsel der Domain gehören vier Stellen zusammen: Ingress-Host, TLS-Zertifikat, die Basis-URL der Site und trustedHostsPattern. Passt das Muster nicht, lehnt TYPO3 jede Anfrage mit dem neuen Host ab.

Erstgespräch vereinbaren

Gerne beraten wir Sie in einem kostenlosen Erstgespräch.

Was passiert nach dem Absenden?

  • Wir melden uns in der Regel innerhalb eines Werktages.
  • Wir klären kurz Ihr Anliegen und schlagen die nächsten Schritte vor.
  • Auf Wunsch vereinbaren wir ein kostenloses Erstgespräch (ca. 60 Min.).

Bitte Name angeben.

Bitte gültige E-Mail angeben.

Bitte eine Nachricht eingeben.

Danke!

Wir haben Ihre Nachricht erhalten und melden uns umgehend.