Задонатить и смотреть →
Открой безлимитный доступ к 100+ полезных скринкастов и получай скидки на все предстоящие мероприятия

Xdebug для Docker в PhpStorm

Установка 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

Скрытый контент (код, слайды, ...) для подписчиков. Открыть →
Дмитрий Елисеев
elisdn.ru
Комментарии (97)
Arunas

спасибо

Ответить
Алексей

Как всегда все отлично! Но.

-- Для локальной разработки я все-таки предпочитаю оф. образ php:7.4-fpm, не alpine. Это чисто мое личное предпочтение

-- А команды ip в нем нет почему то. Т.е.

HOST_IP=$(ip route | awk 'NR==1 {print $3}')

вылетает с ошибкой

Поэтому мне, лично, кажется более предпочтительным вариант с явной настройкой сети

networks:
    internal:
        driver: bridge
        ipam:
            driver: default
            config:
                - subnet: 192.168.200.0/28

И явной передачей параметров для xdebug в docker-compose.yml файле

    api-php-fpm:
        build:
            context: api/docker
            dockerfile: development/php-fpm/Dockerfile
            args:
                - USER_ID
                - GROUP_ID
        volumes:
            - ./api:/app
        environment:
            APP_ENV: dev
            APP_DEBUG: 1
            XDEBUG_CONFIG: " remote_host=192.168.200.1 remote_enable=1  remote_port=9000"
            PHP_IDE_CONFIG: "serverName=api"
        networks:
            - internal

Но тут как раз тот случай когда на вкус и цвет все фломастеры разные :)

Ответить
Ruslan

Я так понял, вы приватный докер реджестри установили. Каким мануалом пользовались, ссылкой не поделитесь?

Ответить
Алексей

Дмитрий, еще раз огромный респект за уроки, но мне всё таки пришлось закостылить после внимательного изучения Ваших эпизодов.

В чем проблема?

Для учебы я подняли vds на vscale.io За 400 руб.

Поднимать еще один образ для учебы, для реестра образов докера - уже напряжно.

Вопрос: как поднять на одной виртуальной машине всё?

И реестр, и всё, остальное?

Ответить
Дмитрий Елисеев

Можно поднять реестр на 5000 порту и везде использовать REGISTRY=site.com:5000

Либо использовать любой сторонний реестр на бесплатном тарифе.

Ответить
Алексей

Ссылки нет - использовал околонаучный метод тыка. С удовольствием поделюсь своими изысканиями, если найдете меня в скайпе по логину proctoleha

Ответить
Алексей

По поводу приватного докер репозитория: в чисто учебных целях залил на гит проект, который, в числе прочего, через Ansible, разворачивает приватный докер репозиторий, в парадигме данного курса.

https://github.com/ale10257/ansible-playbook-with-docer-registry

Ответить
Ruslan

Вижу дожили до этого урока двое. Напишите на какой платформе вы держите разработку?

К примеру, мне удалось запустить всё под Windows.

Ответить
Алексей

Снимаю шляпу. Даже примерно не представляю как можно запускать все это под виндой. У меня минт 18.3

Ответить
Ruslan

Вы используете Минт как единственую ОС для пользования, или это отдельная загрузка специально для разработки? Часто из-за того , что работаю на Винде, а деплою на Линукс и возникающих проблем задумываюсь о переходе на Линукс.

Ответить
Алексей

Мой ноут - это мой главный рабочий инструмент для работы - т.е. для зарабатывания денег. Поэтому linux only. Никаких игрушек, ничего лишнего. Только линукс, и никакой головной боли при разработке

В виртулке стоит windows 7, и, кстати, её образ занимает всех больше места. У меня ssd на 240 гигабайт, приходится следить :)

Ответить
BATPYIIIKOB

Полгода как полностью работаю только на Ubuntu 18.04. Было нелегко :) , но со временем нашёл все аналоги нужного ПО, либо установил через Wine

Ответить
Sergei

У меня тоже все под виндой встало без проблем.

Ответить
Ruslan

А что вы использовали (swl, Docker descktop or ...) ? И дошли ли вы до тестов?

Ответить
Дмитрий Ориховский

У меня на mac os catalina тоже все работает:)

Ответить
Ruslan

На Мас нужно много дополнительного софта и танцев с бубном, или там и из коробки работает?

Ответить
Дмитрий Ориховский

Все работает почти как в линукс. Устанавливаеш Docker for mac и все норм работает.

Ответить
Алекс

Сначала пробовал под windows 10 используя wsl 2, но постоянно были проблемы с быстродействием и PHPstorm ( рассинхрон файловой системы ). в итоге перешел на убунту, полет нормальный

Ответить
Konstantin

Дома на Ubuntu поднял, конечно же без проблем. На работе на windows + прокст

Ответить
Ruslan

Подробнее можете рассказать? У меня в дальнейшем на одном ПК просто перестало работать, на втором я так и не смог нормально запустить тесты. Попробую уйти на виртуалбокс и в нем докер поднимать.

Ответить
Konstantin

Windows 10 поддерживает подсистемы. Набери в store "Ubuntu". Поставь её и там работай

Ответить
Konstantin

Docker в Windows 10 у меня работает только в консоли

Ответить
Ruslan

Вас еще ждут разочарования. Некоторые имиджи под винду не работают (или не корректно работают) на линуксе, а в этом курсе имидж создается на хосте и деплоится в прод.

С WSL у вас будут сложности ставить Xdebug в PhpStorm.

Ответить
Konstantin

Все работает одинаково, как в виде так и в линукс

Ответить
Ruslan

Покажите вашу сборку. и Дойдите на ней до 11го пункта.

Ответить
Поля и свойства, Поля и свойства, когда?

Я развернул все на маке с M1. Пришлось добавить --platform linux/amd64 при сборке образов на продакшн. А так практически без изменений работает.

Ответить
Ruslan

Мои трудности в этом курсе: Мне только вчера удалось действительно всё запустить без ошибок (xdebug еще не тестил).

Ответить
Алексей

У мена главная засада была с Ансамблем. Долго я его крутил, чтобы хоть чуть-чуть проникнуться

Ответить
Ruslan

Я его уже год использую. Он мне и понравился тем, что записал все команды как в блокнот и расскатывай всё за пять минут. Раньше установка почтового сервера занимала пол дня, теперь с проверкой минут 10ть.

Ответить
Sam

Всем доброго дня

Есть одно замечание(вопрос) Проект размером +- 100Гб И если пытаться его впихнуть в папку public через волюмы и там уже запускать то возникают проблемы с контекстом а именно очень, ну очень долго создается образ

решается добавлением файла .dockerignore

вот образ построенный по вашим урокам. https://github.com/samwolf1982/nginx-php_fpm-redis-msql-starter_docker

Ответить
Ruslan

100Гб это ресурсы какие-то. И вы делаете COPY , а не VOLUME?

Ответить
Sam

обычный проект, сайт-магазин, куча фото делал не COPY.

volumes:
  - type: bind
    source: ./public
    target: /var/www
Ответить
Алекс

Фото желательно на отдельном сервере держать

Ответить
fedot

Дмитрий, большое спасибо за уроки, очень много ценной инфы, будет ли вариантов скриптов ансамбля безо всяких докеров? к примеру что бы он установил все на одну виртуалку, докер конечно крут, но если там что то отклеится, то можно очень долго ковыряться, а если к примеру надо запустить проект быстро, то можно найти много проблем, к концу урока наверное вообще пачка контейнеров будет и как искать что именно отвалилось не совсем понятно, я имею ввиду не ошибки в коде, а функционирование самого сервера.
Получится что один лог здесь, другой там не особо удобно быстро искать проблему.

Ответить
Руслан

Полагаю, поднять все без докера на предустановленном сервере как раз очень просто. Автоматизация же настройки голого сервера будет зависеть от конкретной конфигурации его ОС, и всех сервисов под нее. Поэтому написать и протестировать универсальные на все случаи ansible скрипты будет сложно.

Включение организации рабочего процесса с докером для унификации local/staging/production окружений и автоматизация развертывания их конфигураций с ansible очень порадовали, огромнейший респект Дмитрию!

Забегая наперед интересует, будет ли урок по организации мониторинга работы всех контейнеров, автоматизация их перезапуска при падении (k8s etc.), а также как мониторить работу отдельных сервисов приложения (в т.ч. на использование ресурсов)? Может есть практика сливать/мониторить логи приложений со всех докеров в единый и какой-то удобный механизм его мониторить (ElasticSearch/Kibana etc.)?

Спасибо.

Ответить
fedot

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

Ответить
Дмитрий Елисеев

Такое усилие с обратным пробросом портов понадбилось только для установки Xdebug.

А так да, Docker - это другой образ жизни со своими утиллитами.

Ответить
fedot

Думаю к концу курса прояснится насколько докер удобен и необходим на проде, пока особых плюсов не вижу, настроить удаленную виртуалку подключить себе гит и спокойно деплоить файлы, пока как то привычнее, все в файловой системе, никаких скрытых контейнеров, спокойно зашел куда понадобилось в данные момент и сделал свое дело. Если куча непонятного народа работает над проектом до да, такая унификация конечно будет сильно облегчать взаимодействие, а если всего несколько человек, которые свое дело знают, то плюсы непонятны, кучу доп инфы поднимать нужно, что бы разобраться, а где время брать и окупится ли такое его вложение. И если нода добавится, как с ней будет вообще непонятно, там куча модулей сборщиков и прочих утилит.

Ответить
Дмитрий Елисеев

Забегая наперед интересует, будет ли урок по организации мониторинга работы всех контейнеров, автоматизация их перезапуска при падении.

Они и сейчас перезапускаются с restart: always. Продвинутее с health checks будет при использовании Docker Swarm и K8s.

А также как мониторить работу отдельных сервисов приложения (в т.ч. на использование ресурсов)

Для этого как раз используют ElasticSearch и Kibana с различными Beats для сбора статистики.

Может есть практика сливать/мониторить логи приложений со всех докеров в единый и какой-то удобный механизм его мониторить?

Аналогично через Logstash и подобные агенты собирают все логи в ElasticSearch для Kibana.

Ответить
fedot

Большое спасибо, то что надо

Ответить
Роман

У вас в create_certbot идет установка из ppa:certbot/certbot, у Дмитрия из deb ftp.debian.org/debian buster-backports main. В чем принципиальная разница? И есть ли она.

Небольшое наблюдение: на самом деле я пытался вручную без плейбуков добавить репозитории как у Дмитрия, потом сделать установку certbot, начинал ругаться на верификацию потом, когда пытался сделать apt-get update и дальнейшие действия прекращались

Ответить
Алексей

ppa:certbot - это репы для убунты

buster-backports - для debian

Ответить
Bondarenko Alexandr

Добрый день! Планируется ли снять ролик о деплое динамических окружений (каждая фича развертывается на своем поддомене)? Было бы очень здорово и актуально.

Ответить
Дмитрий Елисеев

Это сложнее, но редко нужно. Проще сделать develop ветку с поддоменом и фичи мержить в неё.

Если нужно посмотреть работу фичи, то можно просто перейти по git checkout на ветку и запустить make init локально. А при работе по подходу с Feature Toggles разработка фич ведётся без ответвлений прямо в основной ветке.

А вообще поддомены можно включить добавлением A-записи * к домену. Либо использовать один тестовый поддомен и сертификат и просто поднимать фичи на разных портах, вычисляемых по имени ветки.

Ответить
Александр

Очень полезный был бы урок по стратегиях записи и сбора логов, да и про elk стек вцелом, как инструмента.

Ответить
Роман

Про xdebug - супер! Особенно такой интересный трюк с host.docker.internal. Очень познавательно, если разработка через докер затрагивает также и участников на винде и маке. Спасибо!

Ответить
Sergei

Я иногда в шоке, как вы вообще добираетесь до таких мелочей, дополнительные сетевые слои у винды/мака, первый IP всегда шлюз, установить в конфиге серверное имя, чтобы его шторм мог по имени отлавливать. Тут вообще черный пояс по докеру и шторму. Вы там похоже в документациях ночуете :) Только какая роль дебаг плагина в хроме? Куда он запросы шлет? Если у нас php-fpm отправляет инфу из контейнера в наружу.

Ответить
Дмитрий Елисеев

Вы там похоже в документациях ночуете :)

Приходится :)

Только какая роль дебаг плагина в хроме?

Плагин просто ко всем запросам из браузера добавляет маркерную куку XDEBUG_SESSION со значением из его настроек. Её видит Xdebug в php-fpm, включается и подключается оттуда к PhpStorm по адресу <phpstorm_ip>:9000 из remote_host и remote_port.

Ответить
Sergei

Спасибо!

Ответить
Ruslan

Я дошел до этого момента и скажу, что по моим наблюдениям Докер под Windows работает как-то по другому.

У меня сейчас Docker Desktop Edge 2.1 под WSL2.

Странность в том , что если я применяю наш патч-скрипт для унификации, то контейнеры отваливаются. Я стал смотреть адреса не устанавливая патча:

Если смотреть из виндовс консоли, то :

docker exec -it site_api-php-fpm_1 ping -q -c1 host.docker.internal
PING host.docker.internal (192.168.65.2): 56 data bytes

А если :

docker exec -it site_api-php-fpm_1 ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0
63: eth0@if64: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
    link/ether 02:42:ac:15:00:04 brd ff:ff:ff:ff:ff:ff
    inet 172.21.0.4/16 brd 172.21.255.255 scope global eth0
       valid_lft forever preferred_lft forever

ipconfig на хост машине:

Ethernet adapter vEthernet (WSL):

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::f0b1:ecf1:df99:e1ab%68
   IPv4 Address. . . . . . . . . . . : 172.21.0.1
   Subnet Mask . . . . . . . . . . . : 255.255.240.0
   Default Gateway . . . . . . . . . :

а такой сети нет 192.168.65.0

Как тогда это всё общается?

Ответить
Дмитрий Елисеев

Да, у нового подхода с WSL свои нюансы. Можете поисследовать в своей системе, как они там общаются в новом варианте виртуализации.

Ответить
Илья

Столкнулся с проблемой, что phpstrom не видит установленного xdebug во вкладке cli interpreters, когда настраиваю интерпретатор из докера. Само расширение установил, докер файлы один в один с вашими, но на этапе настройки интерпретатора xdebug не видится, дальше, соответственно, тоже - отладка не запускается.

Ответить
Илья

Забыл добавить: версия php тоже не определяется. PHP version: Not installed, Debugger: Not installed. Но контейнер то он определил и cli работает корректно

Ответить
Илья

Решил вопрос сменой источника интерпретатора: поменял docker-compose на docker, и версии определились. Dockre-compose почему-то не работает корректно.

Ответить
Ruslan

Вы же понимаете, что это почти обертка. У вас что-то в композере ни так установлено. (ИХМО)

Ответить
Александр

Такая же проблема ни php ни debuger не определяется в api-php-cli , код взял с комитта - Configured API web debug 24.12.2019

Ответить
Александр

тоже помог вариант - поменял docker-compose на docker,

Ответить
Дмитрий Елисеев

Чтобы применились все изменения из докерфайлов нужно не забывать пересобирать образы и перезапускать контейнеры вызовом docker-compose up --build d

Ответить
elmut

Соединение не было установлено. Возможно, '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 Когда делаю пинг

docker-compose exec api-php-fpm ping host.docker.internal

