Xdebug с Docker сочиняет над Atom
Я использую Docker compose с настройкой PHP и Apache как 2 разных сервиса. Я использую Atom как IDE и расширение php-debug для отладки.
докер-compose.yml
services:
httpd:
image: httpd:latest
ports:
- 8080:80
- 9000:9000
volumes:
- ./docker/httpd/conf:/usr/local/apache2/conf
volumes_from:
- php
php:
build: ./docker/php/
expose:
- 9000
volumes:
- ./code:/usr/local/apache2/htdocs
Dockerfile для PHP
FROM php:7.2-fpm
RUN docker-php-ext-install pdo_mysql json mysqli
# Enable and configure xdebug
RUN pecl install xdebug
RUN docker-php-ext-enable xdebug
RUN sed -i '1 a xdebug.remote_autostart=true' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_mode=req' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_handler=dbgp' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_connect_back=0 ' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_port=9000' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_host=172.19.0.1' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_enable=1' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.idekey=xdebug-atom' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_autostart=1' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
php-отладка в Atom
"php-debug":
PathMaps: [
"remotepath;localpath"
"/usr/local/apache2/htdocs;/Users/shahzadfatehali/Sites/fiddlesoft/mansab/code"
]
ServerPort: 9000
currentPanelHeight: "259px"
currentPanelMode: "bottom"
Когда я запускаю PHPDebug в Atom, он показывает мне, что его слушает 127.0.0.1:9000
но когда я захожу на страницу в браузере, я не вижу выполнения точки останова в Atom.
Кто-нибудь может определить здесь неправильную конфигурацию?
0 ответов
ПРИМЕЧАНИЕ: я не мог помочь внести свой вклад и внести свой вклад, так как я был там.
Решение
Предположения
- Вы разбираетесь в PHP, Nginx, Docker, CLI, Linux и Atom.
- Вы находитесь в режиме разработки, а не в производстве.
- Вы разрабатываете использование среды, подобной nix (UN X).
- Вы используете Atom в качестве IDE.
- Динамическое приложение, в самом простом случае, ваш проект Dockerized должен быть настроен на предоставление трех (3) контейнеров, а именно:
- один обслуживающий веб-сервер Nginx,
- второй, обслуживающий движок PHP-FPM
- третий, обслуживающий сервер БД.
- Ваш Docker Compose должен быть настроен на использование томов для локального связывания (хоста) с контейнером PHP-FPM.
1 - Для Docker PHP-FPM Контейнер
1.1 - Создайте локально и отредактируйте свой ini-файл xdebug, чтобы отразить следующие конфигурации
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20170718/xdebug.so
[xdebug]
xdebug.remote_enable=1
xdebug.remote_host=host.docker.internal
xdebug.remote_port=9000
xdebug.remote_autostart=1
xdebug.remote.mode=req
xdebug.remote.handler=dbgp
xdebug.remote_connect_back=0
xdebug.remote_log=/tmp/xdebug-error.log
Значениеhost.docker.internal, присвоенное xdebug.remote_host, позволит Docker отобразить правильный IP-адрес хоста.
1.2 - Сконфигурируйте PHP-FPM Dockerfile для установки xdebug, активируйте модуль и скопируйте его файл конфигурации в контейнер
FROM php:7.2-fpm
...
RUN pecl install -f xdebug \
docker-php-ext-enable xdebug
...
COPY ./conf.d/docker-php-ext-xdebug.ini /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
1.3 - Настройка службы PHP-FPM в Docker Compose
version: '3.7'
networks:
bridge_network:
driver: bridge
services:
web_server:
...
networks:
- bridge_network
depends_on:
- app_server
- db_server
app_server:
...
ports:
- 9000:9000
volumes:
- ../..:/var/www
networks:
- bridge_network
depends_on:
- db_server
db_server:
...
networks:
- bridge_network
2 - Atom IDE
2.1 - Установить php-ide
Atom IDE > Preferences/Settings > Install > search php-ide > click install
2.2 - Установить language-php
Atom IDE > Preferences/Settings > Install > search language-php > click install
2.3 - Установить php-debug
Atom IDE > Preferences/Settings > Install > search php-debug > click install
ВАЖНО: не определяйте никакие PathMaps вручную. Atom IDE определит это для вас.
3 - Отладка PHP-кода
3.1 - Переключить панели PHP-Debug + PHP Console
Atom IDE > Bottom left corner of the app window > Find two tabs "PHP Debug" and "PHP Console" > Click on one of them > Two panels will open.
ПРИМЕЧАНИЕ. Для отладки кода PHP нужны только панели "PHP Debug" и "PHP Console", и ничего более.
3.1 - Определить точки останова
- Откройте файл PHP.
- Прокрутите до целевой строки.
- Установите точку останова, указав и щелкнув по левому краю линии.
- Вы увидите надстройку точек останова в панели "PHP Debug"> "Окно точек останова".
3.2 - Присоединение отладчика
- Откройте ваш интернет-браузер предпочтений.
- Перейдите по http://localhost/, который указывает на сервер Nginx.
- Просмотрите приложение и отправляйтесь туда, где предположительно находится точка останова.
- Пусть страница загрузится. После загрузки страницы.
- Повернитесь к Atom IDE, и вы увидите всплывающее окно с предложением "сохранить" карты путей, которые были захвачены Atom IDE.
- Вы должны действовать быстро и нажать "Сохранить", поскольку время реакции ограничено. В противном случае вам придется повторить, перезагрузив страницу.