Versionierung von TYPO3 mit Stagings bzw. Environments

Dieser Artikel soll eine Möglichkeit beschreiben, wie man komplexere TYPO3 Webseiten versionieren kann. Ziel ist es mehrere TYPO3 Systeme zu organisieren, bei denen das eine als Development und das andere als Production (LIVE) Umgebung dienen soll. Dazwischen können beliebig viele, weitere Stagings eingerichtet werden.

1. Allgemeine Vorbereitung

Damit inhaltliche Änderungen vom Dev System nicht ins Live System gelangen, sollte man allen Systemen eine eigene Datenbank erstellen. Die Synchronisierung der beiden Datenbanken erfolgt später manuell über eine Extension.

Desweiteren sollten für die unterschiedlichen Stagings einzelne Domains bzw. Subdomains eingerichtet werden. Das Dev System könnte beispielsweise unter dev.domain.de laufen während das Live System dann direkt unter domain.de läuft.

Damit man Änderungen möglichst schnell von einem System in das andere übertragen kann und diese später auch mit Git versionieren kann, empfehle ich sehr stark, sämtliche Typoscript Einstellungen in Dateien auszulagern und diese lediglich in einem Haupttemplate einzubinden!

2. Das Dateisystem

Ich schreibe diesen Artikel anhand eines Beispielprojektes, welches bei Mittwald gehostet ist. In diesem Fall befinden sich sowohl das Development als auch das Production System auf dem Mittwald Server. Ich werde noch über ein weiteres Beispiel berichten, bei dem sich das Production System auf einem lokalen Webserver befindet.

Bei Mittwald liegen die Webdaten normalerweise im Verzeichnis /html/. In diesem Verzeichnis muss nun ein Verzeichnis für jedes Staging angelegt werden, sowie ein weiterer Ordner mit TYPO3 Source Dateien (damit diese nicht redundant vorhanden sind).

Ordnerstruktur unter /html/
– projektname-dev
– projektname-live
– typo3-sources
— typo3_src-6.2.9

 

Nun können im Live sowie im Dev System die üblichen Symlinks bzw. Softlinks auf das TYPO3 Source Verzeichnis angelegt werden. Diese können entweder per SSH oder per PHP (Beispiel) erstellt werden.
Nachdem das erledigt ist, sollten sich in beiden Verzeichnissen die Symlinks typo3_src, typo3 und index.php befinden.

3. Die TYPO3 Installation

Wie bei einem Development System üblich, beginnt hier die Installation und auch die allgemeine Entwicklung, bevor diese ins Live System übertragen werden. Installiert also euer TYPO3 System im Dev Verzeichnis und entwickelt die Seite nach euren Vorstellungen. Achtet darauf in diesem System die entsprechende Datenbank für die Entwicklungsumgebung zu verwenden.

4. Conditions für die einzelnen Systeme

Da das Dev und das Production System unterschiedliche Datenbanken verwenden und sich desweiteren auch mindestens in der Domain unterscheiden, ist es wichtig, dass je nach System die richtigen Einstellungen verwendet werden.

Um das zu realisieren gibt es in TYPO3 praktischerweise einen sogenannten ApplicationContext. Dabei handelt es sich um sowas wie eine Globale die per .htaccess gesetzt werden kann:

# Context auf Development setzen, wenn die Domain dev.domain.de ist
RewriteCond %{HTTP_HOST} ^dev.domain.de$
RewriteRule .? – [E=TYPO3_CONTEXT:Development]

# Context auf Production setzen, wenn die Domain NICHT dev.domain.de ist
RewriteCond %{HTTP_HOST} !^dev.domain.de$
RewriteRule .? – [E=TYPO3_CONTEXT:Production]

Nachdem die Context Variable je nach Domain richtig gesetzt wird, kann man anhand dieser unterschiedliche Konfigurationen einschleusen. Alternativ zum Context könnte man natürlich auch immer die Domain im Typoscript oder im PHP überprüfen, aber findet ihr das so nicht auch viel geiler?

Wenn ihr die Context Variable verwendet, könnt ihr nun mit Hilfe der Extensionenvironment“ verwenden. Mit dieser könnt ihr je nach Environment eine unterschiedliche AdditionalConfiguration einschleusen. Erstellt dazu unter typo3conf die Datei AdditionalConfiguration.php mit folgendem Inhalt:

