Программирование

Настройка отладки PHP CLI в Docker с PhpStorm на удалёнке

Пошаговое руководство по настройке phpstorm xdebug для отладки PHP CLI-скриптов в Docker на удаленной машине. Конфигурация Xdebug, PhpStorm, переменные окружения и решение проблем docker php cli отладки.

4 ответа 2 просмотра

Как настроить отладку PHP CLI-скрипта, запущенного в Docker на удаленной машине, в PhpStorm? Какие рекомендуемые настройки конфигурации для успешной отладки?

Настройка отладки PHP CLI-скриптов в Docker-контейнере на удаленной машине с помощью PhpStorm требует правильной конфигурации Xdebug, Docker-контейнера и самой IDE. Для успешной интеграции необходимо настроить параметры Xdebug в Dockerfile, правильно сконфигурировать PhpStorm для работы с удаленными серверами и установить переменные окружения при запуске 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:

dockerfile
# Установка Xdebug
RUN pecl install xdebug
RUN docker-php-ext-enable xdebug

После установки Xdebug необходимо правильно его сконфигурировать. Создайте файл xdebug.ini в директории с Docker-файлами со следующим содержанием:

ini
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 через сервис:

yaml
services:
 app:
 build:
 context: .
 dockerfile: Dockerfile
 environment:
 XDEBUG_MODE: debug
 XDEBUG_CONFIG: remote_host=host.docker.internal remote_port=9003

Дополнительные параметры конфигурации Xdebug, которые могут пригодиться для phpstorm xdebug интеграции:

ini
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 интерпретатора

  1. Перейдите в Languages & Frameworks → PHP → CLI Interpreter
  2. Нажмите + для добавления нового интерпретатора
  3. Выберите Docker в списке типов интерпретаторов
  4. Укажите образ Docker, который вы используете для разработки
  5. Проверьте, что путь к исполняемому файлу PHP правильный

Настройка серверов для удаленной отладки

  1. Перейдите в Languages & Frameworks → PHP → Servers
  2. Нажмите + для добавления нового сервера
  3. Укажите имя сервера (например, “Remote Docker Server”)
  4. Для хоста введите IP-адрес удаленной машины
  5. Укажите корневую директорию проекта на удаленной машине
  6. Включите опцию “Use path mappings”
  7. Настройте соответствие локальных путей к путям на удаленной машине
Настройки секции Debug

Настройка порта отладки

  1. Перейдите в Languages & Frameworks → PHP → Debug
  2. Убедитесь, что порт отладки совпадает с тем, что указан в конфигурации Xdebug (обычно 9003)
  3. Включите опцию “Can accept external connections”
  4. Установите “Debug port” в то же значение, что и в Xdebug конфигурации

Настройка Docker интеграции

  1. Перейдите в Languages & Frameworks → PHP → Docker
  2. Убедитесь, что настроенный Docker интерпретатор выбран
  3. Проверьте, что контейнер доступен и правильно подключен

Эти настройки обеспечивают правильную связь между PhpStorm и Docker-контейнером на удаленной машине. После завершения настройки перезапустите PhpStorm, чтобы все изменения вступили в силу. Теперь PhpStorm готов к приему отладочных сессий из Docker-контейнера.


Настройка удаленной отладки на удаленной машине

Настройка удаленной отладки для docker php cli приложений на удаленной машине требует особого внимания к сетевым аспектам и безопасности. Когда ваш Docker-контейнер находится на удаленном сервере, необходимо правильно настроить маршрутизацию трафика для отладочной сессии.

Первым шагом является определение IP-адреса удаленной машины, на которой находится PhpStorm. Этот IP-адрес нужно указать в конфигурации Xdebug в Docker-контейнере. Если вы работаете через VPN или корпоративную сеть, убедитесь, что порт отладки (обычно 9003) открыт и доступен для подключения из Docker-контейнера.

Для настройки удаленной отладки внесите следующие изменения в конфигурацию Xdebug в Dockerfile или docker-compose.yml:

yaml
environment:
 XDEBUG_MODE: debug
 XDEBUG_CONFIG: remote_host=ВАШ_IP_АДРЕС remote_port=9003

