PHP, DOCKER & XDEBUG: їжа чи інструкція до застосування
У версіях Xdebug до версії 3 налаштування покрокового налагодження для коду всередині контейнерів Docker часто було, м'яко кажучи, складним завданням. Однак у версії 3 це стало майже тривіально. Це короткий посібник допоможе розібратися в тому, що потрібно зробити, незалежно від того, який (підтримуваний) текстовий редактор чи IDE використовується.
Що знадобиться?
Щоб дотримуватися цього посібника, переконайтеся, що у вас встановлено Docker для вашої операційної системи, в ідеалі остання версія, і один з підтримуваних клієнтів Xdebug. Ви можете знайти всі інструкції, необхідні для встановлення Docker – незалежно від того, чи ви використовуєте Linux, macOS або Windows – у документації по Docker.
Базова конфігурація Docker Compose
Для простоти припустимо, що ваша конфігурація Docker Compose, що зберігається у файлі docker-compose.yml у корені каталогу проекту, виглядає так, як показано на прикладі нижче.
./docker/php/Dockerfile FROM php:7.4-apache RUN pecl install xdebug \ && docker-php-ext-enable xdebug
docker-compose.yml
version: ‘3’
services:
php:
build: ./docker/php/
ports:
— 8080:80
volumes:
— ./:/var/www/html
Вихідний код програми, незалежно від того, чи він використовує такі фреймворки, як Laravel або Symfony, знаходиться в кореневому каталозі проекту на машині розробки і буде доступний для контейнера в /var/www/html.
Установка Xdebug 3 у контейнер PHP
Контейнер php використовує файл користувача Dockerfile (./docker/php/Dockerfile) для визначення кроків збірки, які ви можете побачити в прикладі нижче. Це пов'язано з тим, що Xdebug не поставляється "в комплекті" з офіційними контейнерами PHP Docker Hub.
./docker/php/Dockerfile
FROM php:7.4-apache
RUN pecl install xdebug \
&& docker-php-ext-enable xdebug
Однак для його встановлення та включення потрібно всього два додаткові кроки, як ви можете бачити вище. Це:
Установка за допомогою Pecl
- Увімкнення його за допомогою docker-php-ext-enable. Ця команда позбавляє нас необхідності писати власний сценарій оболонки.
Налаштування Xdebug для покрокової налагодження
Коли Xdebug встановлений та увімкнений, нам потрібно включити покрокове налагодження. Для цього створіть конфігураційний файл: docker/php/conf.d/xdebug.ini; та шляхи, якщо у вас ще не налаштована структура каталогів.
Щоб заощадити час, можна використовувати наступні команди.
mkdir -p docker/php/conf.d
touch docker/php/conf.d/xdebug.ini
У докер/php/conf.d/xdebug.ini додайте наступну конфігурацію для налаштування Xdebug.
zend_extension=xdebug
[xdebug]
xdebug.mode=develop,debug
xdebug.client_host=host.docker.internalxdebug.idekey=»VSCODE»xdebug.client_port=9003Xdebug.start_with_request=yes
Пояснення файлу xdebug.ini:
- mode — цей параметр визначає, які функції Xdebug увімкнені. Ми встановили develop для включення допоміжних засобів розробки, таких як отримання покращених повідомлень про помилки, та debug для включення покрокової налагодження.
- client_host - цей параметр повідомляє Xdebug IP-адресу або ім'я хоста комп'ютера, на якому працює ваш текстовий редактор або IDE.
- client_port - цей параметр повідомляє порт, до якого Xdebug намагається підключитися на віддаленому хості
- idekey — цей параметр вказує, який ключ IDE Xdebug повинен передати клієнту налагодження або проксі-серверу, ми встановили “VSCODE”, але це може бути будь-який кастомний ключ, який згодом буде вказаний у розширенні браузера
- start_with_request - цей параметр визначає, чи активуються трасування функції, статистика складання сміття, профільування або покрокове налагодження на початку запиту PHP. Налаштування його в yes вказує Xdebug завжди ініціювати сеанс налагодження.
Потім у визначенні сервісу php у docker-compose.yml додайте наступний запис елемент volumes.
— ./docker/php/conf.d/xdebug.ini:/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
А також створіть новий елемент extra_hosts на тому ж рівні, що і volumes:
extra_hosts:
- "host.docker.internal:host-gateway"
Створивши ini-файл та оновивши docker-compose.yml, щоб використовувати його у php-контейнері, перезапустіть та перезберіть його, виконавши наступну команду.
docker-compose up -d -build
Прапор build створює образи перед запуском контейнерів. Дуже важливо використовувати цей прапор, тому що без нього зміни, які ми зробили в docker/php/Dockerfile, не набудуть чинності.
Налаштування Xdebug у текстовому редакторі або IDE
Тепер, коли ми закінчили налаштування PHP-контейнера, нам потрібно налаштувати наш клієнт. Це залежить від клієнта, який ви використовуєте. Для цілей цієї статті я опишу налаштування у VSCode та PhpStorm.
Відгуки
Mr. Robot
Було цiкаво дiзнатись, як користуватись xdebag'гом, дякую.