NetBeans 的安装及配置

安装

Windows下安装需要先配置 JDK, 配置 JDK 的教程网上很多,就不多赘述

新建/导入项目

  1. 新建/导入项目时,Run As 选择 Local Web Site (running on local web server)
  2. Project URL 保持默认即可

注意⚠️:导入已有项目不要直接用NetBeans打开项目目录,而是点击新建PHP项目,然后选择项目导入,可以避免自动识别成错误类型的项目

项目运行配置

  1. 右键点击项目根节点,选择 Properties,弹出窗口选择 Run Configuration
  2. Run As 保持 Local Web Site (running on local web server) 不变
  3. Project URLIndex File 保持默认,Arguments 可不填
  4. 点击 Advanced, 在弹出窗口里配置远程目录与本地目录映射(很重要,错误配置会导致调试时的断点位置错乱,如果远程项目位于镜像内,则填写镜像内的路径!)
  5. Debug URL 选择 Do Not Open Web Browser

注意⚠️:4、5两点每个项目均需要单独配置
配置图示

  • 运行配置

  • 映射配置

配置 debug

  1. 跳转到 NetBeans 设置->PHP->Debugging 窗口
  2. 设置监听窗口 Debugger Port9999(可自定义,未被占用即可)
  3. Session ID 保持默认即可(即 idekey)
  4. 其他选项按照需求自选

至此,NetBeans 里的设置就完成了,但是,要做到远程调试服务器里的代码,还需要把服务器的端口转发到本地端口(9999),为此,还需做一些额外的工作。

PHP XDebug 配置

  1. PHP安装并启用XDebug 拓展,执行 php -m | grep xdebug 输出 xdebug 即表示成功启用
  2. 编辑 xdebug.ini,内容如下
    xdebug.remote_enable=1
    xdebug.mode=debug,profile
    xdebug.client_host=ppunknown.cn
    xdebug.client_port=12348
    xdebug.remote_connect_back=0
    xdebug.idekey=ppunknown

    # 记录 xdebug与调试器会话 日志
    xdebug.log="/tmp/xdebug.log"


    xdebug.start_with_request=trigger
    xdebug.trigger_value=ppunknown
    xdebug.profiler_enable = On
    xdebug.trace_format=2
    xdebug.output_dir=/www/log/xdebug/

    xdebug 的流量转发到 ppunknown.cn12348 端口,用于 php-xdebug-proxy 进行端口分发

php-xdebug-proxy

PHP实现的类似dbgp的调试流量分发代理

ppunknown.cn 服务器上部署 php-xdebug-proxy 主要做以下几件事情

  1. 监听 12348 端口来自 xdebug 的调试信息

  2. 镜像的 docker-compose 如下:

    version: '3.7'
    services:
    xdebug-proxy:
    container_name: xdebug-proxy.ppunknown.cn
    image: php:alpine
    tty: true
    restart: always
    ports:
    - "12348:9002"
    volumes:
    - ./config:/data/config:ro
    - ./project:/www/xdebug-proxy/project
    working_dir: /www/xdebug-proxy/project
    command: [ bin/xdebug-proxy, --configs=/data/config ]

    先将项目的config目录复制一份到与docker-compose.yml同级目录

  3. 根据配置的节点,将流量分发到各节点,配置格式如下

    return [
    'xdebugServer' => [
    'listen' => '0.0.0.0:9002', // 这里使用docker部署,将服务器本地的12348->容器的9002端口
    ],
    'ideServer' => [
    'defaultIde' => '',
    'predefinedIdeList' => [// 不使用动态注册,所以有多少个人一起调试,就预定义几个idekey,将流量分发到服务器本地的端口上
    'ppunknown' => 'ppunknown.cn:9550',
    'ppunknown1' => 'ppunknown.cn:9551'
    'ppunknown2' => 'ppunknown.cn:9552',
    'ppunknown3' => 'ppunknown.cn:9553'
    ],
    ],
    'ideRegistrationServer' => [
    'listen' => '0.0.0.0:9001',// 接受来自ide的dgbp插件的注册信息,这里用不到
    ],
    ];

    注意⚠️:服务器本地的 9550~9553 端口需要打开防火墙放行

最后,需要做的工作就是将服务器的 9550~9553 分别映射到个人的本地端口,为此,需要借助 Frp 进行内网端口反向代理

Frp

frp 是一个专注于内网穿透的高性能的反向代理应用,frp包含frps服务端与frpc客户端,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网

Frp 安装

- [Frp](https://github.com/fatedier/frp/releases)

Frps 与 Frpc 的配置

  1. 服务端安装frp并配置开机自启 传送门

  2. frps.ini 配置以下内容

    [common]
    bind_port = 7000 #监听服务器端口
    dashboard_port = 7500 # 管理面板端口,用 https://{host}:{dashboard_port} 访问管理页面
    dashboard_user = xxx # 进入管理页面用户名
    dashboard_pwd = xxx # 进入管理页面密码
    token = jis8491j-9b83-11ec-9df5-00163e02a4b3 # 密钥,客户端进行反向代理时必须配置该token
  3. 个人电脑也需要安装 Frp, 进入到安装目录,执行 ./frpc.exe -c xdebug.ini 将端口反向代理到服务器的对应端口

  4. xdebug 的配置如下

    [common]
    server_addr = ppunknown.cn
    server_port = 7000
    token = jis8491j-9b83-11ec-9df5-00163e02a4b3 #与服务器frps的配置一致

    [unique_key]#唯一key,随便写,不可重复
    type = tcp
    local_ip = 127.0.0.1
    local_port = 9999 #本地端口,与 NetBeans 的 Debugger Port 一致
    remote_port = 9550 #服务器端口

XDebug 插件

浏览器安装 `XDebug` 插件,设置idekey与 NetBeans的 `Session ID` 一致

总结

至此,多人在家远程调试服务器代码的成就达成✌️

参考 & 引用