Я хотел отделить все свои инструменты разработки от основных контейнеров php-fpm и nginx. Таким образом, у меня есть в основном 3 контейнера, названные как PHP-FPM работает на порту 9000, Nginx на порт 80 и DEV-инструменты. Я установил xdebug, composer и т. Д. В свой контейнер dev-tools, но я не уверен, как настроить xdebug так, чтобы он работал с контейнером php-fpm и мог отлаживать мой веб-сайт? Второй вопрос: нужен ли xdebug php-cli или php-fpm для запуска самого себя?
# Dev-инструменты
FROM php:7.2-cli-alpine
# Install the PHP extensions we need
RUN set -ex \
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin -- --filename=composer.phar \
&& apk add --no-cache git \
&& pecl install xdebug \
&& docker-php-ext-enable xdebug
xdebug использует порт 9000
по умолчанию конфликтует с портом PHP-FPM.
Вам нужно будет изменить назначенный порт вашей конфигурации пула PHP-FPM или xdebug в php.ini. Я рекомендую обновить конфигурацию PHP-FPM для прослушивания другого порта, так как его меньше настраивать для отладки с помощью xdebug.
Если вы хотите изменить порт в PHP-FPM.
/php-fpm.d/pool.conf
[pool]
listen = 127.0.0.1:9001
Обновите свою конфигурацию NGINX соответствующим образом, чтобы использовать новый порт.
В противном случае, если вы хотите изменить порт xdebug в PHP.
php.ini
[xdebug]
xdebug.remote_port=9001
Обновите программное обеспечение отладки (редактор PHP / IDE) и конфигурацию брандмауэра до нового порта. В качестве альтернативы используйте туннель SSH для пересылки нового удаленного порта 9001 на локальный порт по умолчанию 9000
Что касается вашего второго вопроса
xdebug работает только как расширение PHP (php-fpm), если он установлен для загрузки в ваших настройках PHP ini. Он не работает как отдельный фоновый сервис.
Пример:
[Browser Client -> http://example.com/path/to/script.php]
in -> [NGINX]
in -> [php-fpm /path/to/script.php]
[xdebug remote host:port] <- out
или же
[terminal command line]
in -> [php /path/to/script.php]
[xdebug remote host:port] <-out
Так что да, для запуска xdebug нужны php-fpm или php-cli, так как они одно и то же.
Если через Apache / NGINX, который использует php-fpm, он должен быть загружен в вашей конфигурации fpm. Если через интерфейс CLI, он должен быть загружен в вашей конфигурации CLI.
Имейте в виду, что вы можете запустить PHP с различными конфигурациями ini в зависимости от среды. Увидеть PHP — файл конфигурации
Других решений пока нет …