一、环境准备
以下环境安装不再阐述,可以自行解决
1、安装好对应的docker
2、安装好对应的lnmp程序,这里php以php7.2版本为例
二、安装xdebug扩展
进入容器,安装对应的xdebug,对应的扩展版本官网参考:https://pecl.php.net/package/xdebug,这里可以查看扩展分别匹配的php版本,我这里选择的是2.9.8版本的扩展
cd /usr/local/php7/bin
/usr/local/php7/bin/pecl install -Z http://pecl.php.net/get/xdebug-2.9.8.tgz
注意:
如果提示ERROR: /tmp/pear/temp/xdebug/configure --with-php-config=/usr/local/php7/bin/php-config' failed,这些错误,说明一些依赖缺少了,可以执行以下的命令进行安装依赖
yum install -y autoconf make gcc g++ php7.2-dev pkg-config libssl-dev
三、php增加扩展
进入对应的php配置文件中,在php.ini文件中增加以下配置,注意:3.x版本的xdebug和2.x版本的配置有点不同,3.x版本的可以自行查询解决
[xdebug]
zend_extension=/usr/local/php7/lib/php/20170718/xdebug.so
xdebug.mode=debug
xdebug.remote_enable=1
xdebug.remote_autostart=1
;172.20.10.2是自己的宿主机ip,可以使用ifconfig进行查看
xdebug.remote_host=172.20.10.2
xdebug.remote_port=9000
xdebug.idekey=VSCODE
重新启动php服务或者重新启动容器即可
可以在php文件中进行验证下,是否正确启动xdebug扩展,
在项目中增加如下代码查看
phpinfo();
如下代表扩展启动正常

四、配置vscode
1、在项目根目录下创建.vscode文件夹,在文件夹下创建launch.json文件
2、这里port端口需要和上方的php.ini中配置的端口一致
3、pathMappings中的目录需要和容器中的项目目录相同,这个/www/wen对应的是容器中的映射目录 ,比如我的dockerfile启动命令的映射目录是这样的
-v $(pwd):/www/wen
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug on Docker",
"type": "php",
"request": "launch",
"port": 9000,
"pathMappings": {
"/www/wen: "${workspaceFolder}"
}
}
]
}

五、注意
如果调试的时候,浏览器出现 504 Gateway time-out(这个比较无所谓),并且vscode中的调试程序挂了(这个不能忍受,挂了就没法调试了),是因为调试时间过长,超过了应用程序设置的超时时间,被kill了,这时候最好设置两个地方
1、php中的php-fpm拉长执行时间
打开 php-fpm.conf 或 www.conf,设置:
request_terminate_timeout = 0
2、nginx中的超时时拉大点
fastcgi_read_timeout 3600;
fastcgi_send_timeout 3600;
六、phpstorm配置
1、配置xdebug的端口
进入setting->php→Debug,设置xdebug的端口,这个端口需要和docker中的php.ini设置的端口号相同

2、配置servers
setting->php->servers配置,如下

3、设置debug
run->edit configurations
新增php remote debug,并且选择刚刚上方配置的server,并且设置上对应的IDE key
