Entwicklungsumgebung für TYPO3 mit Docker und xdebug

TYPO3-Meetup Hamburg No. 3

Wir freuen uns, dass ihr gestern so zahlreich bei dem 3. TYPO3-Meetup erschienen seid!

Wir haben uns mit dem Thema Docker-Setups für TYPO3 für 2 Anwendungsfälle beschäftigt. Zum einen sollte ein TYPO3-Demosystem für Präsentationszwecke in minimaler Zeit aufgesetzt werden und zum anderen haben wir uns mit der Einrichtung einer vollständigen Entwicklungsumgebung für TYPO3-Projekte auf Basis eines docker-compose Setups beschäftigt.

 Im zweiten Teil ging es darum, wie man die Entwicklungsumgebung mit xdebug zum Debugging eigener Extensions oder des TYPO3 Cores verwenden kann.


TYPO3-Demosystem in Sekunden

Installationsvoraussetzung ist, dass docker, docker-compose und git auf dem Rechner eingerichtet sind.

Ausgehend von dem Docker Image für TYPO3 von Martin Helmich haben wir ein docker-compose setup aufgesetzt, mit dem es genau 76 Zeichen benötigt, um ein voll funktionsfähiges TYPO3-Demosystem in der Version 8.7 zu starten.

$ git clone https://github.com/sitegeist/typo3_demo.git .
$ docker-compose up -d

Nach Ausführung der Befehle ist das System erreichbar unter http://localhost/ und es erscheint der TYPO3 Installationswizard.

Als Datenbank-Zugangsdaten sind folgende Daten anzugeben:

Host: typo3-db
Username: typo3
Passwort: mysecurepassword
Port: 3306

Im nächsten Schritt ist als Datenbank die schon vorinstallierte Datenbank „typo3“ auszuwählen.


TYPO3-Entwicklungsumgebung mit Docker

Für eine voll-umfängliche Entwicklungsumgebung für TYPO3 8.7 haben wir ein docker-compose Setup auf Basis des Projekts webdevops/TYPO3-docker-boilerplate verwendet:

$ git clone --recursive https://github.com/webdevops/TYPO3-docker-boilerplate.git myproject
$ cd myproject
$ cp docker-compose.development.yml docker-compose.yml
$ docker-compose up -d

Damit steht eine PHP-Entwicklungsumgebung mit Apache, PHP 7.0 und MySQL zur Verfügung, die so konfiguriert ist, dass sich damit TYPO3 8.7 problemlos betreiben lässt.

Um nun TYPO3 zu installieren, ist ein praktisches make script mitgeliefert:

make create typo3

Das make script lädt ein composer image herunter, startet einen docker container, in dem composer ausgeführt wird und installiert darüber die TYPO3 Sourcen im Unterverzeichnis /app.

Anschließend kann man den TYPO3 Installationswizard starten.
Die voreingestellten Datenbank-Zugangsdaten findet man in der Datei „etc/environment.yml“ ab Zeile 123.

Als host für die Datenbank muss man den Namen des MySQL docker containers angeben, den man in der Datei

docker-compose.yml

in Zeile 44 findet und der schlicht „mysql“ heißt.

Somit muss man im Installationsschritt für die Datenbank folgende Daten eingeben:

Host: mysql
Username: dev
Passwort: dev
Port: 3306

Anschließend kann man die bereits vorinstallierte Datenbank „typo3“ auswählen.

Das System ist erreichbar unter http://localhost:8000 oder https://localhost:8443.
Auch MySQL lässt sich von außen über den Port 13306 erreichen.

Das System ist so konfiguriert, dass remote debugging mit xdebug unter Linux problemlos möglich ist. Wenn man das Remote Debugging mit PhpStorm betreibt, dann sollte man allerdings  in „etc/php/development.ini“ die Zeile 43 ändern in:

xdebug.idekey                  = "PHPSTORM"

Verwendet man einen Mac zum Entwickeln, so benötigt man mindestens docker 17.06 und muss die Konfiguration für xdebug in der Datei „etc/php/development.ini“
ab Zeile 41 wie folgt ändern:

xdebug.remote_enable           = 1
xdebug.remote_connect_back     = 0
xdebug.remote_host             = docker.for.mac.localhost
xdebug.idekey                  = "PHPSTORM"
xdebug.max_nesting_level       = 1000

Änderungen an der PHP Konfiguration werden erst wirksam, wenn man den Container neu baut:

$ docker-compose stop app
$ docker-compose build app
$ docker-compose up -d

Die Performance des Setups unter MacOS lässt sich deutlich verbessern, wenn man die neuen Performance-Optimierungen von Docker ab Version 17.04 für Mac nutzt und dazu in der Datei „docker-compose.yml“ in Zeile 24 folgende Änderung vornimmt:

      - ./app/:/app/:delegated

Danach muss das Setup neu gestartet werden:

$ docker-compose up -d

In den Anwendungscontainer gelangt man mit:

$ make bash

oder als root User mit

$ make root

Um einen TYPO3 cli task auszuführen, kann man folgenden Befehl verwenden:

$ docker-compose run --rm app web/typo3/cli_dispatch.phpsh extbase

Für alles weitere möchte ich an dieser Stelle auf die sehr gute Dokumentation des Projekts verweisen.