PHPSTORM + WSL2 + DOCKER

Osiem lat – tyle czasu minęło odkąd ostatnio używałem Windowsa podczas programowania. Korzystałem w tym czasie z Linuxa i osMaca. Polityka cenowa i sprzętowa Appla jednak przestała mi odpowiadać. Sprzęt coraz droższy, a jakość wykonania coraz słabsza (np. psujące się klawiatury). Jako że potrzebny mi w domu stojąca jednostka PC do innych prac, postanowiłem wypróbować jak działa zachwalany WSL2 na Windowsie i zostałem mocno zaskoczony… Pozytywnie! Od tego czasu Windows został moim głównym system operacyjnym.

UWAGA! Ten wpis jest swoistym rozszerzeniem filmu na Youtube jak ustawić opisywane środowisko pracy. W razie problemów zobacz film:

W tym wpisie pokażę Ci jak skonfigurować WSL2 z Dockerem i z PhpStorm, aby pracowało się szybko i komfortowo. Na początku instalowałem swoje aplikacje w katalogu, który był montowany w WSL2 i korzystałem z Windowsowej wersji PhpStorm, jednak takie rozwiązanie było strasznie wolne. Użycie composera do zainstalowania zależności dłużyło się w nieskończoność. Tak to wyglądało na początku:

Wtedy zacząłem szukać alternatywnej metody ustawień i okazało się, że można uruchomić programy graficzne z Linuksa w Windowsie za pomocą serwerów X na Windosie. Ja użyłem VcXsrv i go opiszę w tym tutorialu. Tak wyglądają moje ustawienia teraz:

Nie będę tutaj opisywać jak zainstalować dystrybucję Linuxa na WSL2. Poradników tego pokroju jest w sieci bardzo dużo. W razie potrzeby na stronie Microsoftu można znaleźć instrukcję jak to zrobić: https://docs.microsoft.com/en-us/windows/wsl/install-win10 W tym poradniku używam Ubuntu 20.04, ale inne dystrybucje działają identycznie. Na co dzień pracuje na Debianie. Zakładam więc, że masz już zainstalowane Ubuntu i masz otwarty terminal (może być standardowy, ale dla wygody polecam Microsoft Terminal).

Instalacja Dockera na Linuksie

Na początku zainstalujmy Dockera na naszym Linuksie. Robimy to zgodnie z instrukcją na stronie Dockera (w razie problemów zobacz mój film na YT. Pokazuję tam jak to robię):

https://docs.docker.com/engine/install/ubuntu/

Następnie ustawiamy Dockera tak, aby można było uruchomić go bez sudo (na końcu zamknij i otwórz terminal ponownie):

https://docs.docker.com/engine/install/linux-postinstall/

Konfigracja Dockera na Windowsie

Teraz musimy zainstalować Dockera na Windowsie i w ustawieniach włączyć integrację WSL2 z naszą dystrybucją.

Instalacja LAMP (Docker)

