从其他主机访问 ddev web 容器

Access ddev web container from other hosts

我想从另一台主机访问 ddev 网络容器。我怎样才能做到这一点?

例如:ddev在主机A上运行,我想从主机B上访问网页

https://medium.com/botfuel/how-to-expose-a-local-development-server-to-the-internet-c31532d741cc 上有一个很好的技术总结,我看到了很多其他的 - 它建议:

  • ngrok(查看现有 ddev issue
  • 本地隧道
  • 只是使用 ssh 隧道进行代理。

所以你所说的至少有两种变体:

  1. 只是代理到主机上的一个公开端口,供本地网络上的另一台机器访问。
  2. 将您的本地开发环境代理到 Internet 上的主机以便从任何地方访问。

对于这两种方法,我们都需要弄清楚要代理的端口。 如果你可以只使用 http,我会代理 localhost 端口(它直接进入 web 容器并且不关心 URL 中的主机名是什么)。因此,如果 ddev describe 显示 http://d7git.ddev.local:8080, https://d7git.ddev.local:8443, http://127.0.0.1:32827,请使用 127.0.0.1 端口(在本例中为 32827)。如果你能做到这一点,你就不必 fiddle 在你要访问的主机上伪造主机名。

因此对于选项 1(只是在您机器上的另一个端口上公开),请使用 any of these technqiues。我将在 macOS 上使用 socat 方法(brew install socat)。

socat tcp-listen:8889,reuseaddr,fork tcp:localhost:32827

其中 32827 是 ddev 列出的端口,描述为本地主机访问,8889 是您要向其他人公开的端口。然后找到您的本地网络 IP 地址(使用 ifconfig 或其他技术),其他人可以通过它访问您的 ddev 项目。例如,我今天的设置是 http://10.150.150.87:32827/

对于选项 2,通过 ssh 隧道代理您的项目供其他人在 Internet 上使用:

ssh -R :9101:localhost:32827 user@host.example.com

这会将您的本地端口 32827(检查您自己的 ddev 描述)连接到远程 host.example.com 上的端口 9101。请注意,您可能需要

  • 更改防火墙配置以启用对远程主机上该端口的访问
  • 在主机的 sshd 配置中启用 GatewayPorts yes

更新:使用 ddev 1.9.0 及更高版本提供了一个 ddev share 命令,这使得这非常容易。