Techniczno-życiowy blog.

[IT][Programowanie] xdebug + LEMP stack (nginx) + phpstorm, szybka konfiguracja

Brak komentarzy
Cześć wam,

Spędziłem dziś kilka godzin walcząc z poprawną konfiguracją remote xdebuga z serwerem, który stoi na LEMP stacku. Zasadniczo pewnie można znaleźć kilka poradników jak to postawić, jednak zdecydowałem się umieścić moją ekstremalnie szybką konfigurację w formie postu na blogu - dla przyszłych pokoleń.

== Słowem wstępu ==
Na komputerze developersim musimy mieć zainstalowane środowisko wykonywalne PHP. Najszybsza instalacja:
  • Windows: easyPHP
  • Linux (*debian): sudo apt-get install php5
Na serwerze standardowego LEMP stacka (nginx+php+sql), instalacja LEMP stacka to temat na innego posta. Zakładam, że takowy serwer już stoi.

== Instalacja i konfiguracja xdebuga na *debianowych serwerach(eg. ubuntu) ==
  • Logujemy sie na konto root'a:
    sudo su
  • Updatujemy info o repo, instlaujemy php-pear'a z php-devem:
    apt-get update && apt-get install php5-dev php-pear
  • Wywołujemy komendę, wynik komendy kopiujemy:
    find / -name 'xdebug.so' 2> /dev/null
  • Uruchamiamy edytor tekstowy, edytujemy konfigurację PHP'a:
    vim /etc/php5/fpm/php.ini
  • Na końcu pliku dopisujemy
    [XDEBUG]
    zend_extension="WYNIK_KOMENDY_PKT_3"

    xdebug.default_enable = 1

    xdebug.idekey = "www-data"

    xdebug.remote_enable = 1

    xdebug.remote_autostart = 1

    xdebug.remote_port =9000

    xdebug.remote_handler=dbgp

    xdebug.remote_connect_back=true
  • Restartujemy nginx'a i serwer php5-fpm:
    service nginx restart && service php5-fpm restart


== Konfiguracja PHPSTORM'a ==

Ta część konfiguracji najmniej daje się opisać słowami. Niestety, często działanie xdebuga zależne jest od architektury frameworku/rozwiązania w którym pracujemy. Osobiście konfigurowałem xdebuga na rzecz Yii/Symfony2/Laravela i konfiguracja zawsze odbywała się podobnie, jak nie tak samo.
Idea połaczenia z xdebugiem jest prosta. Przy łączeniu się z serwerem developerskim, na którym chcemy debugować ustawiamy cookie informujące server iż chcemy nawiązać połączenie z xdebugiem. Proces ten jest semi-automatyczny.
  • Generujemy zakladki (ustawiające w/w cookie), zapisujemy je w przeglądarce. Służą one do włączania/wyłączania debugowania przy użyciu xdebuga. Pryed generacją zmieniamy klucz IDE na "www-data". Zakładki generujemy pod linkiem:
    https://www.jetbrains.com/phpstorm/marklets/
  • Wchodzimy/klikamy na zapisaną zakładkę "xdebug start"


    == Przechodzimy do phpstorma ==

    •  settings->PHP: Upewniamy się, że mamy wybrany interpreter PHP. Jeżeli nie - ustawiamy. Możliwe, że będziemy musieli maualnie podać ścieżkę do pliku wykonywalnego PHPa. Zależy to od konfiguracji zmiennych środowiskowych waszego komputera.
    • settings->Project->Directories: Mapujemy odpowiednio katalogi naszego projektu
    • settings->Build, Execution, Deployment->Deployment: wchodzimy do ustawień naszego serwera, w zakładce "Mappings" ustawiamy mapowanie folderów naszej stacji roboczej do folderów na serwerze, eg:
      • Local path: C:\Users\rand\PhpstormProjects\MojProjekt\src
      • Deployment path: /var/www/html/tzubertowski/MojProjekt/src
    • settings->Languages & Frameworks->PHP->Servers: dodajemy/ustawiamy informacje o naszym serwerze. Host to IP serwera, port to port na którym puszczamy HTTP (zazwyczaj 80), debugger to rzecz jasna xdebug. Zaznaczamy "Use path mappings" i - podobnie jak w poprzednim punkcie - mapujemy foldery naszego projektu na foldery znajdujące się na serwerze.

  • Wychodzimy z ustawień, wracamy do projektu, wybieramy akcję/cześć kodu, który chcemy debugować. Stawiamy breakpoint (klikając myszką obok linii kodu na której ma się zatrzymać wykonywanie).
  • Włączamy nasłuchiwanie na połączenia xdebuga:
  • Przechodzimy w przeglądarce pod adres, który wykonuje kod jaki debugujemy. PHPSTORM powinien powiadomić o nadchodzącym połączeniu. Nie pozostaje nam nic innego jak akceptacja woli naszego Pana i cieszenie się środowiskiem z możliwością debugowania ;)

Brak komentarzy :

Prześlij komentarz