Установка и удаленная отладка с xdebug

Table of contents

Introduction

У нас под рукой инстанс, поднятый в статье: Поднимаем инстанс t2.micro с Ubuntu Server 18.04 LTS на AWS.

Также в этом инстансе установлены php 7.2 и 7.3, как описано в статье: Установка нескольких версий PHP на Ubuntu 18.04.3 LTS.

Установка xdebug

Установим xdebug для php:

sudo apt-get install php-xdebug

Настроим удаленную отладку для версии php 7.2 под Apache в php.ini:

sudo nano /etc/php/7.2/apache2/php.ini

Добавим в конец файла следующий конфиг:

[xdebug]
debug.profiler_enable = 0
xdebug.remote_enable = 1
xdebug.remote_host = 127.0.0.1
xdebug.remote_port = 9000
xdebug.remote_handler = dbgp
xdebug.idekey = PHPSTORM

Мы устанавливаем 9000 порт для отладки, но он может быть занят, поэтому убедимся в его доступности:

sudo netstat -tnlp | grep 900

Скрипт для отладки

Создадим в директории /var/www/html файл index.php и отредактируем его:

sudo nano /var/www/html/index.php

Добавим следующее содержимое и сохраним:

<?php
$server = $_SERVER;
phpinfo();

Удалим файл index.html:

sudo rm /var/www/html/index.html

Теперь необходимо проверить работу нашего web-сайта, но перед этим для инстанса необходимо создать новые Security Group или же отредактировать текущую, добавив порты 9000, 80 и 443 в доступ со всех IP. Подробнее описано в статье (там мы открывали 22 порт для инстанса): Поднимаем инстанс t2.micro с Ubuntu Server 18.04 LTS на AWS.

Открыв наш сервер в браузере по выданному Public DNS (IPv4), мы должны увидеть вывод phpinfo(). Поищем xdebug в выводе и не найдем, т.к. мы не перезагрузили Apache и самое время это сделать:

sudo service apache2 restart

На этом этапе настройки сервера завершены, теперь останется настроить локальную среду.

Настройка PHPStorm

Откроем PHPStorm и создадим новый проект, в котором мы настроим деплой на наш сервер и будем отлаживать созданный index.php.

Для настройки деплоя необходимо перейти в меню, как показано ниже:

phpstorm deploy menu

Далее добавляем новый сервер и указываем параметры доступа:

phpstorm deployment configuration

После этого у нас появится соединение и при редактировании файла на локальном компьютере будет идти загрузка на удаленный сервер. Мы сразу же загрузили файл с удаленного сервера и поставили брейкпоинты в коде:

phpstorm after deploy

Теперь перейдем к настройкам отладки:

phpstorm debug settings

Нами уже выполнен пункт 1 - установка xdebug, остается выполнить пункт 2 - установка приложения для отладки в браузер. По ссылке мы перейдем на страницу со списком расширений для различных браузеров. Мы будем пользоваться расширением для Chrome:

xdebug chrome extension

В пункте 3 мы должны включить прослушивание порта отладки, нажав на Start listening.

Если бы мы производили все настройки на локальной машине, то на данном этапе отладка уже работала бы, но т.к. php исполняется на удаленном сервере, а IDE у нас на локальной машине, то нам необходимо связать уделенный порт с локальным, т.е. сделать проброс порта (port forwarding).

Проброс удаленного порта на локальный

Мы имеем следующую схему соединения:

remote port forwarding before

Мы находимся в домашней/корпоративной сети, у нашего компьютера IP 192.168.1.2 и есть доступ в интернет через Firewall+NAT к нашему удаленному серверу 212.212.212.212, на котором стоит php+xdebug.

Сервер 212.212.212.212 не может подключиться на 192.168.1.2 напрямую, т.к. локальный компьютер находится за Firewall+NAT, а для отладки нам необходимо такое подключение.

Для того, чтобы сервер 212.212.212.212 смог соединиться с 192.168.1.2 напрямую, необходимо поднять между серверами туннель.

Поднимать туннель мы будем с помощью PuTTy, для этого создадим новую сессию:

putty configuration new session

Сконфигурируем автоматическую передачу логина:

putty configuration autologin

Добавим ключ для соединения:

putty configuration keys

Настроим туннель, как показано ниже:

putty configuration tunnels

Не забываем вернуться на вкладку сессии и сохранить все настройки. После сохранения настроек открываем созданную сессию.

Теперь схема соединения следующая:

remote port forwarding after

У нас открылся туннель, по которому xdebug будет передавать отладочную информацию с удаленного порта на наш локальный 9000, который слушает IDE PHPStorm.

Сессия отладки в PHPStorm

Теперь мы откроем наш сайт в браузере с установленным дополнением и активируем debug. При обновлении страницы данное расширение будет передавать дополнительный заголовок, который будет активировать отладку. По данному заголовку PHPStorm и будет понимать, что сессия отладки началась:

phpstorm incoming connection from xdebug

Принимаем сессию отладки и наш скрипт останавливается на поставленных брейкпоинтах:

phpstorm debug session

Таким образом мы настроили удаленную отладку через проброс порта на локальную машину.

Дата публикации :
Дата редактирования : 2020-04-19 14:21:50
Автор :

Cookies and IP addresses allow us to deliver and improve our web content, resolve technical errors, and provide you with a personalized experience. Our website uses cookies and collects your IP address for these purposes.