TYPO3 Entwicklung mit Docker und xdebug
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
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.