【问题标题】:Can't redirect Xdebug to localhost from a remote server using DBGp in a Dockerized app无法在 Dockerized 应用程序中使用 DBGp 从远程服务器将 Xdebug 重定向到 localhost
【发布时间】:2021-04-24 16:03:04
【问题描述】:

我们是一个在远程服务器上为不同项目使用 docker 堆栈的团队(比 Mac 性能更好)。这些堆栈有多种服务,例如 PHP(带有 Xdebug)、DBGp、ElasticSearch....

我已经解决了 2 周的问题,但无法解决。我无法在远程服务器上使用此堆栈进行调试(它在我的本地计算机上运行良好,但速度非常慢并且浪费了太多时间)。我认为 ssh 隧道做错了

这里有一些信息:

Xdebug 配置:

[xdebug]
xdebug.max_nesting_level=2048
xdebug.remote_enable=1
xdebug.remote_connect_back=0
xdebug.remote_port=9001
xdebug.remote_host=dbgp
xdebug.idekey=PHPSTORM
xdebug.remote_log="/var/www/html/public/xdebug.log"

Xdebug 日志:

[6] Log opened at 2021-01-20 09:00:21
[6] I: Connecting to configured address/port: dbgp:9001.
[6] I: Connected to client. :-)
[6] -> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" fileuri="file:///var/www/html/public/test.php" language="PHP" xdebug:language_version="7.3.20" protocol_version="1.0" appid="6" idekey="PHPSTORM"><engine version="2.9.6"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[https://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2020 by Derick Rethans]]></copyright></init>

[6] <- proxyerror -i 1 -- VW5hYmxlIHRvIGNvbm5lY3QgdG8gdGhlIHNlcnZlciBsaXN0ZW5lciA5Mi4xODQuMTAwLjIyNTo5
MDAxIFs8X19tYWluX18uc2Vzc2lvblByb3h5IGluc3RhbmNlIGF0IDB4N2Y5Y2VjZDFkNWYwPl0=
[6] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="proxyerror" transaction_id="1"><error code="4"><message><![CDATA[unimplemented command]]></message></error></response>

[6] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" status="stopping" reason="ok"></response>

[6] <- proxyerror -i 2 -- VW5hYmxlIHRvIGNvbm5lY3QgdG8gc2VydmVyIHdpdGgga2V5IFtQSFBTVE9STV0sIHN0b3BwaW5n
IHJlcXVlc3QgWzxfX21haW5fXy5zZXNzaW9uUHJveHkgaW5zdGFuY2UgYXQgMHg3ZjljZWNkMWQ1
ZjA+XQ==
[6] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="proxyerror" transaction_id="2"><error code="4"><message><![CDATA[unimplemented command]]></message></error></response>

[6] Log closed at 2021-01-20 09:00:52

来自 docker-compose.yml 的 DBGp 配置(使用 komodo-python-dbgp 启动 Dockerfile):

  dbgp:
    build:
      context: './.docker/dbgp/'
    ports:
      - ${DBGP_PORT}:9002

DBGp 日志:

dbgp_1                | 2021-01-20T08:59:34.893975559Z INFO: dbgp.proxy:     dbgp listener on 0.0.0.0:9001
dbgp_1                | 2021-01-20T08:59:34.893982748Z INFO: dbgp.proxy:     IDE listener on  0.0.0.0:9002
dbgp_1                | 2021-01-20T09:00:01.496772798Z INFO: dbgp.proxy: Server:onConnect ('92.184.100.225', 43547) [proxyinit -p 9001 -k PHPSTORM -m 1]
dbgp_1                | 2021-01-20T09:00:21.203770947Z INFO: dbgp.proxy: connection from 192.168.192.9:57390 [<__main__.sessionProxy instance at 0x7f9cecd1d5f0>]
dbgp_1                | 2021-01-20T09:00:52.648803308Z ERROR: dbgp.proxy: Unable to connect to the server listener 92.184.100.225:9001 [<__main__.sessionProxy instance at 0x7f9cecd1d5f0>]
dbgp_1                | 2021-01-20T09:00:52.648853429Z Traceback (most recent call last):
dbgp_1                | 2021-01-20T09:00:52.648864741Z   File "/usr/bin/pydbgpproxy", line 220, in startServer
dbgp_1                | 2021-01-20T09:00:52.648874088Z     self._server.connect((self._serverAddr[0], self._serverAddr[1]))
dbgp_1                | 2021-01-20T09:00:52.648882211Z   File "/usr/lib/python2.7/socket.py", line 228, in meth
dbgp_1                | 2021-01-20T09:00:52.648890343Z     return getattr(self._sock,name)(*args)
dbgp_1                | 2021-01-20T09:00:52.648898305Z error: [Errno 110] Operation timed out
dbgp_1                | 2021-01-20T09:00:52.649270051Z WARNING: dbgp.proxy: Unable to connect to server with key [PHPSTORM], stopping request [<__main__.sessionProxy instance at 0x7f9cecd1d5f0>]
dbgp_1                | 2021-01-20T09:00:52.649739684Z INFO: dbgp.proxy: session stopped

