Установка Xdebug в Docker-образы. Настройка отладки консольных скриптов. Подключение к PhpStorm для отладки веб-скриптов в PHP-FPM.
- 00:00:36 Как установлен PHP
- 00:01:40 Установка Xdebug
- 00:03:51 Файл конфигурации
- 00:05:35 PHP из Docker Compose в PhpStorm
- 00:08:18 Отладка консольного приложения
- 00:09:45 Когда пригождается отладчик
- 00:11:28 Отладка конкретных консольных команд
- 00:12:07 Xdebug для HTTP
- 00:13:54 Расширение для браузера
- 00:15:45 Подключение к хосту из Docker-сети
- 00:19:46 Фиксация IP-адреса шлюза
- 00:21:23 Шлюз в Windows и MacOS
- 00:23:55 Скрипт автораспознавания хоста
- 00:25:55 Использование ENTRYPOINT и CMD
- 00:29:53 Свой скрипт docker-entrypoint
- 00:33:00 Проверка подключения
- 00:33:54 Сопоставление путей через Server в PhpStorm
- 00:35:21 Проверка работы
- 00:36:24 Таймауты запуска PHP-FPM и Nginx
- 00:38:35 Обзор результата
- 00:40:33 Что будет дальше
В 44-ом эпизоде мы обновим проект до Xdebug 3
Скрытый контент (код, слайды, ...) для подписчиков.
Открыть →Чтобы не пропускать новые эпизоды подпишитесь на наш канал @deworkerpro в Telegram
спасибо
Как всегда все отлично! Но.
-- Для локальной разработки я все-таки предпочитаю оф. образ php:7.4-fpm, не alpine. Это чисто мое личное предпочтение
-- А команды ip в нем нет почему то. Т.е.
вылетает с ошибкой
Поэтому мне, лично, кажется более предпочтительным вариант с явной настройкой сети
И явной передачей параметров для xdebug в docker-compose.yml файле
Но тут как раз тот случай когда на вкус и цвет все фломастеры разные :)
Я так понял, вы приватный докер реджестри установили. Каким мануалом пользовались, ссылкой не поделитесь?
Пример был в комментарии.
Дмитрий, еще раз огромный респект за уроки, но мне всё таки пришлось закостылить после внимательного изучения Ваших эпизодов.
В чем проблема?
Для учебы я подняли vds на vscale.io За 400 руб.
Поднимать еще один образ для учебы, для реестра образов докера - уже напряжно.
Вопрос: как поднять на одной виртуальной машине всё?
И реестр, и всё, остальное?
Можно поднять реестр на 5000 порту и везде использовать REGISTRY=site.com:5000
Либо использовать любой сторонний реестр на бесплатном тарифе.
Ссылки нет - использовал околонаучный метод тыка. С удовольствием поделюсь своими изысканиями, если найдете меня в скайпе по логину proctoleha
По поводу приватного докер репозитория: в чисто учебных целях залил на гит проект, который, в числе прочего, через Ansible, разворачивает приватный докер репозиторий, в парадигме данного курса.
https://github.com/ale10257/ansible-playbook-with-docer-registry
Вижу дожили до этого урока двое. Напишите на какой платформе вы держите разработку?
К примеру, мне удалось запустить всё под Windows.
Снимаю шляпу. Даже примерно не представляю как можно запускать все это под виндой. У меня минт 18.3
Вы используете Минт как единственую ОС для пользования, или это отдельная загрузка специально для разработки? Часто из-за того , что работаю на Винде, а деплою на Линукс и возникающих проблем задумываюсь о переходе на Линукс.
Мой ноут - это мой главный рабочий инструмент для работы - т.е. для зарабатывания денег. Поэтому linux only. Никаких игрушек, ничего лишнего. Только линукс, и никакой головной боли при разработке
В виртулке стоит windows 7, и, кстати, её образ занимает всех больше места. У меня ssd на 240 гигабайт, приходится следить :)
Полгода как полностью работаю только на Ubuntu 18.04. Было нелегко :) , но со временем нашёл все аналоги нужного ПО, либо установил через Wine
У меня тоже все под виндой встало без проблем.
А что вы использовали (swl, Docker descktop or ...) ? И дошли ли вы до тестов?
У меня на mac os catalina тоже все работает:)
На Мас нужно много дополнительного софта и танцев с бубном, или там и из коробки работает?
Все работает почти как в линукс. Устанавливаеш Docker for mac и все норм работает.
Сначала пробовал под windows 10 используя wsl 2, но постоянно были проблемы с быстродействием и PHPstorm ( рассинхрон файловой системы ). в итоге перешел на убунту, полет нормальный
Дома на Ubuntu поднял, конечно же без проблем. На работе на windows + прокст
Подробнее можете рассказать? У меня в дальнейшем на одном ПК просто перестало работать, на втором я так и не смог нормально запустить тесты. Попробую уйти на виртуалбокс и в нем докер поднимать.
Windows 10 поддерживает подсистемы. Набери в store "Ubuntu". Поставь её и там работай
Docker в Windows 10 у меня работает только в консоли
Вас еще ждут разочарования. Некоторые имиджи под винду не работают (или не корректно работают) на линуксе, а в этом курсе имидж создается на хосте и деплоится в прод.
С WSL у вас будут сложности ставить Xdebug в PhpStorm.
Все работает одинаково, как в виде так и в линукс
Покажите вашу сборку. и Дойдите на ней до 11го пункта.
Я развернул все на маке с M1. Пришлось добавить --platform linux/amd64 при сборке образов на продакшн. А так практически без изменений работает.
Мои трудности в этом курсе: Мне только вчера удалось действительно всё запустить без ошибок (xdebug еще не тестил).
У мена главная засада была с Ансамблем. Долго я его крутил, чтобы хоть чуть-чуть проникнуться
Я его уже год использую. Он мне и понравился тем, что записал все команды как в блокнот и расскатывай всё за пять минут. Раньше установка почтового сервера занимала пол дня, теперь с проверкой минут 10ть.
Всем доброго дня
Есть одно замечание(вопрос) Проект размером +- 100Гб И если пытаться его впихнуть в папку public через волюмы и там уже запускать то возникают проблемы с контекстом а именно очень, ну очень долго создается образ
решается добавлением файла .dockerignore
вот образ построенный по вашим урокам. https://github.com/samwolf1982/nginx-php_fpm-redis-msql-starter_docker
100Гб это ресурсы какие-то. И вы делаете COPY , а не VOLUME?
обычный проект, сайт-магазин, куча фото делал не COPY.
Фото желательно на отдельном сервере держать
Дмитрий, большое спасибо за уроки, очень много ценной инфы, будет ли вариантов скриптов ансамбля безо всяких докеров? к примеру что бы он установил все на одну виртуалку, докер конечно крут, но если там что то отклеится, то можно очень долго ковыряться, а если к примеру надо запустить проект быстро, то можно найти много проблем, к концу урока наверное вообще пачка контейнеров будет и как искать что именно отвалилось не совсем понятно, я имею ввиду не ошибки в коде, а функционирование самого сервера.
Получится что один лог здесь, другой там не особо удобно быстро искать проблему.
Полагаю, поднять все без докера на предустановленном сервере как раз очень просто. Автоматизация же настройки голого сервера будет зависеть от конкретной конфигурации его ОС, и всех сервисов под нее. Поэтому написать и протестировать универсальные на все случаи ansible скрипты будет сложно.
Включение организации рабочего процесса с докером для унификации local/staging/production окружений и автоматизация развертывания их конфигураций с ansible очень порадовали, огромнейший респект Дмитрию!
Забегая наперед интересует, будет ли урок по организации мониторинга работы всех контейнеров, автоматизация их перезапуска при падении (k8s etc.), а также как мониторить работу отдельных сервисов приложения (в т.ч. на использование ресурсов)? Может есть практика сливать/мониторить логи приложений со всех докеров в единый и какой-то удобный механизм его мониторить (ElasticSearch/Kibana etc.)?
Спасибо.
Ну никто не говорит о скриптах на все случае жизни, только в контексте данного мастер класса, что там у нас есть и убунту в идеале, он самый распространенный сейчас. Не многие решаются тянуть докер на прод, да и вообще, сколько тут заняла времени установка хдебага который работает из коробки, а если еще что то аналогичное будет нужно прикрутить, то сколько времени уйдет вообще непредсказуемо и это малость напрягает.
Такое усилие с обратным пробросом портов понадбилось только для установки Xdebug.
А так да, Docker - это другой образ жизни со своими утиллитами.
Думаю к концу курса прояснится насколько докер удобен и необходим на проде, пока особых плюсов не вижу, настроить удаленную виртуалку подключить себе гит и спокойно деплоить файлы, пока как то привычнее, все в файловой системе, никаких скрытых контейнеров, спокойно зашел куда понадобилось в данные момент и сделал свое дело. Если куча непонятного народа работает над проектом до да, такая унификация конечно будет сильно облегчать взаимодействие, а если всего несколько человек, которые свое дело знают, то плюсы непонятны, кучу доп инфы поднимать нужно, что бы разобраться, а где время брать и окупится ли такое его вложение. И если нода добавится, как с ней будет вообще непонятно, там куча модулей сборщиков и прочих утилит.
Они и сейчас перезапускаются с restart: always. Продвинутее с health checks будет при использовании Docker Swarm и K8s.
Для этого как раз используют ElasticSearch и Kibana с различными Beats для сбора статистики.
Аналогично через Logstash и подобные агенты собирают все логи в ElasticSearch для Kibana.
Смотрим: https://github.com/ale10257/Ansible-playbooks-LEMP-on-Ubuntu-18.04
Что непонятно - спрашиваем
Большое спасибо, то что надо
У вас в create_certbot идет установка из
ppa:certbot/certbot
, у Дмитрия изdeb ftp.debian.org/debian buster-backports main
. В чем принципиальная разница? И есть ли она.Небольшое наблюдение: на самом деле я пытался вручную без плейбуков добавить репозитории как у Дмитрия, потом сделать установку certbot, начинал ругаться на верификацию потом, когда пытался сделать
apt-get update
и дальнейшие действия прекращалисьppa:certbot - это репы для убунты
buster-backports - для debian
Добрый день! Планируется ли снять ролик о деплое динамических окружений (каждая фича развертывается на своем поддомене)? Было бы очень здорово и актуально.
Это сложнее, но редко нужно. Проще сделать develop ветку с поддоменом и фичи мержить в неё.
Если нужно посмотреть работу фичи, то можно просто перейти по git checkout на ветку и запустить make init локально. А при работе по подходу с Feature Toggles разработка фич ведётся без ответвлений прямо в основной ветке.
А вообще поддомены можно включить добавлением A-записи
*
к домену. Либо использовать один тестовый поддомен и сертификат и просто поднимать фичи на разных портах, вычисляемых по имени ветки.Очень полезный был бы урок по стратегиях записи и сбора логов, да и про elk стек вцелом, как инструмента.
Про xdebug - супер! Особенно такой интересный трюк с host.docker.internal. Очень познавательно, если разработка через докер затрагивает также и участников на винде и маке. Спасибо!
Я иногда в шоке, как вы вообще добираетесь до таких мелочей, дополнительные сетевые слои у винды/мака, первый IP всегда шлюз, установить в конфиге серверное имя, чтобы его шторм мог по имени отлавливать. Тут вообще черный пояс по докеру и шторму. Вы там похоже в документациях ночуете :) Только какая роль дебаг плагина в хроме? Куда он запросы шлет? Если у нас php-fpm отправляет инфу из контейнера в наружу.
Приходится :)
Плагин просто ко всем запросам из браузера добавляет маркерную куку
XDEBUG_SESSION
со значением из его настроек. Её видит Xdebug в php-fpm, включается и подключается оттуда к PhpStorm по адресу<phpstorm_ip>:9000
из remote_host и remote_port.Спасибо!
Я дошел до этого момента и скажу, что по моим наблюдениям Докер под Windows работает как-то по другому.
У меня сейчас Docker Desktop Edge 2.1 под WSL2.
Странность в том , что если я применяю наш патч-скрипт для унификации, то контейнеры отваливаются. Я стал смотреть адреса не устанавливая патча:
Если смотреть из виндовс консоли, то :
А если :
ipconfig на хост машине:
а такой сети нет 192.168.65.0
Как тогда это всё общается?
Да, у нового подхода с WSL свои нюансы. Можете поисследовать в своей системе, как они там общаются в новом варианте виртуализации.
192.168.99.1
http://sebastianviereck.de/en/docker-xdebug-remote_host-setzen-toolbox-fuer-phpstorm/
Столкнулся с проблемой, что phpstrom не видит установленного xdebug во вкладке cli interpreters, когда настраиваю интерпретатор из докера. Само расширение установил, докер файлы один в один с вашими, но на этапе настройки интерпретатора xdebug не видится, дальше, соответственно, тоже - отладка не запускается.
Забыл добавить: версия php тоже не определяется. PHP version: Not installed, Debugger: Not installed. Но контейнер то он определил и cli работает корректно
Решил вопрос сменой источника интерпретатора: поменял docker-compose на docker, и версии определились. Dockre-compose почему-то не работает корректно.
Вы же понимаете, что это почти обертка. У вас что-то в композере ни так установлено. (ИХМО)
Такая же проблема ни php ни debuger не определяется в api-php-cli , код взял с комитта - Configured API web debug 24.12.2019
тоже помог вариант - поменял docker-compose на docker,
Чтобы применились все изменения из докерфайлов нужно не забывать пересобирать образы и перезапускать контейнеры вызовом
docker-compose up --build d
Соединение не было установлено. Возможно, 'xdebug.remote_host = docker.for.win.localhost' неправильный решение
это связано с тем, что в Docker в варианте Toolbox для Windows заполнитель docker.for.win.localhost не заполнен. Таким образом, IP-адрес компьютера PHPStorm должен быть установлен вручную.
Чтобы сделать это, вы вручную устанавливаете значение xdebug.remote_host равным 192.168.99.1 (IP Docker устанавливает для хоста, может изменять) параметры интерпретатора cli:
Ура заработало после 3 дней.
У меня тоже похожая ошибка. Connection was not established. Probably
xdebug.remote_host=host.docker.internal
is incorrect. macOS Catalina Когда делаю пингадрес не докера, а локальный почему-то : (
В /etc/hosts ничего не прописалось
Приветсвую. Смогли решить проблему? Такая же ситуация с маком На оф сайте PhpStrom такой вопрос поднимался, говорят прописать remote_host=docker.for.mac.host.internal, но к сожалению не помогает
Нет, пока не смог : ( Пробовал такое же.
Поискав инфу на куче форумов удалось завести дебагер на Mac.
1) add into .docksal/etc/php/php.ini: [xdebug] xdebug.remote_connect_back = 0 xdebug.idekey = "PHPSTORM" xdebug.remote_host = 10.254.254.254
я добавил данные параметры в api/docker/development/php/conf.d/xdebug.ini
2) create a new network alias on your host machine: sudo ifconfig lo0 alias 10.254.254.254
тут как есть
3) потом я пересобрал контейнеры запустив make init
4) залез в api/bin/app.php, поставил точку останова, запустил дебагер. Он поругался что remote_host=...блабла. В сплывшем окне нажал на "изменить remote_host" и указал 10.254.254.254
И дебагер заработал
Честно сказать до конца не разобрался, в чем причина
https://docs.docker.com/docker-for-mac/networking/#there-is-no-docker0-bridge-on-macos
вот такая инфа есть на оф документации докера. что то у них там не так с сетью на маках. Может @Дмитрий знает и сможешь подсказать
Недавно пересел с убунты на мак, и как то всё не так привычно и не так гладко)
короче надо было смотреть видео до конца, а я сразу полез на форумы, как что то пошло не так. а оказывается Дмитрий все рассказал далее Дмитрий, спасибо!
Видимо я невнимательно слушал, я попробую, спасибо! А почему хост такой? Он разве не динамический?
Docker Quickstart Terminal for windows 10
супер. спасибо! как раз разобрана трабла с дебаггером на маке
Добрый день! В настройках проекта в PhpStorm не получается установить соединение с докером, пишет "Отказано в доступе /var/run/docker.sock". Получается только соединиться если шторм запускать из-под рута. Подскажите, пожалуйста, что я делаю не так?
Чтобы с Docker работать не от root нужно своего пользователя добавить в его группу:
Спасибо большое!
Когда я правой клавишей мыши нажимаю на app.php в директории bin, затем на Debug 'app.php (Php Script)', то не идет соединение с xdebug. Его версия обновилась до третьей и ini-настройки нужно указывать уже другие. Я указал такие:
Но пока безрезультатно. В шторме пишет:
Connection was not established. Cannot start debugger session with 'Xdebug 3.0.2'.
Система: Linux Mint 20. Интерпретатор PHP определяется нормально.
Обновление мы рассмотрели в 44-ом эпизоде.
А как дебажить ajax запросы из контейнера с нодой к контейнеру с php-fpm? Там другой порт, поэтому куки, которые устанавливает ХDebug Helper не посылаются. Простой вариант: отказаться от хелпера, а сделать xdebug.remote_autostart = 1, но тогда дебагер будет дергаться на каждый чих
Например, можно по условию во все Ajax-запросы примешивать параметр
?XDEBUG_SESSION_START=1
Кому интересно, или кто только начал изучать этот курс. Год назад была проблема с VirtualBox и Hyper-V, вместе они не уживались на одной машине (при одной загрузке). Сейчас всё работает как надо. :)
Дмитрий, подскажите, пожалуйста, мне, новичку, как настроить связку Xdebug PhpStorm Docker Yii2 для дебага например такой консольной команды
Команда работает.
Но не ловятся брейкпоинты проставленные в actionA в контроллере TestController .
В видео уроке показан запуск отдельного php скрипта. Так работает. Но вот дебаг консольных контроллеров yii2 в папке commands не работает.
Спасибо.
Чтобы запускать вручную нужно самому в консоли устанавливать параметры отладки как в примерах для Xdebug 3 здесь вроде:
или:
Начиная с Docker 20.10 для работы host.docker.internal в линукc.
Можно запускать контейнер с параметром --add-host=host.docker.internal:host-gateway
или:
В docker-compose для сервиса (php-fpm) прописать
Это обновит файл /etc/hosts автоматически и привяжет шлюз к имени host.docker.internal
https://stackoverflow.com/a/43541732
Дмитрий, спасибо! Вы не представляете сколько времени пришлось потратить, чтобы найти что-то подобное!
Дмитрий у меня при билде образов первый инит проходит нормально а второй раз вываливается ошибка
ну и конекта нет совсем даже на этапе дебага консольного приложения.
Весьма странно.
Доброй ночи, как дебажить не прямые php скрипты типо app.php. Допустим поставил точку остановки в классе *Command которая запускается так "php artisan command:run". У меня ничего не происходит (
Нашел такое решение
Добрый день! Подскажите, что не так может быть. Пересобираю контейнер, они падают.
В логах
Нашел ошибку,
#!/bin/sh
неверно указал. Было сначала#!/bin/bash
. Гугл в помощь)Здравствуйте, получаю такие ошибки x-debug, использую самый первый вариант (с указанием сети явно) на ubuntu
в чем может быть проблема как ее решить?
А в PhpStorm прослушивание включено?
Здравствуйте Дмитрий! Не знаю куда написать - напишу сюда) Можно ли добвыить возможность скачивания или оффлайн просмотра эпизодов?
Увы, но это будет способствовать пиратству.
Добрый вечер, Дмитрий.
Возникла небольшая проблема с xdebug и не могу понять в чём дело.
Настроил всё как в уроке, перепроверил построчно все настройки, но думаю, что дело всё-таки не в этом.
Есть старый проект на yii2, который надо довести до ума. Работа с очередями, в очередь ставится файл на парсинг товаров и запись в базу.
Не могу понять, почему не ловятся точки останова в самом файле очереди.
В контроллере ставлю точку на строке, в которой добавляется задача в очередь
В этом месте скрипт останавливается, но потом переходит с следующему условию в этом файле, а вот на точки в FinishYmlImportJob никак не реагирует.
Убираю вышеуказанную точку, но на этом вся работа xdebug прекращается.
В Phpstorm вылетают сообщения
Указал в конфиге xdebug создавать свой лог. В логе явных ошибок не видно, только отладочная информация.
Затем куча подобных строк
Пока даже не представляю,в какой стороне искать проблему.
Подскажите, как всё-таки проверить очередь?
Потому что контроллер выполняется в процессе PHP-FPM, где отладка включается через Cookies, а задание очереди выполняется в отдельном запущенном консольном процессе PHP-CLI.
Для отладки консольных команд можно как показано в видео перейти в Run > Edit Configurations, добавить запуск PHP-скрипта
yiic.php queue/listen
и запускать его оттуда кнопкой Debug.Либо запускать слушатель очереди в терминале, указывая ему вручную все параметры по примеру из документации PhpStorm.
Понял, буду пробовать. Спасибо.
Была ошибка при выполнении
make init
, решено явным указанием версии для Xdebug (более новые версии требуют PHP 8+):pecl install xdebug-3.1.6
Или войти через: