Die TYPO3-Workspaces sind für die Realisierung eines komplexen Workflows geeignet - was aber, wenn der Workflow über mehr als einen Server gehen soll? Häufig ist es von Vorteil, einen vom Produktionssystem getrennten Testserver zu betreiben, auf dem Neuentwicklungen und neue Artikel zunächst überprüft werden können, bevor sie in den Livebetrieb gehen. TYPO3 bietet zur Veröffentlichung von Inhalten auf unterschiedliche Server keine offensichtliche Möglichkeit. Durch einige einfache Erweiterungen und einen Cron-Job ist jedoch möglich, einen Multi-Server-Workflow abzubilden.
Entwickelt wurden für die Abbildung eines Multi-Server-Workflows eine Extension mit den folgenden Bestandteilen:
- Backendmodule zur Kennzeichnung von zu veröffentlichenden Dateien und Seiten
- Veröffentlichungsskript mit Konfiguration
- Cron-Job zum Aufrufen des Veröffentlichungsskripts
- Log zur Überprüfung des Veröffentlichungszustandes
Die Backendmodule
Entwickelt wurden zwei Backendmodule, eins zum Veröffentlichen von Seiten aus dem Seitenbaum, eines zum Veröffentlichen von Dateien. Der Aufbau der Module ist simpel.
Im Modul zur Seitenveröffentlichung wird aus dem Seitenbaum eine Seite gewählt. Diese wird durch Absenden des Formulars zur Veröffentlichung vorgemerkt. Um schnell ganze Teilbäume zu veröffentlichen, können Seiten inklusive aller ihrer Unterseiten veröffentlicht werden. Technisch wird nach Absenden des Bestätigungs-Formulars ein Flag in der „Pages“-Tabelle auf 1 gesetzt, das später vom Cron-Job ausgelesen wird.
Das Dateimodul funktioniert weitestgehend analog zum Seitenmodul. Hier kann man entweder einzelne Dateien oder ganze Ordner zur Veröffentlichung freigeben. Zusätzlich werden als Hinweis für die Redakteure noch nicht veröffentlichte Dateien fett dargestellt. Die Pfade zu diesen Dateien oder Ordnern werden in der Datenbank gespeichert, zusammen mit einem Status-Flag, das anzeigt, ob diese Dateien schon veröffentlicht worden sind.
Die eigentliche Veröffentlichungslogik wird durch ein Konsolen-PHP-Skript bereitgestellt. Alle Einstellungen kann man in einer zentralen Konfigurationsdatei vornehmen. Hierzu zählen unter anderem die Zugangsdaten zu den Datenbanken und Dateisystemen und die Konfiguration der Tabellen, die veröffentlicht werden sollen. Es lassen sich auch voneinander abhängige Tabellen konfigurieren - bei TYPO3 bietet es sich zum Beispiel an, als Basistabelle die Pages-Tabelle zu nutzen. Über die Page-ID können dann verknüpfte Datensätze mitveröffentlicht werden.
$GLOBALS['STAGING'] = array ( 'rootTable' => array ( 'name' => 'pages', 'title' => 'title', 'uidField' => 'uid', 'whereField' => 'tx_neustastaging_staging', 'extTables' => array ( 0 => array ( 'name' => 'sys_template', 'title' => 'title', 'uidField' => 'uid', 'whereField' => 'pid' ), 1 => array ( 'name' => 'tt_content', 'title' => 'header', 'uidField' => 'uid', 'whereField' => 'pid', ), );
So kann das Skript auch verknüpfte Tabellen veröffentlichen. Sogar eine Mehrfachverschachtelung der Tabellen ist möglich.
Das Skript sucht sich beim Veröffentlichen alle markierten Datensätze der Pages-Tabelle sowie alle verknüpften Einträge und aktualisiert diese auf dem Zielsystem. Sind dort Datenbankfelder oder Datensätze noch nicht vorhanden, so werden sie angelegt.
Zur Veröffentlichung von Dateien wird rsync verwendet. Die Dateien oder Ordner, die zur Veröffentlichung markiert wurden, werden damit auf dem Zielserver angelegt. Auch die Konfiguration für Ziel- und Quellenordner sowie die rsync-Parameter gibt man über die Konfigurationsdatei an:
'filesystem' => array ( 'rsyncBin' => 'rsync', 'rsyncParams' => 'avR --delete -e ssh', 'srcFS' => array ( 'mountPoint' => '/mnt/typo3main/fileadmin/', 'rootPath' => '/fileadmin/' ), 'dstFS' => array ( 0 => array ( 'sshPrefix' => 'www-data@fileserver', 'rootPath' => '/mnt/typo3/htdocs/fileadmin/' ) )
Der Cron-Job
Der Cron-Job ruft das Skript zur Veröffentlichung in regelmäßigen Abständen auf, so dass alle Änderungen zum Beispiel im Fünf-Minuten-Takt auf den Liveserver geschoben werden. Durch die Ausführung als Cron-Job kann man den Veröffentlichungszyklus dynamisch anpassen.
Caching
Das Veröffentlichungsskript löscht sowohl in der Tabelle „cache_pages“ als auch in der Tabelle „cache_pagesection“ die Einträge der aktualisierten Datensätze. Damit wird dafür gesorgt, dass Veröffentlichungen direkt auf dem Live-System sichtbar werden, ohne dass ein Eingreifen des Redakteurs notwendig wird.
Im Wesentlichen ist damit der komplette Basis-Workflow über mehrere Server abgedeckt. Letztlich lässt sich das normale TYPO3-Workspaces-Konzept mit der Veröffentlichung auf einen externen Server kombinieren. Da die Backendmodule per Benutzerverwaltung nur für eine spezielle Benutzergruppe freigeschaltet werden können, kann hier eine weitere Berechtigungsstufe zusätzlich zu den Stufen in den Workspaces eingesetzt werden.
Ziel der Erweiterung ist letztendlich, den Zugriff auf das Live-System per direktem Login überflüssig zu machen. So kann das ganze typo3-Verzeichnis im Live-Betrieb gesperrt und die Sicherheit des Systems erhöht werden.
Die Erweiterung befindet sich zur Zeit noch in der Alpha-Phase - Verbesserungsvorschläge, Anmerkungen und Kritik sind daher willkommen und können im zugehörigen forge-Projekt eingestellt werden.
Die Autorin
Susanne Moog ist Diplom-Medienwirtin und arbeitet bei der NEUSTA GmbH als Webentwicklerin. Ihr Schwerpunkt ist die Umsetzung von TYPO3- und Magento-Systemen sowie die Konzeption und Realisierung von webbasierten Individualsoftwarelösungen.


















[...] Content Management für Profis: Multi-Server-Workflow mit TYPO3 » t3n Magazin [...]