Thi*_*ira 4 xdebug nginx docker-compose fpm php-7.2
我目前正在 macOS 上准备一个开发堆栈,docker-compose以便能够在PHP7-FPM(端口:9000)和nginx(端口:80)服务器上使用Xdebug(端口:9009)。
显然配置没问题,但我无法通过 IDE 进行调试。
这是我的设置:
我的.env文件:
APP_NAME=testeXdebug
HOST_SERVER_NAME=myapp
HOST_IP=docker.for.mac.localhost
# Use docker.for.mac.localhost - for OS X
# Use docker.for.win.localhost - for Windows
Run Code Online (Sandbox Code Playgroud)
该DockerfilePHP7-FPM + Xdebug的:
FROM php:7.2-fpm
RUN pecl install xdebug \
&& docker-php-ext-enable xdebug
Run Code Online (Sandbox Code Playgroud)
该docker-compose.yml文件:
version: '3.5'
services:
web:
image: nginx:1.15.2
ports:
- '80:80'
volumes:
- '.:/usr/share/nginx/html'
- './config/default.conf:/etc/nginx/conf.d/default.conf'
- '/tmp/${APP_NAME}/web:/var/log/nginx'
env_file:
- '.env'
depends_on:
- 'php-fpm'
links:
- 'php-fpm'
php-fpm:
build: './docker'
ports:
- '9000:9000'
- '9009:9009'
expose:
- 9000
- 9009
volumes:
- '.:/usr/share/nginx/html'
- './config/php-dev.ini:/usr/local/etc/php/conf.d/php-dev.ini'
- '/tmp/${APP_NAME}/php-fpm:/var/log/xdebug'
environment:
XDEBUG_CONFIG: "remote_host=${HOST_IP}"
PHP_IDE_CONFIG: "serverName=${HOST_SERVER_NAME}"
env_file:
- '.env'
Run Code Online (Sandbox Code Playgroud)
该php-dev.ini文件:
; Xdebug
xdebug.default_enable = 1
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_connect_back = 1
xdebug.remote_port = 9009
xdebug.profiler_enable = 0
xdebug.idekey = PHPSTORM
xdebug.remote_handler = dbgp
xdebug.remote_mode = req
xdebug.remote_log = /var/log/xdebug/xdebug.log
Run Code Online (Sandbox Code Playgroud)
nginxdefault.conf文件:
server {
listen 80;
server_name myapp;
root /usr/share/nginx/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
Run Code Online (Sandbox Code Playgroud)
然后当通过浏览器访问服务器时,Xdebug 帮助程序扩展处于活动状态:
我得到这个调试日志(xdebug):
Log opened at 2018-08-11 19:22:53
I: Checking remote connect back address.
I: Checking header 'HTTP_X_FORWARDED_FOR'.
I: Checking header 'REMOTE_ADDR'.
I: Remote address found, connecting to 192.168.128.1:9009.
I: Connected to client. :-)
-> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///usr/share/nginx/html/index.php" language="PHP" xdebug:language_version="7.2.8" protocol_version="1.0" appid="9" idekey="PHPSTORM"><engine version="2.6.1"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2018 by Derick Rethans]]></copyright></init>
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" status="stopping" reason="ok"></response>
Log closed at 2018-08-11 19:22:53
Run Code Online (Sandbox Code Playgroud)
nginx访问日志:
192.168.128.1 - - [11/Aug/2018:18:57:25 +0000] "GET /favicon.ico HTTP/1.1" 200 94197 "http://docker.for.mac.localhost/index.php?XDEBUG_SESSION_START=PHPSTORM" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36" "-"
192.168.128.1 - - [11/Aug/2018:19:22:53 +0000] "GET /index.php?XDEBUG_SESSION_START=PHPSTORM HTTP/1.1" 200 94341 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36" "-"
192.168.128.1 - - [11/Aug/2018:19:22:53 +0000] "GET /favicon.ico HTTP/1.1" 200 94205 "http://docker.for.mac.localhost/index.php?XDEBUG_SESSION_START=PHPSTORM" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36" "-"
192.168.128.1 - - [11/Aug/2018:19:30:12 +0000] "GET /_intellij_phpdebug_validator.php HTTP/1.1" 200 516 "-" "Java/1.8.0_152-release" "-"
Run Code Online (Sandbox Code Playgroud)
并使用以下调试扩展设置 VSCode:
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9009,
"pathMappings": {
"/usr/share/nginx/html": "${workspaceRoot}"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
添加一些断点:
在PhpStorm 上:
使用 docker-compose 的 PhpStorm CLI 解释器:
但是在开始侦听 PHP 调试连接时,我得到了Port 9009 is busy.
而且 IDE 从不启动调试工具... =(
我会错过什么?请帮帮我!
一些评论后:
从php-fpm服务中删除ports和expose设置时docker-compose.yml
thiago@MA-TPR testeXdebug $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
735fc48fad63 nginx:1.15.2 "nginx -g 'daemon of…" 4 minutes ago Up 4 minutes 0.0.0.0:80->80/tcp testexdebug_web_1
b9b16af98fb5 testexdebug_php-fpm "docker-php-entrypoi…" 4 minutes ago Up 4 minutes 9000/tcp testexdebug_php-fpm_1
thiago@MA-TPR testeXdebug $
Run Code Online (Sandbox Code Playgroud)
并从 xdebug 获取此日志:
Log opened at 2018-08-12 00:56:39
I: Checking remote connect back address.
I: Checking header 'HTTP_X_FORWARDED_FOR'.
I: Checking header 'REMOTE_ADDR'.
I: Remote address found, connecting to 192.168.160.1:9009.
W: Creating socket for '192.168.160.1:9009', poll success, but error: Operation now in progress (29).
E: Could not connect to client. :-(
Log closed at 2018-08-12 00:56:39
Run Code Online (Sandbox Code Playgroud)
nc从 PHP 容器执行:
root@b9b16af98fb5:/var/www/html# nc -zv docker.for.mac.localhost 9009
Warning: inverse host lookup failed for 192.168.65.2: Unknown host
docker.for.mac.localhost [192.168.65.2] 9009 (?) open
root@b9b16af98fb5:/var/www/html#
Run Code Online (Sandbox Code Playgroud)
但是在开始侦听 PHP 调试连接时,我得到了
Port 9009 is busy
无需在 Docker 容器中公开 Xdebug 端口,根本不需要。
如果您公开它.. Docker 将侦听该端口并将任何连接转发到容器中。但它是 IDE/VSCode/PhpStorm 必须在监听它......因为它是连接到 IDE 而不是其他方式的 Xdebug。
先解决这个问题。
xdebug.remote_connect_back = 1
我建议关闭它并在xdebug.remote_host( docker.for.mac.localhost) 中指定实际主机。
Xdebug 使用remote_connect_back选项检测到的 IP (取决于我猜的设置,以及 Docker 的工作方式)很可能不是主机的 IP。但这就是您所需要的——这是您的 IDE (PhpStorm)/编辑器 (VSCode) 运行且 Xdebug 必须连接到的地方。
| 归档时间: |
|
| 查看次数: |
5568 次 |
| 最近记录: |