将 Xdebug 与 php-fpm 和 nginx 容器分开
Separate Xdebug from php-fpm and nginx containers
我想将我所有的开发工具与主要的 php-fpm 和 nginx 容器分开。所以我基本上有 3 个容器,在端口 9000 上命名为 php-fpm 运行s,在端口 80 上命名为 nginx 和开发工具。我已经在我的开发工具容器上安装了 xdebug、composer 等,但我很困惑如何配置 xdebug 以便它可以与 php-fpm 容器一起工作并且可以调试我的网站?第二个问题 xdebug 是否需要 php-cli 或 php-fpm 到 运行 本身?
#开发工具
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.ini 中更改 PHP-FPM 池配置或 xdebug 的指定端口。我建议更新您的 PHP-FPM 配置以侦听不同的端口,因为使用 xdebug 进行调试配置较少。
如果您想更改 PHP-FPM 中的端口。
/php-fpm.d/pool.conf
[pool]
listen = 127.0.0.1:9001
适当更新您的 NGINX 配置以使用新端口。
否则,如果您想更改 PHP 中的 xdebug 端口。
php.ini
[xdebug]
xdebug.remote_port=9001
将调试 (PHP editor/IDE) 软件和防火墙配置更新到新端口。或者使用 SSH 隧道将新的远程端口 9001 转发到默认的本地端口 9000
关于你的第二个问题
xdebug 仅 运行s 作为 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 - The configuration file
我想将我所有的开发工具与主要的 php-fpm 和 nginx 容器分开。所以我基本上有 3 个容器,在端口 9000 上命名为 php-fpm 运行s,在端口 80 上命名为 nginx 和开发工具。我已经在我的开发工具容器上安装了 xdebug、composer 等,但我很困惑如何配置 xdebug 以便它可以与 php-fpm 容器一起工作并且可以调试我的网站?第二个问题 xdebug 是否需要 php-cli 或 php-fpm 到 运行 本身?
#开发工具
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.ini 中更改 PHP-FPM 池配置或 xdebug 的指定端口。我建议更新您的 PHP-FPM 配置以侦听不同的端口,因为使用 xdebug 进行调试配置较少。
如果您想更改 PHP-FPM 中的端口。
/php-fpm.d/pool.conf
[pool]
listen = 127.0.0.1:9001
适当更新您的 NGINX 配置以使用新端口。
否则,如果您想更改 PHP 中的 xdebug 端口。
php.ini
[xdebug]
xdebug.remote_port=9001
将调试 (PHP editor/IDE) 软件和防火墙配置更新到新端口。或者使用 SSH 隧道将新的远程端口 9001 转发到默认的本地端口 9000
关于你的第二个问题
xdebug 仅 运行s 作为 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 - The configuration file