PHPStorm hat seit Anfang 2017 nun auch endlich den Docker-Support mit an Board. Leider lässt sich PHP aus Local by Flywheel nicht mit PHPStorm verbinden. Damit kann man keine CLI-Scripte im Docker-Container debuggen, oder? Hier steht, wie’s trotzdem funktioniert.
Meine Entwicklungsumgebung
Ich nutze seit Mitte 2016 Local als WordPress-Entwicklungsumgebung. Vormals hieß die App Pressmatics. Damit lassen sich sehr einfach und schnell neue WordPress-Seiten als Docker-Container starten.
Schon eine Weile kämpfe ich mit dem Debugging von PHP CLI-Scripten aus Docker-Containern heraus und habe es nie zum Laufen gebracht.
Keine Lösung: Docker-Integration in PHPStorm
Seit Anfang des Jahres hat PHP-Storm nun auch eine Docker-Integration. Allerdings bringt mir diese nichts, da sie nicht mit Local zusammenarbeitet. PHP kann dort drin nicht aufgerufen werden, was wiederum dazu führt, dass man keinen CLI-Interpreter hinzufügen kann.
Das funktionierte also schon einmal nicht. Also habe mal die Hilfe von Jetbrains bemüht und bin auf den Artikel “Debugging PHP-CLI Scripts” gestoßen.
Lösung: Konfiguration von XDEBUG
Die Lösung ist denkbar einfach. Man muss lediglich
export XDEBUG_CONFIG=
"remote_enable=1 remote_mode=req remote_port=9000 remote_host=192.168.5.41 remote_connect_back=0"
in der Konsole eingeben bevor man die WP-CLI bemüht. Wobei die IP-Adresse (bei mir 192.168.5.41) durch die IP-Adresse des lokalen Rechners oder Laptops ausgetauscht werden muss. Denn die CLI-Läuft ja im Docker-Container und hat deshalb eine andere IP-Adresse als der Rechner auf dem PHPStorm läuft.
Konfiguration von PHPStorm
Nun muss nur noch PHPStorm richtig konfiguriert werden. Und das geht über Run > Webserver Debug Validation. Im neuen Fenster wählt man “Remote Web Server” aus und fügt dann die neue Seite.
Danach muss man lediglich noch unter Run > Start Listening for PHP Debug Connections auswählen und das war’s.
In der Konsole sollte man dann noch
export PHP_IDE_CONFIG="serverName=meineseite.dev"
übergeben, wobei meinseite.dev mit dem Namen des Remote Web Servers ersetzt werden sollte.
Noch einfacher: Über die Bash oder SH-Script
Noch einfacher geht’s über einen eigenen Bash-Befehl, den man in die bash_profile-Datei einfügt: Gefunden hier.
Oder man baut sich ein eigenes Shell-Script und legt es im Docker-Container unter /usr/local/bin/wpd ab:
#!/bin/sh
export XDEBUG_CONFIG="remote_host=192.168.5.41"
export PHP_IDE_CONFIG="serverName=meinesete.dev"
wp --allow-root "$@"
unset XDEBUG_CONFIG
unset PHP_IDE_CONFIG