IDE
{ }
PhpStorm · Docker · Magento 2 · Xdebug
PhpStorm als Zentrale für
Docker- und Magento-Projekte

PhpStorm kann mehr als nur Code anzeigen: Docker-Compose-Services starten, Xdebug im Container aktivieren, Magento-CLI-Befehle ausführen und Remote-Interpreter für Autocompletion nutzen – wenn man weiß, was wirklich zusammengehört und was besser im Terminal bleibt.

20 Min. Lesezeit Docker · Xdebug · Remote-Interpreter · Magento-CLI · Mark Shust Setup PhpStorm 2024+ · Magento 2.4.x · PHP 8.4

1. Was PhpStorm wirklich zur Zentrale macht

PhpStorm ist keine Ansammlung von Einzelfunktionen, sondern ein integriertes System. Der Schlüssel liegt darin zu verstehen, welche Teile dieses Systems bei Docker- und Magento-Projekten tatsächlich zusammenarbeiten und wie sie sich gegenseitig verstärken. Ein Remote-PHP-Interpreter, der auf den Docker-Container zeigt, ist die Grundlage für alles andere: Autocompletion mit dem richtigen PHP-Kontext, PHPUnit-Ausführung im Container, Xdebug-Sessions die funktionieren, und externe Tools die die richtige PHP-Version verwenden.

Für Magento-Projekte mit dem Mark-Shust-Docker-Setup kommt hinzu, dass die Entwicklung ausschließlich über Container-Befehle läuft. Das lokale PHP spielt keine Rolle. PhpStorm muss diese Realität abbilden, damit Autocompletion, Navigation und Debugging mit demselben PHP-Kontext arbeiten, der auch im Browser sichtbar ist. Sobald der Remote-Interpreter korrekt eingerichtet ist, ergibt sich vieles von selbst: PhpStorm erkennt den PHP-Kontext, Xdebug-Konfiguration zeigt automatisch die richtigen Optionen, und Run Configurations nutzen den Container-PHP.

Die Grenze von PhpStorm liegt dort, wo Docker-Orchestrierung komplexer wird. Docker-Compose mit vielen Services starten, Logs aus mehreren Containern gleichzeitig beobachten, Build-Prozesse steuern – das bleibt effizienter im Terminal. PhpStorm ergänzt den Terminal-Workflow, ersetzt ihn nicht vollständig.

2. Remote-PHP-Interpreter für Docker einrichten

Der Remote-PHP-Interpreter ist die wichtigste Einstellung für Docker-basierte PHP-Projekte in PhpStorm. Er verbindet PhpStorm mit dem PHP im Container und ermöglicht, dass alle IDE-Funktionen mit dem richtigen PHP-Kontext arbeiten. Die Einrichtung erfolgt unter Settings → PHP, wo man bei "CLI Interpreter" ein neues Profil anlegen kann.

Für das Mark-Shust-Setup wählt man als Interpreter-Typ "Docker Compose" und wählt die entsprechende compose.yaml aus. PhpStorm startet dann für Analysen und Werkzeugaufrufe den PHP-Container. Alternativ kann man einen SSH-Tunnel zum Container nutzen oder den Interpreter direkt über den Docker-Socket verbinden. Wichtig: die PHP-Version im Remote-Interpreter muss mit der im Container übereinstimmen – bei PHP 8.4 mit strikten Typen ist das besonders relevant, weil PhpStorm sonst falsche Typ-Fehler anzeigt.


# compose.yaml (Mark Shust Setup) — relevanter phpfpm-Service
services:
  phpfpm:
    image: markoshust/magento-php:8.4-fpm-0
    volumes:
      # Lokales src/ wird unter /var/www/html im Container gemountet
      - ./src:/var/www/html:cached
      - ~/.composer:/var/www/.composer:cached
      - ~/.ssh/id_rsa:/var/www/.ssh/id_rsa:cached
    environment:
      XDEBUG_MODE: "${XDEBUG_MODE:-off}"
      XDEBUG_CLIENT_HOST: "${XDEBUG_CLIENT_HOST:-host.docker.internal}"
      XDEBUG_CLIENT_PORT: "9003"
    extra_hosts:
      - "host.docker.internal:host-gateway"

