WP-CLI-Scripte mit PHPStorm aus Docker Container debuggen

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