IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> WSL2的ubuntu20.04系统环境下docker-decktop容器内的lnmp环境的xdebug调试安装与应用 -> 正文阅读

[系统运维]WSL2的ubuntu20.04系统环境下docker-decktop容器内的lnmp环境的xdebug调试安装与应用

目录

一、运行环境:

1.WSL2下的Ubuntu20.04子系统;

2.桌面 dockers 容器软件;

3.lnmp 镜像

二、php 扩展 xdebug 的安装:

1.容器运行命令:

2.安装 xdebug 扩展:

3.php 的默认扩展目录是编译的时候指定的,在 phpinfo() 函数里显示如下:

4.将以下行添加到此 PHP ini 文件中:

5.这里需要注意的是,如果在容器里进行调试,xdebug.client_host 的参数必须是宿主机的 IP 地址。

6.根目录下编辑 phpinfo.php 文件,输入如下内容:

三、编辑器中 xdebug 的配置

1.phpstorm?2021.3 的配置

?2. VSCode 编辑器的配置

四、需要注意的是,用下面命令不能查看容器内 xdebug 的端口信息,?9001 端口:

1.容器里的信息,没有 9001 端口信息:

?2.WSL 子系统里的信息,有 9001 端口信息:


一、运行环境:

1.WSL2下的Ubuntu20.04子系统;

ubuntu中文官方网站:企业开源和Linux | Ubuntu

2.桌面 dockers 容器软件;

官方地址:Empowering App Development for Developers | Docker

官方容器镜像地址:Docker Hub Container Image Library | App Containerization

3.lnmp 镜像

镜像地址:2233466866/lnmp - Docker Image | Docker Hub

特别说明:上面镜像不是官方维护,内容请自己甄别!

以上运行环境需要参考的地方:

1)Laravel 中国的社区手册:《构建 Laravel 开发环境》 | Laravel China 社区 (learnku.com)

2)博主上一篇文章:(42条消息) 目录和文件暴露在根目录下的 nginx 配置演示_孤舟残月梦还长存的专栏-CSDN博客


二、php 扩展 xdebug 的安装:

1.容器运行命令:

docker run -dit \
-p 80:80 \
-p 443:443 \
-p 3306:3306 \
-p 9000:9000 \
-p 9001:9001 \  # 开放调试端口
-v /home/myuser/lnmp/www:/www \
-v /home/myuser/lnmp/mysql:/data/mysql \

# 一般情况下不建议打开下面的注释,原因是配置下面的目录映射后,
# 容器里的相关目录内容就清空了,需要额外复制相关内容到该目录,
# 容器才能正常运行。

#-v /home/myuser/lnmp/config/nginx:/usr/local/nginx/conf \
#-v /home/myuser/lnmp/config/etc:/etc/ \
#-v /home/myuser/lnmp/config/php:/usr/local/php7/lib \
--restart=always \
--privileged=true \
--name=lnmp \
2233466866/lnmp

phptorm 编辑器的配置能够识别 WSL 子系统的目录地址类型,如:

\\wsl$\Ubuntu-20.04\home\myUserName\lnmp\www\.vscode\launch.json

2.安装 xdebug 扩展:

参考官方文档:Xdebug: Documentation ? Installation

cd ~ 

# 1.在容器里的 centos 7 系统下克隆项目

git clone git://github.com/xdebug/xdebug.git

# 2.进入项目

cd xdebug

# 3.用 phpize 生成必要的配置和环境

phpize

# 如果没有添加进环境变量,就用绝对路径

find / -name "phpize"

pwd

/usr/local/php7/bin/phpize

# 4.运行脚本配置工具

./configure --enable-xdebug --with-php-config=/usr/local/php7/bin/php-config

# 如果运行上面的命令,php.ini 里只需添加:zend_extension=xdebug.so

./configure --enable-xdebug

# 如果运行上面的命令,说不定还要找配置安装在哪里,然后 php.ini 里添加全路径

find / -name "xdebug.so"

# 如果不在 php 默认的扩展目录里,php.ini 的配置如下:

zend_extension=/usr/lib64/php/modules/xdebug.so

# 5.编译

make & make install