Важно понимать, что remote_host в Xdebug указывает на машину, где запущен PhpStorm, а не на сам Docker-контейнер. Это ключевой момент, который часто вызывает путаницу при настройке docker xdebug phpstorm интеграции на удаленных машинах.

Если вы используете Linux-машину для разработки, вы можете определить IP-адрес с помощью команды:

bash
hostname -I

Для Windows используйте:

bash
ipconfig | findstr IPv4

Для macOS:

bash
ifconfig | grep "inet "

Дополнительно настройте брандмауэр на удаленной машине, чтобы разрешить входящие соединения на порт отладки. Например, для UFW:

bash
sudo ufw allow 9003

Для iptables:

bash
sudo iptables -A INPUT -p tcp --dport 9003 -j ACCEPT

Если вы используете Docker на удаленной машине, убедитесь, что сетевые настройки контейнера позволяют ему подключаться к хост-машине. Для этого можно использовать опцию --add-host в docker run:

bash
docker run --add-host=host.docker.internal:host-gateway ...

Или в docker-compose:

yaml
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-скрипта с правильными переменными окружения:

bash
docker exec -it container_name \
 PHP_IDE_CONFIG="serverName=Remote_Docker_Server" \
 php /path/to/your/script.php

Здесь Remote_Docker_Server — это имя сервера, которое вы указали в настройках PhpStorm. Если вы используете docker-compose, запуск может выглядеть так:

bash
docker-compose exec app \
 PHP_IDE_CONFIG="serverName=Remote_Docker_Server" \
 php /path/to/your/script.php
Результат выполнения команды

Дополнительные переменные окружения, которые могут пригодиться для настройки docker php cli отладки:

bash
PHP_IDE_CONFIG="serverName=Remote_Docker_Server"
XDEBUG_MODE=debug
XDEBUG_CONFIG="remote_host=ВАШ_IP_АДРЕС remote_port=9003"

Важно отметить, что порядок запуска операций критически важен для успешной отладки:

  1. Установите точки останова в PhpStorm
  2. Включите режим отладки в PhpStorm (зеленый жук)
  3. Только после этого запускайте CLI-скрипт с правильными переменными окружения

Если вы запускаете скрипты через Makefile или другие скрипты автоматизации, убедитесь, что эти переменные окружения передаются в команду запуска PHP. Например:

makefile
debug:
	@echo "Запуск отладки..."
	@docker exec -it $(CONTAINER_NAME) \
		PHP_IDE_CONFIG="serverName=$(SERVER_NAME)" \
		XDEBUG_MODE=debug \
		php $(SCRIPT_PATH)

Для часто используемых команд можно создать алиасы в вашем shell профиле:

bash
alias debug-docker="docker exec -it container_name \
 PHP_IDE_CONFIG=\"serverName=Remote_Docker_Server\" \
 XDEBUG_MODE=debug"

Тогда запуск отладки будет выглядеть просто:

bash
debug-docker php /path/to/your/script.php

Эти подходы значительно упрощают процесс отладки и делают его более удобным при частой работе с docker xdebug phpstack интеграцией.


Решение распространенных проблем при отладке

Настройка отладки PHP CLI-скриптов в Docker на удаленной машине может вызывать различные проблемы, даже если все шаги конфигурации выполнены правильно. Давайте рассмотрим наиболее распространенные проблемы и их решения.

Проблема: Xdebug не подключается к PhpStorm

Симптомы: Скрипт выполняется, но точки останова не срабатывают, в PhpStorm нет активной отладочной сессии.

Возможные причины и решения:

  1. Неправильный порт отладки в конфигурации Xdebug или PhpStorm
  • Проверьте, что порты совпадают (обычно 9003)
  • Убедитесь, что порт не занят другими приложениями
  1. Брандмауэр блокирует соединение
  • Проверьте, что порт открыт на удаленной машине
  • Попробуйте временно отключить брандмауэр для теста
  1. Неправильный IP-адрес в xdebug.client_host
  • Убедитесь, что указан IP-адрес машины с PhpStorm
  • Для удаленной машины замените host.docker.internal на реальный IP

