Im Grunde wird dieses Tutorial eine Zusammenfassung folgender Anleitungen + ein paar interessante Tweaks:
- https://docs.microsoft.com/en-us/windows/wsl/install-win10
- https://docs.docker.com/docker-for-windows/wsl/
- https://www.ddev.com/ddev-local/ddev-local-and-phpstorm-debugging-with-wsl2/
Hintergrund:
Um eine akzeptable Performance zu erreichen, sollten Projekte im Dateisystem des Windows Subystem for Linux (kurz WSL) liegen.
Wenn zum Beispiel dann PHPStorm (oder alternativ WebStorm, o. ä.), zum Bearbeiten genutzt wird, registriert es selten bis gar nicht auf Änderungen der Dateien und übernimmt Sie auch genauso selten.
Als Lösung kann man hier die Entwicklungsumgebung im WSL installieren.
Disclaimer: Die ganze Anleitung kann sich jeder Zeit ändern. Die zugehörigen Dokumentationen sind allerdings verlinkt.
1. Windows Subsytem for Linux installieren
Eine ausführliche Anleitung findet sich bei Microsoft selbst, daher hier nur eine kurze Zusammenfassung:
1. WSL aktivieren:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
2. Virtual Machine Feature aktivieren:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
Danach muss ein Neustart vom System durchgeführt werden.
3. Linux Kernel Package herunterladen:
Dazu einfach aus der oben verlinkten Anleitung von Step 4 oder hier den direkten Download starten und ausführen: https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
4. WSL2 als Default Version setzen:
wsl --set-default-version 2
5. Eine Linux Distribution installieren:
Dazu kann im Microsoft-Store eine Linux-Distribution ausgewählt werden.
6. Eine neue Linux Distribution einrichten:
Die Linux Distribution kann dann über den Befehl
wsl
gestartet werden, alternativ kann auch über "Start" die Distribution gestartet werden.
Beim ersten Start muss dann einmal ein Benutzername und ein Passwort vergeben werden.
Falls bereits eine WSL1 - Linux Distribution installiert war, kann diese mithilfe folgender Commands zu WSL2 konvertiert werden:
wsl --list --verbose
wsl --set-version <distribution name> <versionNumber>
Dazu sollte auch die Standard-Version gesetzt werden:
wsl --set-default-version 2
2. Docker installieren
Docker wird einfach dem Setup nach installiert. Dazu wird es zunächst einmal heruntergeladen:
https://hub.docker.com/editions/community/docker-ce-desktop-windows/
Bei unterstützten Systemen (Windows 10 Version 1903 oder höher) erkennt das Setup automatisch, dass es das WSL 2 nutzen kann.
Startet nach der Installation Docker über das Windows Start Menü. Wählt bei dem Punkt "Use the WSL 2 based engine" die Checkbox aus, falls sie nicht schon ausgewählt ist. Mit einem Klick auf "Apply & Restart" werden die Änderungen übernommen.
Um den WSL Modus zu überprüfen, führt den folgenden Befehl aus:
wsl.exe -l -v
Eine bestehenden Distribution kann mit dem Befehl auf WSL 2 geupdated werden:
wsl.exe --set-version (distro name) 2
Und um Version 2 als Standard zu setzen, führt den Befehl aus:
wsl.exe --set-default-version 2
Ihr könnt unter Settings > Resources > WSL Integration, in welcher Distribution Docker läuft.
Standardmäßig läuft es in der Default WSL Distribution. Dies kann man mit Hilfe des Befehls
wsl --set-default <distro name>
ändern. Der Name ist der gleiche, der auch unter
wsl.exe -l -v
aufgeführt wird. Dies kann dann so aussehen:
3. PHPStorm installieren
PHPStorm kann natürlich auch ganz normal installiert werden, wie man es von Windows Programmen kennt: https://www.jetbrains.com/phpstorm/
Das Projekt selber kann zwar unter /mnt/ (also direkt über den Windows Explorer erreichbar) liegen, dann ist die Performance aber ziemlich schlecht. Als Workaround verschiebt man die Projekte einfach in das Dateisystem vom WSL2, also zum Beispiel unter /home/<username>/.../<projectdir>.
In PHPStorm kann dann über den Pfad \\wsl$\Ubuntu\home\<username>\...\<projectdir> das Projekt aufgerufen werden. Schnell wird hier nur klar, das PHPStorm nicht zuverlässig Änderungen an den Dateien erkennt...
Dies kann umgangen werden, indem man PHPStorm direkt in das WSL2 installiert und über einen X11-Server die Fenster in Windows angezeigt werden. Dazu werden folgende Schritte notwendig:
Zunächst muss einmal der X11-Server installiert werden. Dieser kann hier zum Beispiel heruntergeladen werden: https://sourceforge.net/projects/vcxsrv/
VcXsrv wird dann mittels einer config Datei gestartet. Diese kann wie folgt aussehen (kann bspw. als "config.xlaunch" abgespeichert werden):
<?xml version="1.0" encoding="UTF-8"?>
<XLaunch WindowMode="MultiWindow" ClientMode="NoClient" LocalClient="False" Display="-1" LocalProgram="xcalc" RemoteProgram="xterm" RemotePassword="" PrivateKey="" RemoteHost="" RemoteUser="" XDMCPHost="" XDMCPBroadcast="False" XDMCPIndirect="False" Clipboard="True" ClipboardPrimary="False" ExtraParams="-ac -terminate -lesspointer -dpi auto" Wgl="True" DisableAC="False" XDMCPTerminate="False"/>
Die Datei kann auch in den Autostart gelegt werden, dann startet der X11-Server schon vorkonfiguriert bei der Anmeldung.
Windows Defender blockt standardmäßig den Zugriff den Zugriff aus WSL heraus auf den X11-Server: https://github.com/microsoft/WSL/issues/4139
Der Zugriff kann über Firewallregeln erlaubt werden:
- In der Windows Suche nach "Windows Defender Firewall mit erweiterter Sicherheit" suchen und unter "Eingehenden Regeln" nach "VcXsrv windows server" suchen
- Bei dem Eintrag für Öffentlich und TCP muss die Aktion auf "Zulassen" gesetzt werden, aber nur für die Remoteadresse "172.16.0.0/12". Die Werte können über einen Rechtsklick auf den entsprechenden Eintrag und Eigenschaften gemacht werden. Die IP wird unter "Bereich" und "Remote-IP-Adresse" eingetragen.
Standardmäßig bekommt das WSL2 eine IP Adresse zugewiesen, die aus diesem Bereich kommt. Falls es anders konfiguriert wurde, muss dies natürlich entsprechend angepasst werden.
Nachtrag: es sollte noch der Bereich um "192.168.0.0/16" eingetragen werden, da dies das WSL2 auch nutzt.
Die Einstellungen sehen dann so aus:
Und die gesamten Regeln in etwa so (die zu bearbeitende Regel ist markiert):
Jetzt muss im WSL2 noch der X11-Client und dazugehörige Software installiert werden:
sudo apt-get update && sudo apt-get install libatk1.0 libatk-bridge2.0 libxtst6 libxi6 libpangocairo-1.0 libcups2 libnss3 xdg-utils x11-apps
und mittels des Befehls
export DISPLAY=$(awk '/^nameserver/ {print $2; exit;}' </etc/resolv.conf):0.0
wird die Zieladresse des X11-Servers gesetzt. Dies kann auch in die ~/.profile eingetragen werden, dann muss dieser nicht bei jedem Start des Systems manuell ausgeführt werden.
Nun kann auch PHPStorm installiert werden. Dies wird relativ einfach erledigt:
Die tar.gz von https://www.jetbrains.com/phpstorm/download/ (Tab "Linux")wird in das gewünschte Verzeichnis entpackt, und mittels
bin/phpstorm.sh &
gestartet.
Falls man ein Desktop Icon haben möchte, kann dies so erstellt werden:
Rechtsklick auf den Desktop und unter "Neu" wird "Verknüpfung erstellen" ausgewählt. Als Ziel dann folgende Adresse angeben:
C:\Windows\System32\wsl.exe -d Ubuntu -- export DISPLAY=$(awk '/^nameserver/ {print $2; exit;}' </etc/resolv.conf):0.0 && /home/<user>/PhpStorm/bin/phpstorm.sh
Der Pfad zur phpstorm.sh muss dann noch angepasst werden.
Über einen Rechtsklick auf die Verknüpfung und "Eigenschaften" kann dann auch noch das Icon angepasst werden.
4. (Optional) Das Dateisystem des WSL2 vergrößern
Unter Umständen kann die Standardgröße von 256GB im WSL2 erreicht werden. Die Größe kann aber über ein paar Eingaben geändert werden. Dazu müssen folgende Schritte unter "Expanding the size of your WSL 2 Virtual Hard Disk" beachtet werden:
https://docs.microsoft.com/en-us/windows/wsl/vhd-size
Fragen oder Anmerkungen?