如果中途编译失败就用 make clear 清理一下,编译失败的原因有很多,其中一个最主要的原因是,镜像源很多都在国外,由于路途遥远,数据长途跋涉,在加上“墙”的原因,使有的文件不完整造成的。

阿里云的镜像源:阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 (aliyun.com)

编译成功的示意图:

3.php 的默认扩展目录是编译的时候指定的,在 phpinfo() 函数里显示如下:

4.将以下行添加到此 php.ini?文件中:

[xdebug]
zend_extension = xdebug.so

xdebug.idekey = "PHPSTORM"

; 容器里配置,这里不能是 localhost,
; 这里必须是宿主机的真实 ip 地址
xdebug.client_host = 192.168.101.109

; 端口 ID,必须与 phpstorm 设置一致
xdebug.client_port = 9001

; 开启xdebug支持,不同的mode的不同的用途,详细说明请看官方文档
; 如果要多个模式一起开启,就用`,`分隔开就行
xdebug.mode = develop,debug,profile,trace 
xdebug.profiler_append = 0
xdebug.profiler_output_name = cachegrind.out.%p

; 开启调试
; xdebug.start_with_request = default|yes|no|triggere
xdebug.start_with_request = yes
xdebug.trigger_value=StartProfileForMe
xdebug.output_dir = /tmp

5.这里需要注意的是,如果在容器里进行调试,xdebug.client_host 的参数必须是宿主机的 IP 地址。

6.根目录下编辑 phpinfo.php 文件,输入如下内容:

<?php
phpinfo();
xdebug_info();

查看 xdebug 的配置信息,浏览到页面最下面查看:

?

三、编辑器中 xdebug 的配置

1.phpstorm?2021.3 的配置

配置过程:[文件]?-> [设置] -> [php] -> [调试],配置调试端口(xdebug 部分):

?配置服务端:

?填写项目文件地址:

?编辑器中打开监听,打断点、刷新页面即可用 F7 和 F8 调试程序。

?

2. VSCode 编辑器的配置

项目目录下的 .vscode 目录下 launch.json 文件添加如下:

"configurations": [
        {
            "name": "Listen for Xdebug",
            "type": "php",
            "request": "launch",
            "hostname": "192.168.101.109",  // 宿主机真实 IP 地址
            "stopOnEntry":true,
            "port": 9001,
            "pathMappings": {

                // 服务器目录 -> 本地目录
                "/www":"c://lnmp/www"  // 在 WSL 系统中对应:/mnt/c/lnmp/www
            }
        },

如果用 VSCode 编辑器调试程序,不建议把项目目录配置在 WSL 子系统里,因为子系统的目录类似于:

\\wsl$\Ubuntu-20.04\home\myuser\lnmp\www\.vscode\launch.json

编辑器无法识别该地址类型,会有如下报错:

所以用 VSCode 编辑器调试程序,容器的启动命令应该如下所示,/mnt/c/lnmp 目录相当于 C:\lnmp 目录内。?

docker run -dit \
-p 80:80 \
-p 443:443 \
-p 3306:3306 \
-p 9000:9000 \
-p 9001:9001 \  # 开启调试端口
-v /mnt/c/lnmp/www:/www \
-v /mnt/c/lnmp/mysql:/data/mysql \

# 一般情况下不建议打开下面的注释,原因是配置下面的目录映射后,
# 容器里的相关目录内容就清空了,需要额外复制相关内容到该目录,
# 容器才能正常运行。

#-v /mnt/c/lnmp/config/nginx:/usr/local/nginx/conf \
#-v /mnt/c/lnmp/config/etc:/etc/ \
#-v /mnt/c/lnmp/config/php:/usr/local/php7/lib \
--restart=always \
--privileged=true \
--name=lnmp \
2233466866/lnmp

四、需要注意的是,用下面命令不能查看容器内 xdebug 的端口信息,?9001 端口:

netstat -ant

1.容器里的信息,没有 9001 端口信息:

?2.WSL 子系统里的信息,有 9001 端口信息:

?所以不要在容器里没有看见 9001 的端口信息,就在那里死缠烂打,不到黄河心不死!不要问原因,原因是我也不知道!

END.

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 12:11:44  更:2022-02-26 12:14:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 5:52:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码