Xdebug для Docker в PhpStorm

Установка Xdebug в Docker-образы. Настройка отладки консольных скриптов. Подключение к PhpStorm для отладки веб-скриптов в PHP-FPM.

Скрытый контент
Комментарии (51)
Arunas
2020-01-03 17:47

спасибо

Ответить
Алексей
2020-01-04 08:14

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

-- Для локальной разработки я все-таки предпочитаю оф. образ 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
2020-01-04 15:22

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

Ответить
Алексей
2020-01-04 16:39

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

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

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

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

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

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

Ответить
Deworker Pro
2020-01-04 17:01

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

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

Ответить
Алексей
2020-01-04 17:23

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

Ответить
Алексей
2020-01-07 10:13

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

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

Ответить
Ruslan
2020-01-04 08:23

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

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

Ответить
Алексей
2020-01-04 09:38

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

Ответить
Ruslan
2020-01-04 15:09

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

Ответить
Алексей
2020-01-04 15:17

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

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

Ответить
Sergei
2020-01-13 14:51

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

Ответить
Дмитрий Ориховский
2020-01-04 21:08

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

Ответить
Ruslan
2020-01-05 15:28

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

Ответить
Дмитрий Ориховский
2020-01-05 15:32

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

Ответить
Алекс
2020-02-04 18:13

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

Ответить
Konstantin
2020-03-30 18:39

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

Ответить
Ruslan
2020-03-30 21:10

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

Ответить
Konstantin
2020-03-31 04:58

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

Ответить
Konstantin
2020-03-31 04:58

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

Ответить
Ruslan
2020-03-31 14:06

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

Ответить
Ruslan
2020-01-04 08:30

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

Ответить
Алексей
2020-01-04 09:41

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

Ответить
Ruslan
2020-01-05 22:13

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

Ответить
Sam
2020-01-05 05:19

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

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

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

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

Ответить
Ruslan
2020-01-05 15:26

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

Ответить
Sam
2020-01-06 05:45

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

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

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

Ответить
fedot
2020-01-05 20:37

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

Ответить
Руслан
2020-01-06 09:14

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

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

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

Спасибо.

Ответить
fedot
2020-01-06 16:17

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

Ответить
Deworker Pro
2020-01-06 17:58

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

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

Ответить
fedot
2020-01-06 18:59

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

Ответить
Deworker Pro
2020-01-06 17:35

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

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

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

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

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

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

Ответить
fedot
2020-01-09 05:20

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

Ответить
Роман
2020-01-16 09:13

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

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

Ответить
Алексей
2020-01-16 09:46

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

buster-backports - для debian

Ответить
Bondarenko Alexandr
2020-01-06 10:01

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

Ответить
Deworker Pro
2020-01-06 17:55

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

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

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

Ответить
Александр
2020-01-15 00:48

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

Ответить
Роман
2020-01-16 08:50

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

Ответить
Sergei
2020-01-17 14:55

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

Ответить
Deworker Pro
2020-01-17 15:26

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

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

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

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

Ответить
Sergei
2020-01-17 15:34

Спасибо!

Ответить
Ruslan
2020-01-22 22:58

Я дошел до этого момента и скажу, что по моим наблюдениям Докер под 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

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

Ответить
Deworker Pro
2020-01-24 09:09

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

Ответить
Илья
2020-02-07 07:02

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

Ответить
Илья
2020-02-07 09:08

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

Ответить
Илья
2020-02-07 11:32

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

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