# PhpStorm Remote-Interpreter Konfiguration:
# Server: Docker Compose
# Configuration files: ./compose.yaml
# Service: phpfpm
# Path mappings: ./src → /var/www/html

Nach der Einrichtung des Remote-Interpreters erscheint in PhpStorm unter der PHP-Version ein Symbol, das den Verbindungsstatus anzeigt. Ein Klick auf "Refresh" synchronisiert die installierten PHP-Erweiterungen und aktivierten Module. So weiß PhpStorm, welche Funktionen und Klassen im Container verfügbar sind – inklusive Magento-spezifischer Autoloader-Informationen.

3. Xdebug im Docker-Container mit PhpStorm verbinden

Xdebug im Container ist oft der erste Stolperstein bei Docker-basierten PhpStorm-Setups. Das grundlegende Prinzip: Xdebug im Container verbindet sich aktiv zu PhpStorm auf dem Host (nicht umgekehrt). PhpStorm lauscht auf Port 9003, Xdebug kennt die Host-Adresse über host.docker.internal und stellt die Verbindung her, sobald eine Debug-Session startet.

Mit dem Mark-Shust-Setup ist Xdebug bereits vorkonfiguriert. Das Skript bin/xdebug enable setzt die Umgebungsvariable XDEBUG_MODE=debug und startet den PHP-Container neu. In PhpStorm reicht es, unter Run → Start Listening for PHP Debug Connections zu aktivieren. Breakpoints in PhpStorm werden dann bei der nächsten HTTP-Anfrage erreicht. Wichtig: die Path Mappings müssen korrekt sein, damit PhpStorm die Container-Pfade auf lokale Dateien abbilden kann.


# Xdebug-Konfiguration im Container (automatisch durch Mark Shust Setup)
# /usr/local/etc/php/conf.d/xdebug.ini

[xdebug]
zend_extension=xdebug

; debug = Breakpoints, remote_autostart
; coverage = Code Coverage für PHPUnit
; profile = Profiling (nie im Dev-Betrieb aktiv lassen)
xdebug.mode=debug

; Container verbindet sich aktiv zum Host
xdebug.client_host=host.docker.internal
xdebug.client_port=9003

; Session-ID für Browser-Trigger (XDEBUG_SESSION Cookie)
xdebug.idekey=PHPSTORM

; Start Debug-Session ohne Browser-Trigger (für CLI-Debugging)
; xdebug.start_with_request=yes  ← nur für bin/debug-cli aktivieren

; Log für Verbindungsprobleme
xdebug.log=/tmp/xdebug.log
xdebug.log_level=3

Für CLI-Debugging – zum Beispiel Magento-Migrations oder Konsolenbefehle debuggen – nutzt man bin/debug-cli enable, das XDEBUG_SESSION=PHPSTORM als Umgebungsvariable setzt. Damit startet Xdebug bei jedem CLI-PHP-Aufruf automatisch eine Debug-Session, ohne dass ein Browser-Cookie gesetzt werden muss. In PhpStorm muss dann ebenfalls "Listen" aktiv sein.

4. Magento-CLI-Befehle aus PhpStorm starten

Magento-CLI-Befehle aus PhpStorm zu starten spart Kontextwechsel. Über Run Configurations (Typ "Shell Script") kann man beliebige Wrapper-Skripte aus dem bin/-Verzeichnis einbinden. Nützliche Konfigurationen: bin/magento cache:flush auf einem Shortcut, bin/magento setup:upgrade als dedizierter Run-Task, oder ein kombinierter Task der CSS-Build, Static-Deploy und Cache-Flush hintereinander ausführt.