我用来重定向到本地的 SSH 命令:

ssh -R 9001:127.0.0.1:25115 user@server

与:

  • 9001 是 PhpStorm 正在监听的本地端口
  • 25115 是 DBGp 的公共远程端口重定向到 9002(DBGp 中的 IDE 侦听器)

我也试过把 127.0.0.1 改成应用的 docker 网关地址,但还是不行。

我在 PhpStorm 的 Tools &gt; DBGp Proxy &gt; Register IDE 中注册了我的 IDE。 当我在我的应用程序上加载一个 php 页面时,它只加载 30 秒并显示我放在顶部的日志。

我做错了什么,有人可以帮助我吗? ????

【问题讨论】:

  • 以防万一:当 Xdebug 连接到 DBGp 代理时,它会依次连接到您的 IDE。它能够做到吗?检查此 PhpStorm 论坛主题:intellij-support.jetbrains.com/hc/en-us/community/posts/…
  • 我认为从远程 DBGp 连接到本地 IDE 是问题所在,对吧?我尝试了很多事情,也注意到我的 ssh 命令是错误的:我将 ssh -R 9001:127.0.0.1:25115 user@server 更改为 ssh -R 25115:127.0.0.1:9001 user@server 但仍然无法正常工作
  • 我从来不需要使用 DBGp 代理(或容器内的反向 SSH 隧道),因此无法在这里提供帮助。顺便说一句:@ 987654322@ - 这是SO上的原始问题(与我之前给你的链接相同的人)。尝试在那里发表评论,也许有人能给你一些提示。您也可以在 PhpStorm 论坛上创建自己的主题,以便 PhpStorm 支持团队可以提供帮助(不要劫持现有主题,因为您的情况不同,但您可以在那里评论“请查看我的主题/给我一些建议”)。

标签: php docker phpstorm xdebug remote-debugging


【解决方案1】:

似乎可以完成这项工作,但您的配置必须完全重新完成。

  1. SSH 隧道没有任何意义。在服务器上,您将 25115 映射到 dbgp 容器的端口 9002,同时您试图通过 SSH 侦听同一端口以将此端口重定向到您的开发机器?

  2. 代理通过获取注册所来自的 IP 发起与注册 IDE 的新连接,使用 Docker 端口映射 (25115:9002),它将是 127.0.0.1,因此容器将尝试将调试数据发送给自己,这显然是行不通的。

您需要做什么 - 请查看我的评论 here,具体来说,this screencast

您需要修改代理代码,以便它启动到 Docker 主机的调试连接并将 IDE 密钥用作端口号。

在我的截屏视频中,我使用了“127.0.0.1”,在您的情况下,这应该是容器可以用来连接到 Docker 主机的主机名/IP。在Linux上,我一般使用eth0接口地址。

如果我没记错的话,25115 端口在服务器上是公开可用的,所以你不需要隧道来连接它。

您需要隧道的目的是每个开发人员都应该在服务器上侦听他们的个人端口,以便代理可以通过隧道将数据发送到开发人员的机器。

隧道应该类似于ssh -R 8123:127.0.0.1:9001,其中:

  • 8123 是每个开发人员唯一的 IDE 密钥。
  • 9001 是 PhpStorm 在开发机器上监听的端口。

就是这样,请试一试。

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 2019-07-31
    • 2012-03-31
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    相关资源
    最近更新 更多