PING host.docker.internal (192.168.65.2): 56 data bytes
64 bytes from 192.168.65.2: seq=0 ttl=37 time=0.336 ms
64 bytes from 192.168.65.2: seq=1 ttl=37 time=0.873 ms
64 bytes from 192.168.65.2: seq=2 ttl=37 time=0.689 ms
64 bytes from 192.168.65.2: seq=3 ttl=37 time=0.502 ms

--- host.docker.internal ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.336/0.600/0.873 ms

адрес не докера, а локальный почему-то : (

Ответить
Сергей

В /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

вот такая инфа есть на оф документации докера. что то у них там не так с сетью на маках. Может @Дмитрий знает и сможешь подсказать

Недавно пересел с убунты на мак, и как то всё не так привычно и не так гладко)

Ответить
Олег

короче надо было смотреть видео до конца, а я сразу полез на форумы, как что то пошло не так. а оказывается Дмитрий все рассказал далее Дмитрий, спасибо!

Ответить
Сергей

Видимо я невнимательно слушал, я попробую, спасибо! А почему хост такой? Он разве не динамический?

Ответить
elmut

Docker Quickstart Terminal for windows 10

php-fpm:
    container_name: php-fpm # Назовем свой контейнер по красивому
    build: # Билдим с помощью dockerfile указав директорию где он лежит
        context: ./docker/App
        dockerfile: development/php-fpm/Dockerfile
    volumes: # Проброс папок
        - ./App:/app
    depends_on: # Укажем зависимости
        - redis
        - mailer
        - centrifugo
        - postgres
        - rabbitmq
    extra_hosts:
        - " host.docker.internal: 192.168.99.1 "
    environment:
        APP_ENV: dev
        APP_DEBUG: 1
        XDEBUG_CONFIG: remote_host=192.168.99.1
        PHP_IDE_CONFIG: "serverName=APP"
    networks:
        - web_frontend
Ответить
bogdan

супер. спасибо! как раз разобрана трабла с дебаггером на маке

Ответить
Алексей

Добрый день! В настройках проекта в PhpStorm не получается установить соединение с докером, пишет "Отказано в доступе /var/run/docker.sock". Получается только соединиться если шторм запускать из-под рута. Подскажите, пожалуйста, что я делаю не так?

Ответить
Дмитрий Елисеев

Чтобы с Docker работать не от root нужно своего пользователя добавить в его группу:

sudo usermod -aG docker $USER
Ответить
Алексей

Спасибо большое!

Ответить
Ярослав

Когда я правой клавишей мыши нажимаю на app.php в директории bin, затем на Debug 'app.php (Php Script)', то не идет соединение с xdebug. Его версия обновилась до третьей и ini-настройки нужно указывать уже другие. Я указал такие:

xdebug.mode=debug
xdebug.client_host=host.docker.internal
xdebug.client_port=9003

Но пока безрезультатно. В шторме пишет:

Connection was not established. Cannot start debugger session with 'Xdebug 3.0.2'.

