使用Vagrant/Puppet自动设置xdebug.remote_host IP地址

7
我正在使用puppet进行配置,设置Vagrant环境。与一个问题卡在一起,我希望在运行`vagrant up`时,能使xdebug自动运行。但是,在php.ini文件中需要指定主机的IP地址作为`xdebug.remote_host`,由于这个值在每台计算机上都不同,所以希望在发出`vagrant up`命令时自动更新该值。请参照下方的VagrantFile格式进行配置。
config.vm.network :forwarded_port, guest: 9000, host: 9000

.ini设置:

'xdebug.default_enable=1',
'xdebug.remote_enable=1',
'xdebug.remote_handler=dbgp',
'xdebug.remote_host=localhost:9000',
'xdebug.remote_port=9000',
'xdebug.remote_autostart=0',
'xdebug.max_nesting_level=250'

我也尝试了使用xdebug.remote_host=localhost

vagrant虚拟机的ifconfig结果:

vagrant@precise64 ~ : ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:cf:f9:89
      inet addr:192.168.61.142  Bcast:192.168.61.255  Mask:255.255.255.0

phpinfo()

REMOTE_ADDR 192.168.61.2

REMOTE_PORT 51886

为了确认,如果我将remote_host设置为我的OSX主机上的实际IP地址,它会正常工作。


请参考以下链接:https://dev59.com/32Ij5IYBdhLWcg3wwHpr - Tgr
2个回答

11

http://www.xdebug.org/docs/all_settings所述,您可以设置选项

xdebug.remote_connect_back = 1
因此,xdebug将连接回请求网页的主机,并忽略选项“remote_host”。
这种解决方案存在一个问题:如果您为任何请求启用xdebug,而打开网页的用户没有运行xdebug客户端(等待服务器连接),并且具有未关闭的9000端口,则服务器将在最终加载页面之前长时间等待(尝试连接到客户端的xdebug会话)。 我在Windows 7机器上遇到了这个问题,因为它的防火墙实际上不会关闭端口,连接软件无法理解没有人在听端口。
如果这个方法不起作用:
我遇到了同样的情况,然后需要使用具有适用于任何IP地址的任何机器的配置的VirtualBox VM。 所以我是这样做的:
  1. 我在VirtualBox中创建了虚拟网络接口(我不知道vagrant中是否有此选项,但应该有),并将其本地地址设置为192.168.100.1, 因此,我的真实机器有两个地址:eth0:192.168.1.2 vboxnet0:192.168.100.1
  2. 我使用以下值配置了虚拟机:IP=192.168.100.100 ,默认网关=192.168.100.1
  3. 将我的XDebug配置为remote_ip=192.168.100.1
现在,我有3个这样的机器副本(我的副本和我的同事使用的2个副本),它们都运行良好!
因此,解决方案是将您的IP地址设置为某个“恒定”的虚拟地址。

我尝试过了,但没有成功。我查看了remote_host超级全局变量,发现IP地址是vagrant guest机器上运行PHP的,而不是我的主机。 - greg
好的,那么你应该尝试这样做:1)配置你的xdebug使用localhost:9000,这样它将连接到虚拟机的端口,2)然后将该端口转发到你的真实机器。 - MihanEntalpo
仍然没有运气。我已经更新了我的配置,并在问题中提供了它。 - greg
我注意到从phpinfo中获取的REMOTE_ADDR是192.168.61.2,但在OSX(主机)中,从ifconfig获取的vmnet IP地址是192.168.213.1、192.168.56.1、192.168.61.2 - greg
更新了答案,附带新的信息。 - MihanEntalpo

0

如果使用自定义的Vagrant机器运行GNU/Linux或使用Docker镜像,则可以通过以下命令找到IP地址:

netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10

在运行第一个命令之后,执行以下命令以获取IP:

vagrant ssh #login into the machine

如果您正在或想要在 Vagrant 中运行 Docker,则可以获得额外的信息

还有一个有趣的情况,就是在 Vagrant GNU/Linux 镜像中生成一个 Docker 容器来运行 PHP。在这种情况下,请勿尝试映射正在运行的 PHP 映像的 shell,然后运行上述命令,通过运行以下命令找到 VM 返回主机的 IP:

netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10

在运行的VM的shell中,而不是在运行的docker容器上(使用docker execdocker-compose exec)。如果设置了入口脚本,则为XDEBUG IP设置环境变量,并在该值为空时自动设置IP。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接