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 - Определить точки останова

  1. Откройте файл PHP.
  2. Прокрутите до целевой строки.
  3. Установите точку останова, указав и щелкнув по левому краю линии.
  4. Вы увидите надстройку точек останова в панели "PHP Debug"> "Окно точек останова".

3.2 - Присоединение отладчика

  1. Откройте ваш интернет-браузер предпочтений.
  2. Перейдите по http://localhost/, который указывает на сервер Nginx.
  3. Просмотрите приложение и отправляйтесь туда, где предположительно находится точка останова.
  4. Пусть страница загрузится. После загрузки страницы.
  5. Повернитесь к Atom IDE, и вы увидите всплывающее окно с предложением "сохранить" карты путей, которые были захвачены Atom IDE.
  6. Вы должны действовать быстро и нажать "Сохранить", поскольку время реакции ограничено. В противном случае вам придется повторить, перезагрузив страницу.
Другие вопросы по тегам