[docker-compose://[/home/regal/PhpstormProjects/slim-auction/docker-compose.yml]:api-php-cli/]:php -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9003 -dxdebug.remote_host=172.17.0.1 /app/bin/app.php
Xdebug: [Config] The setting 'xdebug.remote_enable' has been renamed, see the upgrading guide at https://xdebug.org/docs/upgrade_guide#changed-xdebug.remote_enable (See: https://xdebug.org/docs/errors#CFG-C-CHANGED)
Xdebug: [Config] The setting 'xdebug.remote_host' has been renamed, see the upgrading guide at https://xdebug.org/docs/upgrade_guide#changed-xdebug.remote_host (See: https://xdebug.org/docs/errors#CFG-C-CHANGED)
Xdebug: [Config] The setting 'xdebug.remote_mode' has been renamed, see the upgrading guide at https://xdebug.org/docs/upgrade_guide#changed-xdebug.remote_mode (See: https://xdebug.org/docs/errors#CFG-C-CHANGED)
Xdebug: [Config] The setting 'xdebug.remote_port' has been renamed, see the upgrading guide at https://xdebug.org/docs/upgrade_guide#changed-xdebug.remote_port (See: https://xdebug.org/docs/errors#CFG-C-CHANGED)
Xdebug: [Step Debug] Could not connect to debugging client. Tried: host.docker.internal:9003 (through xdebug.client_host/xdebug.client_port) :-(

Система: Linux Mint 20. Интерпретатор PHP определяется нормально.

Ответить
Дмитрий Елисеев

Обновление мы рассмотрели в 44-ом эпизоде.

Ответить
Алескандр

А как дебажить ajax запросы из контейнера с нодой к контейнеру с php-fpm? Там другой порт, поэтому куки, которые устанавливает ХDebug Helper не посылаются. Простой вариант: отказаться от хелпера, а сделать xdebug.remote_autostart = 1, но тогда дебагер будет дергаться на каждый чих

Ответить
Дмитрий Елисеев

Например, можно по условию во все Ajax-запросы примешивать параметр ?XDEBUG_SESSION_START=1

Ответить
Ruslan

Кому интересно, или кто только начал изучать этот курс. Год назад была проблема с VirtualBox и Hyper-V, вместе они не уживались на одной машине (при одной загрузке). Сейчас всё работает как надо. :)

Ответить
Дмитрий

Дмитрий, подскажите, пожалуйста, мне, новичку, как настроить связку Xdebug PhpStorm Docker Yii2 для дебага например такой консольной команды

docker-compose run --rm php-7.3 php site.local/yii test/a

Команда работает.

Но не ловятся брейкпоинты проставленные в actionA в контроллере TestController .

В видео уроке показан запуск отдельного php скрипта. Так работает. Но вот дебаг консольных контроллеров yii2 в папке commands не работает.

Спасибо.

Ответить
Дмитрий Елисеев

Чтобы запускать вручную нужно самому в консоли устанавливать параметры отладки как в примерах для Xdebug 3 здесь вроде:

docker-compose run --rm php-7.3 php -dxdebug.mode=debug yii test/a

или:

docker-compose run --rm php-7.3 sh -c 'XDEBUG_CONFIG="debug.mode=debug" php yii test/a'
Ответить
Максим

Начиная с Docker 20.10 для работы host.docker.internal в линукc.

Можно запускать контейнер с параметром --add-host=host.docker.internal:host-gateway

или:

В docker-compose для сервиса (php-fpm) прописать

extra_hosts:
- "host.docker.internal:host-gateway"

Это обновит файл /etc/hosts автоматически и привяжет шлюз к имени host.docker.internal

https://stackoverflow.com/a/43541732

Ответить
Дмитрий Гончаров

Дмитрий, спасибо! Вы не представляете сколько времени пришлось потратить, чтобы найти что-то подобное!

Ответить
Sergalas

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

Xdebug: [Step Debug] Time-out connecting to debugging client, waited: 200 ms. Tried: 172.17.0.1:9003 (fallback through xdebug.client_host/xdebug.client_port) :-(

ну и конекта нет совсем даже на этапе дебага консольного приложения.

Ответить
Дмитрий Елисеев

Весьма странно.

Ответить
Джамал

Доброй ночи, как дебажить не прямые php скрипты типо app.php. Допустим поставил точку остановки в классе *Command которая запускается так "php artisan command:run". У меня ничего не происходит (

Ответить
Джамал

Нашел такое решение

php -dxdebug.mode=debug -dxdebug.start_with_request=yes -dxdebug.client_host=host.docker.internal -dxdebug.client_port=9020 artisan
Ответить
Максим

Добрый день! Подскажите, что не так может быть. Пересобираю контейнер, они падают.

В логах

nginx host not found in upstream "api-php-fpm" in /etc/nginx/conf.d/default.conf:13, 
php-fpm - standard_init_linux.go:228: exec user process caused: no such file or directory .
Ответить
Максим

Нашел ошибку, #!/bin/sh неверно указал. Было сначала #!/bin/bash . Гугл в помощь)

Ответить
Александр Панков

Здравствуйте, получаю такие ошибки x-debug, использую самый первый вариант (с указанием сети явно) на ubuntu

[Step Debug] Creating socket for '192.168.200.1:9003', poll success, but error: Operation in progress (29).	🖹
[Step Debug] Could not connect to debugging client. Tried: 192.168.200.1:9003 (through xdebug.client_host/xdebug.client_port) :-(

в чем может быть проблема как ее решить?

Ответить
Дмитрий Елисеев

А в PhpStorm прослушивание включено?

Ответить
Влад

Здравствуйте Дмитрий! Не знаю куда написать - напишу сюда) Можно ли добвыить возможность скачивания или оффлайн просмотра эпизодов?

Ответить
Дмитрий Елисеев

Увы, но это будет способствовать пиратству.

Ответить
slo_nik

Добрый вечер, Дмитрий.

Возникла небольшая проблема с xdebug и не могу понять в чём дело.

Настроил всё как в уроке, перепроверил построчно все настройки, но думаю, что дело всё-таки не в этом.

Есть старый проект на yii2, который надо довести до ума. Работа с очередями, в очередь ставится файл на парсинг товаров и запись в базу.

Не могу понять, почему не ловятся точки останова в самом файле очереди.

В контроллере ставлю точку на строке, в которой добавляется задача в очередь

$queue = Yii::$app->queue->ttr(10000)->push(new FinishYmlImportJob([....])

В этом месте скрипт останавливается, но потом переходит с следующему условию в этом файле, а вот на точки в FinishYmlImportJob никак не реагирует.

Убираю вышеуказанную точку, но на этом вся работа xdebug прекращается.

В Phpstorm вылетают сообщения

Debug session was finished without being paused
It may be caused by path mappings misconfiguration or not synchronized local and remote projects.  To figure out the problem check path mappings configuration for 'Mednav' server at PHP|Servers or enable 'Break at first line in PHP scripts' option (from Run menu).

Указал в конфиге xdebug создавать свой лог. В логе явных ошибок не видно, только отладочная информация.

[12] Log opened at 2023-02-01 23:46:02.975381
[12] [Config] DEBUG: Checking if trigger 'XDEBUG_TRIGGER' is enabled for mode 'debug'
[12] [Config] INFO: Trigger value for 'XDEBUG_TRIGGER' not found, falling back to 'XDEBUG_SESSION'
[12] [Config] INFO: No shared secret: Activating
[12] [Step Debug] INFO: Connecting to configured address/port: host.docker.internal:9003.
[12] [Step Debug] INFO: Connected to debugging client: host.docker.internal:9003 (through xdebug.client_host/xdebug.client_port).

Затем куча подобных строк

[12] [Step Debug] <- feature_set -i 2 -n max_depth -v 1
[12] [Step Debug] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="2" feature="max_depth" success="1"></response>

Пока даже не представляю,в какой стороне искать проблему.

Подскажите, как всё-таки проверить очередь?

Ответить
Дмитрий Елисеев

Не могу понять, почему не ловятся точки останова в самом файле очереди.

Потому что контроллер выполняется в процессе PHP-FPM, где отладка включается через Cookies, а задание очереди выполняется в отдельном запущенном консольном процессе PHP-CLI.

Для отладки консольных команд можно как показано в видео перейти в Run > Edit Configurations, добавить запуск PHP-скрипта yiic.php queue/listen и запускать его оттуда кнопкой Debug.

Либо запускать слушатель очереди в терминале, указывая ему вручную все параметры по примеру из документации PhpStorm.

Ответить
slo_nik

Понял, буду пробовать. Спасибо.

Ответить
Иван

Была ошибка при выполнении make init, решено явным указанием версии для Xdebug (более новые версии требуют PHP 8+): pecl install xdebug-3.1.6

Ответить
Зарегистрируйтесь или войдите чтобы оставить комментарий

Или войти через:

Google
GitHub
Yandex
MailRu