Задача
Запустить в PhpStorm дебаг php-приложения, запущенного в docker-контейнере на том же компьютере, где работает PhpStorm.
Уточняю особенно, что контейнер на той же машине, где IDE, потому что с задачей дебага на удалённом сервере я пока не справилась.
Настройка Docker
Я пользуюсь генератором docker-compose PHPDocker.io, возьмём его результат за основу. Не забыть в поле Extensions поставить галочку напротив XDebug.
После, как обычно, скачать архив, распаковать файлы в корневую папку проекта.
В папке /phpdocker/php-fpm, где уже лежит файл с настройками php-ini-overrides.ini, я создала ещё один файл - xdebug.ini.
1 | ; ./phpdocker/php-fpm/xdebug.ini |
За точными объяснениями настроек отсылаю к официальной документации. Замечу только, что порт 9000 можно изменить, но тогда его же нужно изменить в настройках PhpStorm. Кстати, remote_host можно указывать в этом же файле. Перейдём к нему вот-вот, я его указываю в docker-compose для удобства изменения.
Итак, перейдём к docker-compose.yml в корневой папке проекта. Все изменения делаются в сервисе php-fpm.
- Подключаем сделанные выше настройки xdebug.ini - добавить в раздел volumes строку
1
- ./phpdocker/php-fpm/xdebug.ini:/etc/php/7.2/mods-available/xdebug.ini
- Установим переменные среды.
Cначала для этого стоит узнать ip docker-сети. Обычно это 172.17.0.1, в linux проверить можно командойИ придумать имя сервера для PhpStorm, его будем указывать в настройках. Я ввожу “xdebug-docker”.1
ifconfig docker0
Добавляем ещё три строчки в docker-compose.yml, в сервис php-fpm:1
2
3environment:
XDEBUG_CONFIG: remote_host=172.17.0.1
PHP_IDE_CONFIG: "serverName=xdebug-docker"
Привожу полный docker-compose, который получился в результате. (Обычно ещё сервис с базой данных, но для примера его опускаю):
1 | # ./docker-compose.yml |
Настройка PhpStorm
Теперь придётся с картинками.
Настройка сервера
Заходим в настройки File > Settings, ищем Server и добавляем новый сервер с тем же именем, которое только что указали в docker-compose. Адрес соответственно тоже ваш, порт тот же, что указан в docker-compose.
Указать mappings для папки public: абсолютный путь внутри контейнера /application/public
Если вы указали другой (не 9000) порт в файле xdebug.ini, зайдите сразу в раздел настроек Debug и измените номер порта там.
Закрываем окно настроек.
Debug configuration
Открываем Run > Edit Configurations и добавляем новую конфигурацию для PHP Remote Debug. Имя любое, сервер выбрать из списка, а ключ тот же, что мы указывали в xdebug.ini.
Запуск
Запустим приложение. Выполнить (в корневой папке проекта)
1 | docker-compose build |
Предполагается, что точки для дебага в PhpStorm мы поставили. Запустить дебаг в PhpStorm можно в том же меню Run > Debug или на панели инструментов. Дебаг не заработает, пока PhpStorm не будет прислушиваться к соединениям!
После этого можно обращаться любым образом к localhost:9122. Открыть этот адрес в браузере или выполнить
1 | curl localhost:9122 |
Переход к следующей точке по F8. И это всё, что я знаю о собственно процессе дебага в PhpStorm: пока я убивалась об попытки установить то же самое для дебага на удалённом сервере, я ничего не узнала о собственно работе с этим.
Я надеюсь, я решу задачу с удалённым хостом и напишу о ней. А на сегодня всё.
Ссылки
Кроме указанной документации мне очень помогли инструкции от esilvajr, который показал, как это настроить с файлами от phpdocker.io, и rfay, который подробно расписал процесс удалённого подключения (на реально удалённом сервере пока не сработало, но docker-контейнер с отдельным веб-сервером как бы удалённый с точки зрения системы).
Если мой пост недостаточно внятный, вы можете обратиться к их статьям.