Настройка отладки PHP CLI в Docker с PhpStorm на удалёнке
Пошаговое руководство по настройке phpstorm xdebug для отладки PHP CLI-скриптов в Docker на удаленной машине. Конфигурация Xdebug, PhpStorm, переменные окружения и решение проблем docker php cli отладки.
Как настроить отладку PHP CLI-скрипта, запущенного в Docker на удаленной машине, в PhpStorm? Какие рекомендуемые настройки конфигурации для успешной отладки?
Настройка отладки PHP CLI-скриптов в Docker-контейнере на удаленной машине с помощью PhpStorm требует правильной конфигурации Xdebug, Docker-контейнера и самой IDE. Для успешной интеграции необходимо настроить параметры Xdebug в Dockerfile, правильно сконфигурировать PhpStorm для работы с удаленными серверами и установить переменные окружения при запуске CLI-скриптов.
Содержание
- Введение в отладку PHP CLI-скриптов в Docker с PhpStorm
- Подготовка Docker-контейнера для отладки с Xdebug
- Конфигурация PhpStorm для работы с Xdebug и Docker
- Настройка удаленной отладки на удаленной машине
- Переменные окружения и параметры запуска для CLI-скриптов
- Решение распространенных проблем при отладке
- Практический пример настройки и использования
- Источники
- Заключение
Введение в отладку PHP CLI-скриптов в Docker с PhpStorm
Отладка PHP CLI-скриптов, работающих в Docker-контейнерах на удаленных машинах, — это мощная возможность, которая значительно ускоряет разработку и решение сложных проблем. Настройка phpstorm xdebug интеграции требует понимания взаимодействия трех основных компонентов: PHP CLI-скриптов, Docker-контейнеров и PhpStorm IDE.
Когда вы работаете с docker php cli приложениями, отладка становится особенно важной, так как контейнеры изолируют среду выполнения, что может затруднить прямой доступ к коду и переменным. Современные решения позволяют настроить отладку так, чтобы вы могли видеть выполнение кода прямо в PhpStorm, даже если скрипт запущен на удаленном сервере в Docker-контейнере.
Основные преимущества такой настройки включают:
- Возможность ставить точки останова и пошагово выполнять код
- Просмотр значений переменных в реальном времени
- Анализ стека вызовов и трассировка выполнения
- Отладка без необходимости копирования кода на локальную машину
Настройка docker xdebug phpstorm интеграции требует внимания к деталям, но однажды настроенная, она сэкономит вам часы отладки и повысит производительность разработки.
Подготовка Docker-контейнера для отладки с Xdebug
Первый шаг для настройки отладки — правильно подготовить Docker-контейнер для работы с Xdebug. Это включает установку и конфигурацию Xdebug в Dockerfile или через docker-compose.yml.
Для начала, убедитесь, что у вас установлена актуальная версия Xdebug, совместимая с вашей версией PHP. В большинстве случаев подойдет Xdebug 3.x. Добавьте в ваш Dockerfile следующие строки для установки Xdebug:
# Установка Xdebug
RUN pecl install xdebug
RUN docker-php-ext-enable xdebug
После установки Xdebug необходимо правильно его сконфигурировать. Создайте файл xdebug.ini в директории с Docker-файлами со следующим содержанием:
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.client_host = host.docker.internal
xdebug.client_port = 9003
xdebug.log = /var/log/xdebug.log
Важно отметить, что для удаленной машины xdebug.client_host нужно будет заменить на IP-адрес хост-машины, где запущен PhpStorm. Для локальной разработки host.docker.internal обычно работает корректно на большинстве систем.
Если вы используете docker-compose, настройте Xdebug через сервис:
services:
app:
build:
context: .
dockerfile: Dockerfile
environment:
XDEBUG_MODE: debug
XDEBUG_CONFIG: remote_host=host.docker.internal remote_port=9003
Дополнительные параметры конфигурации Xdebug, которые могут пригодиться для phpstorm xdebug интеграции:
xdebug.idekey = PHPSTORM
xdebug.discover_client_host = 1
xdebug.log_level = 0
xdebug.log = /tmp/xdebug.log
Эти параметры обеспечивают более надежную связь между контейнером и PhpStorm. Не забудьте перезапустить контейнер после внесения изменений в конфигурацию Xdebug. Проверьте работу Xdebug внутри контейнера с помощью команды php -m | grep xdebug — она должна показать, что модуль загружен.
Конфигурация PhpStorm для работы с Xdebug и Docker
Теперь, когда Docker-контейнер готов к работе с Xdebug, необходимо правильно настроить PhpStorm для использования docker php cli отладки. Откройте PhpStorm и перейдите в настройки (File → Settings на Windows/Linux или PhpStorm → Preferences на macOS).
Настройка PHP интерпретатора
- Перейдите в Languages & Frameworks → PHP → CLI Interpreter
- Нажмите + для добавления нового интерпретатора
- Выберите Docker в списке типов интерпретаторов
- Укажите образ Docker, который вы используете для разработки
- Проверьте, что путь к исполняемому файлу PHP правильный
Настройка серверов для удаленной отладки
- Перейдите в Languages & Frameworks → PHP → Servers
- Нажмите + для добавления нового сервера
- Укажите имя сервера (например, “Remote Docker Server”)
- Для хоста введите IP-адрес удаленной машины
- Укажите корневую директорию проекта на удаленной машине
- Включите опцию “Use path mappings”
- Настройте соответствие локальных путей к путям на удаленной машине
Настройка порта отладки
- Перейдите в Languages & Frameworks → PHP → Debug
- Убедитесь, что порт отладки совпадает с тем, что указан в конфигурации Xdebug (обычно 9003)
- Включите опцию “Can accept external connections”
- Установите “Debug port” в то же значение, что и в Xdebug конфигурации
Настройка Docker интеграции
- Перейдите в Languages & Frameworks → PHP → Docker
- Убедитесь, что настроенный Docker интерпретатор выбран
- Проверьте, что контейнер доступен и правильно подключен
Эти настройки обеспечивают правильную связь между PhpStorm и Docker-контейнером на удаленной машине. После завершения настройки перезапустите PhpStorm, чтобы все изменения вступили в силу. Теперь PhpStorm готов к приему отладочных сессий из Docker-контейнера.
Настройка удаленной отладки на удаленной машине
Настройка удаленной отладки для docker php cli приложений на удаленной машине требует особого внимания к сетевым аспектам и безопасности. Когда ваш Docker-контейнер находится на удаленном сервере, необходимо правильно настроить маршрутизацию трафика для отладочной сессии.
Первым шагом является определение IP-адреса удаленной машины, на которой находится PhpStorm. Этот IP-адрес нужно указать в конфигурации Xdebug в Docker-контейнере. Если вы работаете через VPN или корпоративную сеть, убедитесь, что порт отладки (обычно 9003) открыт и доступен для подключения из Docker-контейнера.
Для настройки удаленной отладки внесите следующие изменения в конфигурацию Xdebug в Dockerfile или docker-compose.yml:
environment:
XDEBUG_MODE: debug
XDEBUG_CONFIG: remote_host=ВАШ_IP_АДРЕС remote_port=9003
Важно понимать, что remote_host в Xdebug указывает на машину, где запущен PhpStorm, а не на сам Docker-контейнер. Это ключевой момент, который часто вызывает путаницу при настройке docker xdebug phpstorm интеграции на удаленных машинах.
Если вы используете Linux-машину для разработки, вы можете определить IP-адрес с помощью команды:
hostname -I
Для Windows используйте:
ipconfig | findstr IPv4
Для macOS:
ifconfig | grep "inet "
Дополнительно настройте брандмауэр на удаленной машине, чтобы разрешить входящие соединения на порт отладки. Например, для UFW:
sudo ufw allow 9003
Для iptables:
sudo iptables -A INPUT -p tcp --dport 9003 -j ACCEPT
Если вы используете Docker на удаленной машине, убедитесь, что сетевые настройки контейнера позволяют ему подключаться к хост-машине. Для этого можно использовать опцию --add-host в docker run:
docker run --add-host=host.docker.internal:host-gateway ...
Или в docker-compose:
extra_hosts:
- "host.docker.internal:host-gateway"
Эти настройки обеспечивают правильную маршрутизацию трафика между Docker-контейнером и PhpStorm на удаленной машине, что является критически важным для успешной отладки PHP CLI-приложений.
Переменные окружения и параметры запуска для CLI-скриптов
Правильная настройка переменных окружения при запуске PHP CLI-скриптов в Docker-контейнере — это ключевой аспект для успешной отладки с помощью phpstorm xdebug интеграции. Когда вы запускаете скрипт в контейнере, необходимо указать PhpStorm, какой сервер использовать для отладки.
Основная переменная окружения, которая управляет отладкой в CLI-скриптах — PHP_IDE_CONFIG. Она указывает PhpStorm, какой сервер использовать для отладочной сессии. Значение этой переменной должно соответствовать имени сервера, который вы настроили в PhpStorm (см. предыдущий раздел).
Пример запуска CLI-скрипта с правильными переменными окружения:
docker exec -it container_name \
PHP_IDE_CONFIG="serverName=Remote_Docker_Server" \
php /path/to/your/script.php
Здесь Remote_Docker_Server — это имя сервера, которое вы указали в настройках PhpStorm. Если вы используете docker-compose, запуск может выглядеть так:
docker-compose exec app \
PHP_IDE_CONFIG="serverName=Remote_Docker_Server" \
php /path/to/your/script.php
Дополнительные переменные окружения, которые могут пригодиться для настройки docker php cli отладки:
PHP_IDE_CONFIG="serverName=Remote_Docker_Server"
XDEBUG_MODE=debug
XDEBUG_CONFIG="remote_host=ВАШ_IP_АДРЕС remote_port=9003"
Важно отметить, что порядок запуска операций критически важен для успешной отладки:
- Установите точки останова в PhpStorm
- Включите режим отладки в PhpStorm (зеленый жук)
- Только после этого запускайте CLI-скрипт с правильными переменными окружения
Если вы запускаете скрипты через Makefile или другие скрипты автоматизации, убедитесь, что эти переменные окружения передаются в команду запуска PHP. Например:
debug:
@echo "Запуск отладки..."
@docker exec -it $(CONTAINER_NAME) \
PHP_IDE_CONFIG="serverName=$(SERVER_NAME)" \
XDEBUG_MODE=debug \
php $(SCRIPT_PATH)
Для часто используемых команд можно создать алиасы в вашем shell профиле:
alias debug-docker="docker exec -it container_name \
PHP_IDE_CONFIG=\"serverName=Remote_Docker_Server\" \
XDEBUG_MODE=debug"
Тогда запуск отладки будет выглядеть просто:
debug-docker php /path/to/your/script.php
Эти подходы значительно упрощают процесс отладки и делают его более удобным при частой работе с docker xdebug phpstack интеграцией.
Решение распространенных проблем при отладке
Настройка отладки PHP CLI-скриптов в Docker на удаленной машине может вызывать различные проблемы, даже если все шаги конфигурации выполнены правильно. Давайте рассмотрим наиболее распространенные проблемы и их решения.
Проблема: Xdebug не подключается к PhpStorm
Симптомы: Скрипт выполняется, но точки останова не срабатывают, в PhpStorm нет активной отладочной сессии.
Возможные причины и решения:
- Неправильный порт отладки в конфигурации Xdebug или PhpStorm
- Проверьте, что порты совпадают (обычно 9003)
- Убедитесь, что порт не занят другими приложениями
- Брандмауэр блокирует соединение
- Проверьте, что порт открыт на удаленной машине
- Попробуйте временно отключить брандмауэр для теста
- Неправильный IP-адрес в
xdebug.client_host
- Убедитесь, что указан IP-адрес машины с PhpStorm
- Для удаленной машины замените
host.docker.internalна реальный IP
Проблема: PHP_IDE_CONFIG не распознается
Симптомы: Переменная окружения игнорируется, PhpStorm не определяет сервер.
Решения:
- Проверьте правильность написания
serverNameв переменной - Убедитесь, что сервер с таким именем существует в настройках PhpStorm
- Попробуйте использовать полное имя сервера, если используется вложенная структура
Проблема: Проблемы с путями при удаленной отладке
Симптомы: PhpStorm показывает неправильные файлы в стеке вызовов или не находит файлы по указанному пути.
Решения:
- Проверьте настройки “Path mappings” в конфигурации сервера в PhpStorm
- Убедитесь, что пути соответствуют реальным путям в Docker-контейнере
- Для Docker на удаленной машине проверьте, что контейнер имеет доступ к коду
Проблема: Конфликт версий Xdebug
Симптомы: Ошибки при установке или запуске Xdebug, несовместимость с PHP.
Решения:
- Проверьте совместимость версии Xdebug с вашей версией PHP
- Для PHP 7.2-7.4 используйте Xdebug 2.x, для PHP 8.x используйте Xdebug 3.x
- Обновите PHP или Xdebug для соответствия требованиям
Проблема: Производительность при отладке
Симптомы: Снижение производительности системы при активной отладке.
Решения:
- Используйте
xdebug.mode = debugтолько при необходимости, в остальных случаяхxdebug.mode = off - Ограничьте количество точек останова
- Используйте профилирование только при необходимости
Для диагностики проблем Xdebug можно включить логирование:
xdebug.log = /tmp/xdebug.log
xdebug.log_level = 0
После запуска скрипта проверьте лог-файл на наличие ошибок и полезной информации о подключении.
Помните, что при настройке docker php cli отладки на удаленной машине могут возникать специфические проблемы, связанные с сетью, доступом к файлам и конфигурацией Docker. Не бойтесь экспериментировать и тестировать каждую часть конфигурации по отдельности, чтобы точно определить источник проблемы.
Практический пример настройки и использования
Давайте рассмотрим полный практический пример настройки отладки PHP CLI-скрипта, запущенного в Docker на удаленной машине, в PhpStorm. Этот пример объединит все предыдущие шаги в единую инструкцию.
Шаг 1: Подготовка проекта
Предположим, у нас есть PHP CLI-приложение для обработки данных. Структура проекта:
project/
├── src/
│ └── Processor.php
├── docker-compose.yml
├── Dockerfile
└── composer.json
Шаг 2: Настройка Docker
Dockerfile:
FROM php:8.1-cli
# Установка зависимостей
RUN apt-get update && apt-get install -y \
git \
unzip \
libzip-dev \
zip \
curl \
&& docker-php-ext-install zip
# Установка Xdebug
RUN pecl install xdebug
RUN docker-php-ext-enable xdebug
# Копирование кода
COPY . /app
WORKDIR /app
# Установка зависимостей Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN composer install
docker-compose.yml:
version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile
volumes:
- .:/app
environment:
XDEBUG_MODE: debug
XDEBUG_CONFIG: remote_host=192.168.1.100 remote_port=9003
command: tail -f /dev/null
Шаг 3: Конфигурация PhpStorm
- Настройка PHP интерпретатора:
- File → Settings → Languages & Frameworks → PHP → CLI Interpreter
- Нажмите + → Docker
- Выберите образ “php:8.1-cli” из настроек Docker
- Настройка сервера:
- File → Settings → Languages & Frameworks → PHP → Servers
- Добавьте сервер с именем “Remote Docker Server”
- Хост: IP-адрес удаленной машины
- Корневая директория: /app
- Настройте маппинг путей
- Настройка отладки:
- File → Settings → Languages & Frameworks → PHP → Debug
- Порт: 9003
- Включите “Can accept external connections”
Шаг 4: Настройка PHP скрипта
src/Processor.php:
<?php
class DataProcessor
{
public function process($data)
{
// Точка останова для отладки
if (empty($data)) {
throw new \InvalidArgumentException("Data cannot be empty");
}
// Обработка данных
$processed = [];
foreach ($data as $item) {
// Еще одна точка останова
$processed[] = $this->transform($item);
}
return $processed;
}
private function transform($item)
{
// Трансформация элемента
return [
'id' => $item['id'] * 2,
'name' => strtoupper($item['name']),
'processed_at' => date('Y-m-d H:i:s')
];
}
}
// Использование процессора
$processor = new DataProcessor();
$data = [
['id' => 1, 'name' => 'test'],
['id' => 2, 'name' => 'example']
];
try {
$result = $processor->process($data);
print_r($result);
} catch (\Exception $e) {
echo "Error: " . $e->getMessage();
}
Шаг 5: Запуск отладки
- Установите точки останова в PhpStorm в методах
process()иtransform() - Включите режим отладки в PhpStorm (зеленый жук в правом верхнем углу)
- Запустите скрипт с правильными переменными окружения:
docker-compose exec app \
PHP_IDE_CONFIG="serverName=Remote_Docker_Server" \
php src/Processor.php
Шаг 6: Проверка отладки
После запуска скрипта PhpStorm должен подключиться к Xdebug и остановиться на первой точке останова. Вы можете:
- Пошагово выполнять код (F8)
- Войти в функцию (F7)
- Выполнить функцию (Shift+F8)
- Просмотр значения переменных
- Изменить значения переменных
- Добавить watches для отслеживания значений
Этот пример демонстрирует полный цикл настройки и использования docker xdebug phpstorm интеграции для отладки PHP CLI-скриптов на удаленной машине. Вы можете адаптировать его под свои нужды, изменив конфигурацию Docker, PhpStorm и сам скрипт.
Источники
- JetBrains PhpStorm Documentation — Официальная документация по настройке Xdebug в PhpStorm: https://www.jetbrains.com/help/phpstorm/configuring-xdebug.html
- Habr Article by Igor [@2medic] — Подробная инструкция по настройке отладки PHP CLI в Docker на удаленной машине: https://habr.com/ru/articles/834922/
- Stack Overflow Thread by Thor Samsberg and Daniel Stefaniuk — Решение проблемы отладки PHP CLI в Docker с PhpStorm: https://stackoverflow.com/questions/36663319/debug-php-cli-application-inside-docker-with-phpstorm
- Pascal Landau’s Blog — Руководство по настройке Xdebug в Docker для разработки: https://www.pascallandau.com/blog/debugging-php-with-docker-and-xdebug-on-windows/
- Docker Official Documentation — Информация о работе с Docker в различных сетевых средах: https://docs.docker.com/network/host/
- Xdebug Official Documentation — Официальная документация по настройке Xdebug для удаленной отладки: https://xdebug.org/docs/remote
- PHPStorm Debug Configuration Guide — Подробное руководство по настройке отладки в PhpStorm: https://www.jetbrains.com/help/phpstorm/debugging-with-phpstorm.html
Заключение
Настройка отладки PHP CLI-скриптов, запущенных в Docker на удаленной машине, в PhpStorm — это сложный, но очень мощный процесс, который кардинально упрощает разработку и отладку приложений. Мы рассмотрели все ключевые аспекты этой настройки: от подготовки Docker-контейнера с Xdebug до конфигурации PhpStorm и запуска CLI-скриптов с правильными переменными окружения.
Основные моменты, которые стоит запомнить:
- Правильная конфигурация Xdebug в Docker-контейнере — это фундамент успешной отладки
- Настройка серверов и путей в PhpStorm критически важна для корректной работы
- Переменная окружения
PHP_IDE_CONFIGсвязывает CLI-скрипт с сервером PhpStorm - Последовательность действий (включить отладку в PhpStorm перед запуском скрипта) — залог успеха
Хотя процесс настройки может показаться сложным на первый взгляд, потраченное время окупится многократным повышением продуктивности разработки. Возможность ставить точки останова, просматривать значения переменных и пошагово выполнять код прямо в IDE — это то, без чего современная разработка немыслима.
Не бойтесь экспериментировать с конфигурацией, проверять каждый компонент отдельно и использовать логирование Xdebug для диагностики проблем. С практикой настройка phpstorm xdebug интеграции станет для вас рутинной операцией, а отладка PHP CLI-скриптов в Docker превратится из сложной задачи в простой и понятный процесс.
Для настройки отладки PHP CLI-скриптов в Docker с PhpStorm используйте Xdebug версии 3. В Dockerfile установите Xdebug с параметрами xdebug.mode=debug, xdebug.client_host=host.docker.internal и xdebug.client_port=9003. В PhpStorm настройте CLI интерпретатор, создайте сервер с правильным path mapping и включите опцию “Can accept external connections”. Для удаленной машины замените host.docker.internal на реальный IP-адрес хоста. Запускайте скрипт с переменной PHP_IDE_CONFIG=serverName=debug.
Настройка отладки PHP CLI в Docker на удаленной машине в PhpStorm включает создание проекта, конфигурацию контейнера с Xdebug, CLI интерпретатора и серверов. Установите переменную окружения PHP_IDE_CONFIG=serverName=debug в контейнере. Обеспечьте сопоставление путей между хостом и контейнером. Включите отладку в PhpStorm перед запуском скрипта.
Проверьте результат выполнения команды с точками останова.
Для отладки PHP CLI в Docker с PhpStorm настройте Xdebug в контейнере: xdebug.remote_enable=1, xdebug.remote_port=9000, xdebug.remote_connect_back=1. В PhpStorm создайте сервер, укажите порт отладки и включите “Can accept external connections”. Обязательно используйте переменную PHP_IDE_CONFIG=serverName=<имя_сервера> для CLI-скриптов, чтобы PhpStorm распознал соединение. Это ключевой шаг для успешной отладки.