Как правильно настроить xdebug + php-fpm на docker desktop в mac os + phpstorm?

Настройка xdebug и php-fpm в Docker Desktop на Mac OS вместе с PHPStorm может быть сложной, но справившись с ней, вы сможете комфортно отлаживать свой код.

Первым шагом будет настройка Dockerfile для вашего контейнера. Вам понадобится установить необходимый компонент xdebug и включить его в конфигурации PHP.

Пример Dockerfile:

FROM php:7.4-fpm

RUN pecl install xdebug 
    && docker-php-ext-enable xdebug

RUN echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
    && echo "xdebug.remote_autostart=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
    && echo "xdebug.remote_host=docker.for.mac.localhost" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini 
    && echo "xdebug.remote_port=9000" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini

CMD ["php-fpm"]

В данном Dockerfile мы сначала устанавливаем xdebug с помощью pecl, а затем включаем его в конфигурации PHP. Мы добавляем несколько настроек xdebug, чтобы он работал с PHPStorm и Docker Desktop на Mac OS.

После создания Dockerfile следующим шагом является создание docker-compose.yml файла для запуска контейнера. Вам понадобится настроить сервис php-fpm и прокинуть порт для отладчика xdebug.

Пример docker-compose.yml:

version: '3'

services:
  php-fpm:
    build:
      context: .
    volumes:
      - ./src:/var/www/html
    ports:
      - 9000:9000 # порт для PHP-FPM
    environment:
      XDEBUG_CONFIG: remote_enable=1 remote_mode=req remote_port=9000 remote_host=docker.for.mac.localhost

  nginx:
    image: nginx:latest
    ports:
      - 80:80
    volumes:
      - ./src:/var/www/html
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf

В данном примере мы создаем два сервиса – php-fpm и nginx. Мы пробрасываем порт 9000 для xdebug, чтобы можно было подключиться к отладчику, и прокидываем volume для синхронизации кода между хостом и контейнером.

После этого вам следует настроить PHPStorm для работы с xdebug и php-fpm.

1. Откройте настройки PHPStorm и перейдите в раздел "Languages & Frameworks" -> "PHP" -> "Debug".
2. Убедитесь, что настройка "Debug port" соответствует порту для xdebug (по умолчанию это 9000).
3. Откройте раздел "Languages & Frameworks" -> "PHP" -> "Servers" и нажмите "+" для добавления нового сервера.
4. Укажите имя сервера и корневую папку вашего проекта.
5. Выберите опцию "Use path mappings" и установите соответствующие пути между вашим локальным проектом и папкой внутри контейнера (обычно это /var/www/html).
6. Установите флажок "Use this server for all local files".
7. Нажмите "OK" для сохранения настроек сервера.

Теперь вы можете запустить контейнеры с помощью команды docker-compose up из терминала и начать отладку своего кода в PHPStorm.

Для запуска отладчика в PHPStorm предлагается два наиболее популярных варианта:

1. Браузерная отладка: откройте страницу вашего приложения в браузере и добавьте параметр в URL ?XDEBUG_SESSION_START=PHPSTORM. PHPStorm автоматически перейдет в режим отладки и остановится на первой точке останова.
2. Remote CLI Debug: воспользуйтесь командой php -dxdebug.remote_enable=On -dxdebug.remote_autostart=On script.php, где script.php – это файл, который вы хотите отладить. PHPStorm снова перейдет в режим отладки и остановится на первой точке останова.

Поздравляю, вы настроили xdebug и php-fpm в Docker Desktop на Mac OS вместе с PHPStorm! Теперь вы можете удобно отлаживать свой код в вашем контейнере.