Eine Compound Run Configuration ermöglicht, mehrere dieser Tasks in einer Konfiguration zu bündeln und mit einem einzigen Klick zu starten. Das ist besonders nützlich für den Deploy-Workflow: CSS bauen, Static Files löschen, Static Content deployen, Cache leeren – alles in einem Schritt aus PhpStorm heraus.


#!/usr/bin/env bash
# Beispiel: Compound-Deploy-Skript als Run Configuration
# Script path: bin/deploy-dev
# PhpStorm: Run → Edit Configurations → + → Shell Script

set -euo pipefail

# 1. CSS neu bauen (Tailwind v4)
bin/npm --prefix app/design/frontend/Mironsoft/default/web/tailwind run build

# 2. Static Files löschen — immer zuerst!
cd src && rm -rf var/view_preprocessed/* pub/static/frontend/*
cd ..

# 3. Static Content deployen
bin/magento setup:static-content:deploy de_DE \
    -t Mironsoft/default \
    --jobs=4 \
    -f

# 4. Cache leeren
bin/magento cache:flush

echo "Deploy abgeschlossen."

Für häufig verwendete einzelne Magento-Befehle lohnt sich die Konfiguration unter Settings → Tools → External Tools statt als Run Configuration – externe Tools können direkt im Kontextmenü angezeigt werden und sind sofort verfügbar, ohne die Run-Configuration-Auswahl öffnen zu müssen.

5. Path Mappings: Container-Pfade und lokale Pfade abbilden

Path Mappings sind die Brücke zwischen dem lokalen Dateisystem und dem Container. PhpStorm muss wissen, dass /var/www/html/app/code/Vendor/Module/Model/Foo.php im Container identisch ist mit /home/mir/development/mironsoft/src/app/code/Vendor/Module/Model/Foo.php lokal. Ohne diese Zuordnung funktioniert Xdebug: Breakpoints werden nicht erkannt, weil PhpStorm die Dateipfade aus Xdebug-Nachrichten nicht auflösen kann.

Path Mappings konfiguriert man an mehreren Stellen in PhpStorm: im Remote-Interpreter (für Autocompletion-Kontext), im Xdebug-Server unter Settings → PHP → Servers (für Breakpoints), und in den Run Configurations für PHPUnit (für Test-Ausführung). Alle drei Stellen müssen konsistent konfiguriert sein. Im Mark-Shust-Setup ist die Grundregel einfach: lokales ./src entspricht Container-Pfad /var/www/html.

6. Docker-Compose-Services aus PhpStorm steuern

PhpStorm erkennt compose.yaml-Dateien automatisch und bietet einen Services-Tab im Tool-Window, der den Status aller Services anzeigt. Von dort aus lassen sich einzelne Services starten, stoppen und neu starten, ohne das Terminal zu öffnen. Für den täglichen Workflow mit Magento reicht das für einfache Operationen wie den Nginx- oder phpfpm-Neustart nach Konfigurationsänderungen.

Der echte Mehrwert liegt aber im Services-Window für Logs: Jeder Container-Service hat einen eigenen Log-Stream, der direkt in PhpStorm angezeigt wird. So kann man während der Entwicklung den phpfpm-Log und den Nginx-Log gleichzeitig im Blick haben, ohne zwei Terminal-Tabs zu öffnen. Bei Magento-Fehlern der Art "502 Bad Gateway" sieht man sofort im phpfpm-Log, was die eigentliche Ursache ist.

7. Container-Logs direkt in PhpStorm verfolgen

Container-Logs und Magento-eigene Logs können beide direkt in PhpStorm angezeigt werden. Für Container-Logs nutzt man das Services-Window. Für Magento-Logs (var/log/exception.log, var/log/system.log) eignen sich Run Configurations vom Typ "Shell Script" mit dem Befehl bin/log exception.log. Alternativ gibt es eine Log-Viewer-Konfiguration unter Run Configuration → Logs, die bestimmte Dateien im Projekt beobachtet und bei Änderungen automatisch aktualisiert.

Besonders nützlich: Im Run-Window kann man einen Magento-Befehl und gleichzeitig den Log-Viewer aktiv haben. So sieht man beim Ausführen von bin/magento setup:upgrade sofort, wenn Fehler in der exception.log auftauchen – ohne manuell zwischen Terminal und Log zu wechseln.

8. Was besser im Terminal bleibt

PhpStorm ist kein vollständiger Ersatz für das Terminal. Bestimmte Workflows sind im Terminal schneller und effizienter. Dazu gehören: komplexe Docker-Compose-Operationen mit mehreren Flags, das initiale Setup einer Magento-Umgebung (bin/setup), Composer-Operationen (bin/composer install, bin/composer update), SSH-Verbindungen in den Container (bin/bash) für interaktive Debugging-Sessions, und Build-Prozesse die viele Ausgaben erzeugen und bei denen man den vollständigen Scroll-Verlauf braucht.

Das integrierte Terminal in PhpStorm (View → Tool Windows → Terminal) bietet einen guten Mittelweg: Man bleibt in PhpStorm, hat aber ein vollständiges Terminal mit dem Arbeitsverzeichnis des Projekts. Für die meisten täglichen Magento-Operationen ist das ausreichend, ohne extra Fenster zu wechseln.

9. Vergleich: PhpStorm-Integration vs. Terminal-Workflow

Die Entscheidung, was in PhpStorm und was im Terminal erledigt wird, hängt von der Häufigkeit und Komplexität der Operation ab. Die folgende Tabelle zeigt die Aufteilung für den typischen Magento-Entwicklungsworkflow.

Operation PhpStorm Terminal Empfehlung
Xdebug aktivieren Listen-Button ein/aus bin/xdebug enable + Neustart PhpStorm-Listen + Terminal für enable
Cache leeren Run Configuration bin/magento cache:flush PhpStorm mit Shortcut schneller
Composer install Zu viel Konfiguration bin/composer install Terminal – direkt und übersichtlich
Magento-Logs Log-Viewer / Run Tab bin/log exception.log PhpStorm für Überblick, Terminal für Tail
Container-Shell Eingeschränkt bin/bash – volle Shell Terminal für interaktive Sessions

Der produktivste Workflow kombiniert beide Ansätze: PhpStorm als Zentrale für Autocompletion, Debugging und häufige Befehle, das integrierte Terminal für alles andere. Wer versucht, alles in PhpStorm abzubilden, kämpft gegen die IDE – wer das Terminal komplett ignoriert, verzichtet auf Geschwindigkeit bei komplexen Operationen.

10. Zusammenfassung

PhpStorm wird zur echten Zentrale für Docker- und Magento-Projekte, wenn der Remote-PHP-Interpreter korrekt konfiguriert ist. Alles andere – Xdebug-Integration, PHPUnit im Container, externe Tool-Aufrufe mit dem richtigen PHP – baut darauf auf. Xdebug im Container funktioniert zuverlässig mit dem Mark-Shust-Setup, sobald Path Mappings und der Listener in PhpStorm korrekt konfiguriert sind. Magento-CLI-Befehle als Run Configurations und externe Tools sparen Kontextwechsel beim täglichen Arbeiten.

Die wichtigste Erkenntnis: PhpStorm ersetzt das Terminal nicht, sondern ergänzt es. Debugging, Autocompletion, Code-Navigation und häufige Befehle profitieren von der IDE-Integration. Komplexe Docker-Operationen, Composer und interaktive Shell-Sessions bleiben effizienter im Terminal. Wer diese Grenze kennt, nutzt beide Werkzeuge optimal.

PhpStorm + Docker + Magento — Das Wichtigste auf einen Blick

Remote-Interpreter

Settings → PHP → CLI Interpreter → Docker Compose → phpfpm-Service wählen. Grundlage für Autocompletion, Xdebug und externe Tools mit richtigem PHP-Kontext.

Xdebug Setup

bin/xdebug enable + PhpStorm Listen aktivieren. Path Mappings: ./src/var/www/html. Server in Settings → PHP → Servers anlegen.

Magento-CLI

Wrapper-Skripte aus bin/ als Run Configurations. Compound Configuration für Deploy-Workflow: CSS-Build + Static-Deploy + Cache-Flush in einem Schritt.

Terminal vs. PhpStorm

PhpStorm für Debugging, häufige Befehle und Logs. Terminal für Composer, komplexe Docker-Ops und interaktive Shell-Sessions. Beide sinnvoll kombinieren.

Mironsoft

Magento 2 Entwicklung, Docker-Setup und PhpStorm-Integration

Magento-Entwicklungsumgebung die wirklich funktioniert?

Wir richten euer Docker-Magento-PhpStorm-Setup vollständig ein: Remote-Interpreter, Xdebug, Path Mappings und Run Configurations – sodass das Team sofort produktiv ist, ohne stundenlange Konfigurationsarbeit.

Docker-Setup

Mark Shust oder Custom Docker-Compose für Magento 2.4.x mit PHP 8.4 und Xdebug einrichten

PhpStorm Config

Remote-Interpreter, Path Mappings, Xdebug-Server und Run Configurations für das Team dokumentieren

Team-Onboarding

Setup so dokumentieren dass neue Entwickler in unter einer Stunde produktiv arbeiten können

11. FAQ: PhpStorm als Zentrale für Docker und Magento

1Remote-PHP-Interpreter für Docker einrichten?
Settings → PHP → CLI Interpreter → + → Docker Compose. compose.yaml und phpfpm-Service wählen. Path Mapping: ./src/var/www/html.
2Xdebug findet PhpStorm nicht – was prüfen?
Listen aktiv? client_host korrekt (host.docker.internal)? Port 9003 offen? Path Mappings in Settings → PHP → Servers? xdebug.log für Details.
3Was sind Path Mappings?
Verbinden Container-Pfade mit lokalen Pfaden. /var/www/html./src. Ohne korrekte Mappings: Breakpoints funktionieren nicht.
4Magento-CLI aus PhpStorm starten?
Run → Edit Configurations → Shell Script. Script path auf bin/magento cache:flush. Shortcut in Keymap zuweisen. Compound für Deploy-Workflow.
5Magento-CLI-Befehl mit Xdebug debuggen?
bin/debug-cli enable setzt XDEBUG_SESSION=PHPSTORM. Listen in PhpStorm aktivieren, Breakpoints setzen, CLI-Befehl ausführen.
6Was zeigt das Services-Window?
Alle Docker-Compose-Services mit Status, Start/Stop einzelner Services, Container-Logs in Echtzeit. Gut für simultane phpfpm- und nginx-Log-Beobachtung.
7Was bleibt besser im Terminal?
Composer install/update, bin/setup, bin/bash, komplexe Docker-Ops. Im Terminal schneller und übersichtlicher als in PhpStorm-Konfigurationen.
8Magento-Logs in PhpStorm verfolgen?
Run Configuration: Shell Script → bin/log exception.log. Oder Run Config → Logs → + → Pfad zur Logdatei. PhpStorm aktualisiert automatisch.
9PhpStorm Settings für alle Entwickler teilen?
.idea/-Dateien committen: Run Configurations, Server-Definitionen, External Tools. Remote-Interpreter bleibt lokal. Setup-Dokumentation für neue Entwickler erstellen.
10Docker-Integration unter Linux anders?
host.docker.internal braucht unter Linux: extra_hosts: - 'host.docker.internal:host-gateway'. Mark-Shust-Setup bringt compose.dev-linux.yaml bereits mit.