Отделяйте Xdebug от контейнеров php-fpm и nginx - PullRequest
0 голосов
/ 09 ноября 2018

Я хотел отделить все свои инструменты разработки от основных контейнеров php-fpm и nginx. Таким образом, у меня есть в основном 3 контейнера с именами php-fpm , работающими на порту 9000, nginx на порте 80 и dev-tools . Я установил 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

1 Ответ

0 голосов
/ 09 ноября 2018

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 editor / IDE) и конфигурацию брандмауэра до нового порта. В качестве альтернативы используйте туннель SSH для пересылки нового удаленного порта 9001 на локальный порт по умолчанию 9000


Что касается вашего второго вопроса

xdebug работает только как расширение PHP (php-fpm), если он настроен на загрузку в настройках ini PHP. Он не работает как отдельный фоновый сервис.

* +1032 * Пример: * 1 033 *
[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 - Файл конфигурации

...