Разберем в статье, как настроить PHPStorm для отладки с помощью Xdebug 3 проекта на Ларавел, запущенного в докере. Важна версия Xdebug! Во второй и третьей версии различное именование параметров для конфигурации Xdebug! Также обращаю внимание, что в качестве веб-сервера в docker используется Apache.
Настройка состоит из нескольких этапов, в каждом из которых может возникнуть ошибка. Поэтому рекомендую делать промежуточные проверки, чтобы в случае необходимости было легче догадаться, где допущена ошибка. Как и когда можно сделать промежуточную проверку также указано в инструкции.
Также обращаю внимание, что настройки производятся в host ОС - Mac OS, для Windows и Linux данный метод не проверялся.
1 Установка Xdebug внутри докера
Для этого надо убедиться, что в файле Dockerfile прописана установка дебаггера (если нет, то нужно добавить):
RUN pecl install xdebug \
&& docker-php-ext-enable xdebug
Также нужно обновить файл docker-compose.yml и добавить переменную в окружение:
- XDEBUG_SESSION=docker-server
Как на скриншоте ниже:
2 Настройка php.ini для отладки
Теперь создадим .ini одноименный с Xdebug: xdebug.ini в корне проекта PHPStorm и замапим его с содержимым контейнера через настройку volumes в конфигурации веб-сервера в файле docker-compose.yml:
- ./xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini
Содержимое файла xdebug.ini:
[xdebug] xdebug.client_host=host.docker.internal xdebug.mode=debug
3 Обновляем контейнер
Теперь запускаем обновление контейнера докера, чтобы он установил внутри Xdebug: docker-compose build
И проверяем по логу, что отладчик потавился 3-ей версии:
install ok: channel://pecl.php.net/xdebug-3.0.2
4 Настраиваем PHPStorm для Xdebug внутри Докер
Идем в настройки PHPStorm и выбираем из дерева меню - пункт PHP, для него надо настроить CLI Interpreter. Для этого надо выбрать интерпретатор из нашего докер-контейнера:
Как это сделать, показано в видео:
5 Тестируем, что PHPStorm ловит Xdebug
Запускаем докер-контейнер через docker-compose up. Если контейнер уже запущен, то перезагружаем апач, чтобы точно применилась настройки из .ini файла ( заходим внутрь контейнера, к примеру, docker-compose exec web bash, и выполняем service apache2 reload).
Обновляем страницу нашего веб-приложения в браузере и наблюдаем, что сразу же должно появиться входящее подключение в шторме, пример как на скриншоте ниже:
6 Настраиваем в PHPStorm IDE key
Теперь для полного счастья нам осталось:
- добавить в xdebug.ini еще одну настройку, с указанием ide key,
- добавить PHP сервер в настройки проекта с нужным портом и включенным mapping'ом файлов
- и создать конфигурацию для Remote Debug.
Смотрим, как это делается в видео ниже:
Обновленный xdebug.ini файл:
[xdebug]
xdebug.client_host=host.docker.internal
xdebug.mode=debug
xdebug.idekey=docker-server