非“全栈”IP 后的自托管安装

你好,

为了测试/验证目的,我在一台本地的 Ubuntu 机器上安装 Discourse,该机器的本地 IP 已固定,假设为 192.168.1.200。
它位于一台具有公网 IP 的路由器(光猫)之后,假设该公网 IP 为 A.B.C.D,但不是公网静态 IP(full-stack)。:roll_eyes:

由于一些我无法控制的原因,我无法将其更改为公网静态 IP。因此,我在路由器上的端口映射(NAT)范围被限制在一个非常高的端口区间内,既不能使用 443,也不能使用 80。

举例来说,我将在公网的 TCP/UDP 端口 50000 映射到内部 IP 192.168.1.200 的 443 端口。

因此,理论上,发往公网 IP A.B.C.D 端口 50000 的请求应该被转发到 192.168.1.200:443。

我拥有一个子域名,假设为:forum.mondomaine.me,其 A 记录和 AAAA 记录均指向公网 IP A.B.C.D(用于 IPv4)。

我在该域名处添加了一条重定向规则,将 https://forum.mondomaine.me 重定向到我的公网 IP A.B.C.D:50000。

如果我尝试访问上述 URL,确实会看到地址变为 A.B.C.D:50000,当然会收到拒绝连接,因为目前 192.168.1.200:443 上还没有服务在监听。

棘手的是,在我以 Docker 模式安装 Discourse 时,域名配置验证步骤失败了:

/!\ 此计算机的 443 端口似乎无法通过主机名 forum.mondomaine.me 访问。
/!\ 连接到 http://forum.mondomaine.me(端口 80)也失败。

肯定有解决办法或变通方法,但目前我还没想出来……

这是一个家庭网络吗?有没有可能是您的 ISP 在阻止流量?为什么不改用 VPS 呢?

(编辑:请使用上方链接文档中推荐的 Cloudflare Tunnel)

感谢您的回复。

这是一个家庭网络吗?

正如我最初提到的,我在自家的 Ubuntu 机器上安装 Discourse,是的,这确实是一个家庭网络。

您的 ISP 是否会阻止流量?

当公共 IP 不是 全栈(full-stack) 时,确实会出现这种情况。而到了这一步,我也无能为力了。

为什么不改用 VPS 呢?

因为对于这个 测试,我并不打算购买 VPS。但我同意:如果我已经有一个现成的 VPS,那确实会是更好的解决方案,我也不会犹豫。

至于使用 Cloudflare 隧道,根据我最近的观察,为了这么点事情搞这么复杂似乎有些大材小用……而且还得是 Cloudflare……

要是能在隔离(或非隔离)的局域网中如此简单快捷地安装 Discourse 就好了……

我确实看到过某个地方有关于内网的指南(但我已经找不到链接了),感觉也相当繁琐,尤其是与标准安装相比!

算了吧,这并非当务之急,我不想花好几个小时折腾它。:laughing:

再次感谢您的回复。

安装时能否跳过此步骤?

正如 Jay 的这篇帖子 中所述,可以通过以下方式跳过端口检查:

--skip-connection-test

您是需要从局域网外部进行连接测试,还是将其作为开发环境的一部分?

如果我对问题的理解有误,敬请见谅。

考虑到在修复你自己的网络、确保你的 ISP 正确转发流量,以及确保你没有留下任何让可疑行为者劫持家庭网络的漏洞所花费的时间,在我看来,使用 Cloudflare 隧道其实相当简单直接。特别是在家庭网络环境中。

Discourse 要求使用 HTTPS。除非您知道如何按照其他地方的说明获取并安装证书,否则最佳方案是通过 Cloudflare Tunnel 在家庭互联网上安装 Discourse

我认为安装您自己的证书的方法如下:为您的 Discourse Docker 设置启用 SSL / HTTPS

感谢 @Andrew_Rowe 的提示!

不,我测试时并不需要来自 LAN 外部的连接。

因此,我使用 --skip-connection-test 参数运行了 install-discourse,正如预期,安装过程继续进行,没有在域名验证处卡住。

需要记得,如果 nginx 已经在运行(非 Docker 环境),请先将其停止。

不过没问题了!Discourse 已经在容器中运行了!

但是……显然我们现在遇到了证书问题。

nginx: [emerg] cannot load certificate “/shared/ssl/forum.mondomaine.me.cer”: PEM_read_bio_X509_AUX() failed (SSL: error:0480006C:PEM routines::no start line:Expecting: TRUSTED CERTIFICATE)

我当然已经参考了 这个帖子,并确认了 /var/discourse/shared/ssl/forum.mondomaine.me.cer 文件确实存在,.key 文件以及另外两个以 .me_ecc.cer|key 结尾的文件也都正常。

我重新构建了容器,但问题依旧。

我确认,在本地测试机器上安装 Discourse 简直就是一场磨难!:joy:

这显然并不被鼓励。

既然没有简单的解决方案(不,我**不会**使用 CloudFlare,没必要往这个方向走,谢谢),我想这将是关于此主题的最后一则留言了。:grinning_face_with_smiling_eyes:

你并不是真的“购买”它,而是“租用”它。

毫无疑问,@merefield,感谢您的指正。我也将澄清我的意思:我计划不花钱购买 VPS。

还有一件事,我注意到 docker run 命令中包含了 DISCOURSE_FORCE_HTTPS=true,所以我将其改为 false,并在重建容器后重新启动。

没有任何变化。

如果您不打算使用类似 Cloudflare 的隧道,而只是想浏览一下,请使用 #dev-install。

谢谢!我确实会查看一下。