Sprawdźmy czy wszystko działa. Stwórzmy sobie kontener LAMP w Dokerze (https://hub.docker.com/r/mattrayner/lamp). W konsoli wpisujemy:

docker pull mattrayner/lamp
cd ~
docker run -p "80:80" -v ${PWD}/app:/app mattrayner/lamp:latest-1804

Te dwa polecenie pobiorą nam odpowiedzi obraz LAMP i uruchomią serwer. W Windowsie w Twojej przeglądarce powinien teraz działać adres http://localhost. Teraz nie ma jeszcze, żadnego pliku na serwerze więc nic się nie pojawia. Zaraz się tym zajmiemy.

Instalacja serwera X pod Windows (VcXsrv)

Teraz możemy pobrać i zainstalować nasz serwer X pod Windows (VcXsrv):

https://sourceforge.net/projects/vcxsrv/

Po uruchomieniu należy wybrać opcje (w 4 ostatnim kroku możesz zapisać konfigurację, aby w przyszłości uruchamiać serwer od razu z zapisanymi ustawieniami):

Konfiguracja serwera X pod Linuksem

Teraz musimy „powiedzieć” Linuksowi gdzie ma szukać serwera X.

Wykonaj polecenia:

echo "export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0" >> ~/.bashrc
echo "export LIBGL_ALWAYS_INDIRECT=1" >> ~/.bashrc
echo "export GDK_SCALE=2" >> ~/.bashrc # to ustawienie jest opcjonalne. Zmienia skalę gdy mamy monitor w wysokiej rozdzielczości np. 4k

Ponownie wyłącz i włącz konsolę i zainstaluj przez nią Firefoxa:

sudo apt update
sudo apt install firefox
firefox

Powinno otworzyć się nam okno Linuksowego Firefoxa w Windowsie.

Jeżeli okno jest zamazane, to możesz w Windowsie zmienić ustawienia DPI programu VcXsrv. Kliknij w jego ikonę prawym przyciskiem myszy i ustaw:

"Properties" >> "Compatible" >> "Change high DPI settings" >> zaznacz "Override high DPI scaling behavior" >> wybierz "Application".

Instalacja Toolbox App i PhpStorm (Linuks)

Możemy teraz pobrać „Toolbox App” za pomocą tej przeglądarki:

https://www.jetbrains.com/toolbox-app/download/download-thanks.html?platform=linux

Za pomocą tej instrukcji instalujemy Toolboxa:

https://www.jetbrains.com/help/idea/installation-guide.html#75ad

sudo tar -xzf jetbrains-toolbox-XXXX.tar.gz -C /opt

Możemy użyć też tego skryptu:

https://github.com/nagygergo/jetbrains-toolbox-install

Robimy to za pomocą:

git clone https://github.com/nagygergo/jetbrains-toolbox-install.git
cd jetbrains-toolbox-install
./jetbrains-toolbox.sh

Aby jenak uruchomić Toolboxa należy najpierw zainstalować kilka zależności:

sudo apt-get update && sudo apt-get install libatk1.0 libatk-bridge2.0 libxtst6 libxi6 libpangocairo-1.0 libcups2 libnss3 xdg-utils x11-apps libgbm-dev

Pozostaje nam uruchomić Toolboxa:

jetbrains-toolbox

Test i zakończenie

Gdy pojawi sie okno Toolboxa to możemy zainstalować PhpStorma i w nim utworzyć projekt np. w naszym Dokerze. W katalogu app dodajmy plik index.php z zawartością:

<?php
echo 'Hello World!';

Uruchom ponownie Dockera i pod adresem http://localhost powinieneś zobaczyć wspomniany napis.

Gratulacje! Właśnie udało Ci się wszystko skonfigurować.

Jeżeli chcesz wiedzieć więcej na temat PhpStorma i chcesz profesjonalnie wykorzystywac to narzędzie to zapraszam do mojego darmowego kursu o PhpStorm:

https://kurs.superstorm.pl/site/mini.html

11 thoughts on “PHPSTORM + WSL2 + DOCKER

  • Reply emi 29 września, 2020 at 11:50 am

    masz rozdzielczość 4k, czy 2,5 k?

    • Reply admin 30 września, 2020 at 7:42 am

      4k, ale masz rację w Windowsie mam ustawioną skalę na 150%, więc wszystko jest większe.

      • Reply emi 30 września, 2020 at 11:49 am

        ok, dzieki.
        Swoją drogą podczas próby uruchamiania np. firefoxa (z konsoli) nic się nie dzieje. Po jakimś czasie pojawia się:
        Unable to init server: Broadway display type not supported: 172.17.211.225:0
        Error: cannot open display: 172.17.211.225:0

        Oczywiście xLaunch jest uruchomiony na Windowsie.

        • Reply admin 30 września, 2020 at 12:29 pm

          Stawiam na dwie możliwości: firewall pod windowsem (możesz go tymczasowo wyłączyć na próbę), lub nie zrestartowałeś konsoli po zmianach w .bashrc. Ewentualnie w konfiguracji xLaunch nie zaznaczyłeś checkboxu. Daj znac czy pomogło 🙂

  • Reply Kamil Jakubowski 29 września, 2020 at 9:32 pm

    Przeszedłem jakiś czas temu dokładnie tą samą drogę i potwierdzam, że w chwili obecnej jest to jedyne sensowne rozwiązanie do programowania z docker i phpstorm na Windows 10

    Pozdrawiam!

  • Reply Doktor 1 listopada, 2020 at 3:15 pm

    Witam, w jaki sposób masz skonfigorwanego xdebuga do debugowania HTTP requestów – skąd host ma znać adres IP hosta – ubuntu. W kontenerze PHP adres host.docker.internal będzie wskazywał na IP windowsa, wiec Request nie przejdzie do PHPstorma

  • Reply PHPSTORM + Xdebug (2/3) + WSL2 + DOCKER - Superstorm.pl 30 grudnia, 2020 at 3:41 pm

    […] też fanem gier komputerowych i mam PC z Windowsem. We wcześniejszym wpiście opisałem jak można połączyć WSL2 z Dockerem i PhpStorm. Wpis się spodobał i czas na dodanie […]

  • Reply Michał 3 stycznia, 2021 at 8:43 am

    Nie trzeba używać X-ów żeby odpalić phpstorma. Można go uruchomić normalnie na Windowsowym hoście i podać ścieżkę do projektu w stylu: \\wsl$\Ubuntu-20.04\home\michal\www … i tak dalej

    • Reply admin 4 stycznia, 2021 at 7:27 am

      Masz rację Michał. Od wersji Windows 1903 można zmieniac już pliki w tym katalogu. https://devblogs.microsoft.com/commandline/do-not-change-linux-files-using-windows-apps-and-tools/
      Do prostych projektów można tak ustawić system. Zastanawaim się jak działa wtedy np. Xdebug i jaka jest prędkość działania. Dobry temat na kolejny wpis. Dzięki!

      • Reply Michał 5 stycznia, 2021 at 10:36 am

        xdebug działa bez problemu. PHPStorm od chyba 2020.2 obsługuje mapowanie na takie ścieżki. Co do wydajności – nie zauważyłem problemów. Jedyną rzeczą która trochę wkurza jest to, że storm trochę ma opóźnienia w synchronizacji plików, jeśli zostały zmienione bezpośrednio w WSL. Odświeża dopiero po dłuższej chwili.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *