Thomas Kieslich - Neues im Blog

TYPO3 Entwicklung mit Docker und xdebug

Dieser Artikel basiert auf dem TYPO3 Docker Boilerplate der WEBDEVOPS. Vielen Dank für die viele Arbeit. Ich habe lange Zeit mit MAMP PRO oder Vagrant und VMs gearbeitet. Bei MAMP PRO ist es schwierig zusätzliche Module wie Solr oder Redis zu benutzen und bei den VMs ist die Größe der Disks beim Backup und die Bindung an die vom verwendeten OS mitgelieferten Versionen der Komponenten wie Php oder MySql anstrengend.

Umstieg auf Docker for Mac

Seit letztem Jahr tat sich einiges bei der Docker Version für macOs. z.B. kann er jetzt mit dem apfs Filesystem umgehen oder besser mit dem lokalen Netzwerk umgehen. Soweit ich gesehen habe, hat sich bei den Versionen für andere Betriebsysteme oder die Cloud einiges getan. Damit ist der Weg geebnet, um mit der gleichen Entwicklungsumgebung von der Entwicklung über das Testing/ Staging bis zur Production zu arbeiten.

TYPO3 Docker Boilerplate

Ist ein guter Ausgangspunkt um zu starten. Im Laufe der Zeit habe ich einige kleine Anpassungen für  macOs gemacht. Die sind hier im dockerForMac Branch zu finden.
In den docker-comose.***.yml können Module in verschiedenen Versionen aktiviert werden. z.B.
 mysql
mariadb
postgres
solr
elasticsearch
redis
memcached
phpmyadmin

Bei einigen der Module kann der Port, über den auf denContainerzgegriffen wird, angepasst werden.  Falls lokal noch Dienste laufen kann der Webserver mit 8000:80 oder MySql mit 13306:3306 umgeleitet werden.
Im Dockerfile.*** kann zwischen ziemlich vielen Betriebsystemen und damit Kombinationen aus Apache/ Nginx und php Versionen ausgewählt werden. Falls das nicht reicht, kann über RUN Befehle noch einiges angepasst werden. Ich benutze das, um Passwörter zu setzen oder um neuere  PHP Versionen zu installieren.
Um die Bedienung zu vereinfachen ist noch ein Makefile mitgeliefert. Aus der Befehlskette für ein rebuild:
    docker-compose stop
    docker-compose pull
    docker-compose rm --force app
    docker-compose build --no-cache --pull
    docker-compose up -d --force-recreate –remove-orphans
wird z.B. make rebuild. Die Datei kann nach eigenen Bedürfnissen angepasst werden.

Die passende Konfigurationsdatei wird am besten nur verlinkt:
ln -s docker-compose.development.yml docker-compose.yml

Mit make up werden die passenden Container erstellt. Mit make bash komme ich in den Container und kann über eine composer.json mein TYPO3 oder anderes installieren. Das Application Root ist unter app/web. Leider gibt es mit TYPO3 Versionen über 7.6 Probleme mit dem Install Tool oder der Installation mit der typo3console. Mit ein paar manuellen Einträgen in der LocalConfiguration.php geht es aber.
Bestehende Systeme lassen sich relativ einfach in den app oder web importieren. Das Importieren von Datenbanken über SequelPro ist manchmal schwierig aber direkt in der Konsole geht es besser.

docker exec -i t3cmdtkdev_mysql_1 mysql -udev -pdev typo3 < backup/typo3-***.sql

Docker Verwaltungstools

Docker Container, Images und Volumes können in der Konsole gemanagt werde,. z.B. mit docker ps. Übersichtlich ist anders. Mit dem Original Tool von Docker, Kitematic kann man schon viel machen. In Kombination mit Portainer wir es dann schon ziemlich übersichtlich.

Lokale Tools benutzen

Auf fast alles in den Docker Containern kann direkt aus phpstorm zugegriffen werden. Die Wurzel des Projektes sollte der app Ordner sein. Xdebug kann über RUN > Web Server Debug Validation getestet werden. Der Pfad zum Skript sollte auf app/web gesetzt werden und die URL auf example.org. Nach dem drücken auf Validate sollten nur grüne Haken erscheinen.

Auf die Datenbank kann über SequelPro zugegriffen werden. Benutzer und Passwort ist „dev“ und der Port 13306.

TYPO3 Docker in phpstorm

Auf fast alles in den Docker Containern kann direkt aus phpstorm zugegriffen werden. Die Wurzel des Projektes sollte der app Ordner sein. Xdebug kann über RUN > Web Server Debug Validation getestet werden. Der Pfad zum Skript sollte auf app/web gesetzt werden und die URL auf example.org. Nach dem drücken auf Validate sollten nur grüne Haken erscheinen.

Als php Binary sollte das aus dem Docker Container verwendet werden. In den Einstellungen Languages > Php > Cli Interpreter muss ein neuer erstellt werden. Dort muss Docker Compose gesetzt werden, unter Configuration file muss die docker-compose.yml ausgewählt werden und unter Service muss app ausgewählt werden. Dann sollte die Php und xdebug Version des Docker Containers angezeigt werden.
Unter Languages > Php > Server muss ein neuer Server konfiguriert werden. Der Host sollte example.org und der Port auf 8000 stehen. Da bei einer Composer basierten TYPO3 Installation Symlinks verwendet werden muss Use Path Mappings angepasst werden.
local container   
app    /app  
/web/typo3 /app/vendor/typo3/cms/typo3
/web/index.php /app/vendor/typo3/cms/index.php

Zum testen kann hier:
app/web/typo3/sysext/core/Classes/Log/Writer/FileWriter.php::__destruct
ein BreakPoint gesetzt werden.

Damit sollte xdebug funktionieren. In meinem fork sind die xdebug Settings schon auf Docker for Mac angepasst:
; XDebug
xdebug.remote_enable           = 1
xdebug.remote_connect_back     = 0
xdebug.remote_host             = docker.for.mac.host.internal
xdebug.idekey                  = "PHPSTORM"

xdebug.cli_color               = 1
xdebug.max_nesting_level       = 1000

xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_dir     = '/tmp/debug/'

Der interessante Teil ist docker.for.mac.host.internal. Seit Docker vor Mac 17.12.0 geht diese Adresse immer auf die aktuelle IP des MACs. Das ist wichtig, da xdebug mit localhost nicht will.

Netzwerk

Im lokalen Netzwerk ist der Container (z. B. für mobile Testing) unter
localhost
example.org
zu erreichen. Im eigenen Netwerk unter
**Host IP**:8000 oder **Notebook-Name.local**.
Die Einstellungen für Notebook-Name.local ist in den Systemeinstellungen unter Freigaben zu finden.

Thomas Kieslich
Jordanstr. 5
01099 Dresden

0351 2817620
0176 99758866
post@thomaskieslich.de