Zamarzyłem sobie, żeby mieć serwer z Dockerem gdzieś tam (czyli nie na moim laptopie) i móc wygodnie na nim pracować poprzez integrację z PHPStorm. Przedstawiam zatem mój proof of concept takiej konfiguracji.

Serwer gdzieś tam

Na potrzeby testu wykupiłem sobie VPS w Znanej Firmie Hostingowej za całe 15 zł. 😉 Na serwerze postawiłem Ubuntu 16.04.

Dockeryzacja

Docker posiada narzędzie docker-machine, które służy do niczego innego, jak dockeryzowania (instalacji Dockera) i zarządzania hostami z Dockerem.

Nie będę opisywał tutaj szczegółów instalacji Dockera na moim serwerze, gdyż skorzystałem ze świetnego opisu na tym blogu. W skrócie:

  1. Ustawiłem logowania via SSH z mojego Maca na serwer tylko przy użyciu klucza.
  2. Za pomocą komendy podobnej do poniższej, z poziomu mojego laptopa, dokonałem dockeryzacji zdalnego hosta:
  3. Po ustawieniu stosownych zmiennych środowiskowych (po użyciu komendy z punktu 2 jest pokazane jak ustawić te zmienne) Docker widział mój zdalny serwer, tak jak moją dotychczasową, lokalną instancję Dockera. Zatem np. odpalając docker-compose, tak naprawdę uruchamiałem je na zdalnym hoście.

Testowy projekt

Struktura plików testowego projektu wygląda następująco:

Docker

Podkatalog “docker” kryje konfigurację kontenera na którym uruchamiana jest testowa aplikacja.

Zawartość pliku “Docker-web1”:

Są dwa pliki do docker-compose. Podstawowy (“docker-compose.yml”):

oraz ustwienia własne, które dostosowują montowaną scieżkę (“docker-compose.dev.yml”):

Aplikacja

Aplikacja jest mocno testowa i w zasadzie ma tylko pokazać działanie PHPUnit i XDebuga.

Zwartość “src/web/index.php”

Zawartość “src/tests/Message/MessageTest.php”:

Uruchomienie kontenera

Przegrywamy pliki projektu na serwer zdalny – do katalogu użytkownika za pomocą, którego dokeryzowaliśmy hosta.

Następnie z poziomu lokalnego komputera upewniamy się, że docker-machine jest przełączona na zdalnego hosta:

Następnie można uruchomić kontener za pomocą docker-compose z lokalnego komputera:

Nie zawarłem w “Dockefile-web1” instalacji zależności z Composera na kontenerze, więc należy to zrobić (np. używając dokcerowego exec).

Po wszystkim, na porcie 32001, mamy działająca aplikację.

XDebug

Właściwie integracja PHPStorm z XDebug nie różni się niczym od serwera niedokerowego. Należy tylko pamiętać, żeby nasłuchiwać na porcie wskazanym w konfiguracji PHPStorm:

Reszta postępowania jest opisana w tutorialu JetBrains.

PHPUnit

Konfigurujemy PHPUnit ze zdalnym interpreterem w zdalnym kontenerze, dodając nowy interpereter (“+”):

Klikamy na “…” w celu dodania interpretera, następnie “+” i “Remote”, po czym mamy takie okno:

następnie “New…”. Po czym zaznaczamy “Import credentials form Docker Machine” i klikamy “Detect” – w ten sposób nasz zdalny kontener zostanie wykryty:

Po zatwierdzeniu mamy zdalny interpereter:

Potwierdzamy “OK” i wybieramy go z listy:

i kończymy konfigurację w oknie PHPUnit, uzupełniając najpierw ścieżki z pola “Docker container” na te na serwerze zdalnym:

Plik “phpunit.xml” zawiera konfigurację PHPUnit:

“autoloader.php” posłuży do załadowania klas potrzebnych PHPUnit:

Potwierdzamy  i przechodzimy do głównego okna PHPStorm, gdzie wybieramy z górnego prawego rogu:

klikamy “+” i wybieramy “PHPUnit”. Dodajemy nazwę i wybieramy, żeby zakres testu był ładowany z konfiga:

po zatwierdzeniu, wybieramy w prawym górnym rogu nasze testy i odpalamy je:

na dole widzimy wyniki:

🙂

Podusmowanie

Przedstawiłem prosty “proof of concept” jak można użyć Dockera na zdalnym hoście, integrując się przy okazji z popularnymi IDE, jakim jest PHPStorm.