Установка и удаленная отладка с помощью 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.
Для настройки деплоя необходимо перейти в меню, как показано ниже:

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

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

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

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

В пункте 3 мы должны включить прослушивание порта отладки, нажав на Start listening.
Если бы мы производили все настройки на локальной машине, то на данном этапе отладка уже работала бы, но т.к. php исполняется на удаленном сервере,
а IDE у нас на локальной машине, то нам необходимо связать уделенный порт с локальным, т.е. сделать проброс порта (port forwarding).
Проброс удаленного порта на локальный
Мы имеем следующую схему соединения:

Мы находимся в домашней/корпоративной сети, у нашего компьютера 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, для этого создадим новую сессию:

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

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

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

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

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

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

Таким образом мы настроили удаленную отладку через проброс порта на локальную машину.
Дата редактирования : 2020-11-12 00:30:50
Автор : Rosko