Проблема: PHP_IDE_CONFIG не распознается

Симптомы: Переменная окружения игнорируется, PhpStorm не определяет сервер.

Решения:

  1. Проверьте правильность написания serverName в переменной
  2. Убедитесь, что сервер с таким именем существует в настройках PhpStorm
  3. Попробуйте использовать полное имя сервера, если используется вложенная структура

Проблема: Проблемы с путями при удаленной отладке

Симптомы: PhpStorm показывает неправильные файлы в стеке вызовов или не находит файлы по указанному пути.

Решения:

  1. Проверьте настройки “Path mappings” в конфигурации сервера в PhpStorm
  2. Убедитесь, что пути соответствуют реальным путям в Docker-контейнере
  3. Для Docker на удаленной машине проверьте, что контейнер имеет доступ к коду

Проблема: Конфликт версий Xdebug

Симптомы: Ошибки при установке или запуске Xdebug, несовместимость с PHP.

Решения:

  1. Проверьте совместимость версии Xdebug с вашей версией PHP
  2. Для PHP 7.2-7.4 используйте Xdebug 2.x, для PHP 8.x используйте Xdebug 3.x
  3. Обновите PHP или Xdebug для соответствия требованиям

Проблема: Производительность при отладке

Симптомы: Снижение производительности системы при активной отладке.

Решения:

  1. Используйте xdebug.mode = debug только при необходимости, в остальных случаях xdebug.mode = off
  2. Ограничьте количество точек останова
  3. Используйте профилирование только при необходимости

Для диагностики проблем Xdebug можно включить логирование:

ini
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:

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:

yaml
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

  1. Настройка PHP интерпретатора:
  • File → Settings → Languages & Frameworks → PHP → CLI Interpreter
  • Нажмите + → Docker
  • Выберите образ “php:8.1-cli” из настроек Docker
  1. Настройка сервера:
  • File → Settings → Languages & Frameworks → PHP → Servers
  • Добавьте сервер с именем “Remote Docker Server”
  • Хост: IP-адрес удаленной машины
  • Корневая директория: /app
  • Настройте маппинг путей
  1. Настройка отладки:
  • File → Settings → Languages & Frameworks → PHP → Debug
  • Порт: 9003
  • Включите “Can accept external connections”

Шаг 4: Настройка PHP скрипта

src/Processor.php:

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: Запуск отладки

  1. Установите точки останова в PhpStorm в методах process() и transform()
  2. Включите режим отладки в PhpStorm (зеленый жук в правом верхнем углу)
  3. Запустите скрипт с правильными переменными окружения:
bash
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 и сам скрипт.


Источники

  1. JetBrains PhpStorm Documentation — Официальная документация по настройке Xdebug в PhpStorm: https://www.jetbrains.com/help/phpstorm/configuring-xdebug.html
  2. Habr Article by Igor [@2medic] — Подробная инструкция по настройке отладки PHP CLI в Docker на удаленной машине: https://habr.com/ru/articles/834922/
  3. 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
  4. Pascal Landau’s Blog — Руководство по настройке Xdebug в Docker для разработки: https://www.pascallandau.com/blog/debugging-php-with-docker-and-xdebug-on-windows/
  5. Docker Official Documentation — Информация о работе с Docker в различных сетевых средах: https://docs.docker.com/network/host/
  6. Xdebug Official Documentation — Официальная документация по настройке Xdebug для удаленной отладки: https://xdebug.org/docs/remote
  7. 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 превратится из сложной задачи в простой и понятный процесс.

JetBrains / Инструменты для разработчиков

Для настройки отладки 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 перед запуском скрипта.

Настройки секции Debug в PhpStorm для Xdebug

Проверьте результат выполнения команды с точками останова.

T

Для отладки 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 распознал соединение. Это ключевой шаг для успешной отладки.

Авторы
И
Разработчик
T
Разработчик
D
Разработчик
Источники
JetBrains / Инструменты для разработчиков
Инструменты для разработчиков
Проверено модерацией
НейроОтветы
Модерация
Настройка отладки PHP CLI в Docker с PhpStorm на удалёнке