<?php

if (!defined('TYPO3_MODE')) {die('Access denied.');}

// load the environment / context configuration for this installation
include('ext/environment/Includes/Bootstrap/InitializeContext.php');

?>

Die Extension wird nun je nach Context die Dateien
AdditionalConfiguration.Development.php oder AdditionalConfiguration.Production.php aus dem typo3conf Verzeichnis einbinden (die Dateien müsst ihr natürlich selbst erstellen).
In diesen Dateien könnt ihr für das Dev und Livesystem unterschiedliche Einstellungen wie zum Beispiel für die Datenbank vornehmen. Die entsprechenden Einstellungen können anschließend aus der normalen LocalConfiguration.php entfernt werden.

Beispielinhalt der AdditionalConfiguration.Development.php

<?php

if (!defined('TYPO3_MODE')) {die('Access denied.');}

$GLOBALS['TYPO3_CONF_VARS']['BE']['interfaces'] = 'backend, frontend';
$GLOBALS['TYPO3_CONF_VARS']['BE']['debug'] = '1';
$GLOBALS['TYPO3_CONF_VARS']['FE']['debug'] = '1';

$GLOBALS['TYPO3_CONF_VARS']['DB']['database'] = 'DEV_DB_NAME';
$GLOBALS['TYPO3_CONF_VARS']['DB']['host'] = 'DEV_DB_HOST';
$GLOBALS['TYPO3_CONF_VARS']['DB']['password'] = 'DEV_DB_PASSWORT';
$GLOBALS['TYPO3_CONF_VARS']['DB']['username'] = 'DEV_DB_USER';

$GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'] = 'DEV - Beispielseite';
$GLOBALS['TYPO3_CONF_VARS']['SYS']['displayErrors'] = '1';

?>

In der Datei für das Production System sind natürlich entsprechende Änderungen vorzunehmen.

Typoscript Conditions

Weitere Unterschiede zwischen Dev und Production System im Typoscript müssen natürlich auch behandelt werden. Je nach Context könnt ihr zum Beispiel die baseUrl der Seite mit folgenden Conditions entsprechend anpassen:

[applicationContext = Development] und [applicationContext = Production]

5. Synchronisierung / Updates im Production

Habt ihr sämtliche Typoscripts in Dateien ausgelagert und arbeitet wie oben beschrieben mit Contextabhängigen AdditionalConfigurations, so könnt ihr die kompletten Dateisysteme eines Systems in das andere kopieren bzw. dieses überschreiben.
Bei vielen Dateien und Uploads durch Redakteure kann dies jedoch sehr lange dauern. In einem weiteren Artikel werde ich sobald wie möglich aufzeigen, wie man dies per Git optimieren kann. Ansonsten kann man natürlich auch nur die jeweils veränderten Dateien in das Production System übertragen.

Die Übertragung bzw. Synchronisierung der Datenbanken ist ein wenig komplizierter. Werden die Inhalte im Development oder in einem anderen Staging Schritt gepflegt, so kann diese Datenbank einfach ins Live System übertragen werden. Werden die Daten jedoch im Live System gepflegt, dann kann es zu Problemen kommen. Konfiguriert man im Development System beispielsweise Datensätze von Gridelements, DCE oder Backend Layouts, so müssen diese Daten in das Live System und die Tabellen für die Inhaltselemente ins Production System. In diesem Fall ist also sehr genau darauf zu achten, wohin man welche Daten übertragung bzw. welche Tabellen man überschreibt.

Um das angesprochene Problem zu lösen, planen wir momentan die Erstellung einer Extension zur Synchronisierung von Datenbanken. Bis dahin muss die Synchronisierung der Datenbank von Hand erledigt werden oder kennt ihr eine Extension die es einem erleichtert?

Freut euch auf weitere Artikel zum Thema Versionierung von TYPO3 wie zum Beispiel mit Git!

3 Kommentare

Schreibe einen Kommentar zu Falk Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Highlighting von Codes ist mit den Tags  [ts], [php], [html], [javascript], [xml] oder [code] möglich.