Discourse 安装在 UNRAID Ubuntu Server VM 中,通过 NPM 反向代理时主机名解析失败

大家好!我在这里阅读了各种帖子,但都没有成功,所以我想详细解释一下我目前的设置,希望能有人给我一些反馈来解决这个问题。

我目前正在运行一个 Unraid 服务器。Unraid 托管着 Docker 容器和虚拟机。我有一个 Nginx 反向代理管理器 (NPM) 运行在一个 Docker 容器中,它负责处理我运行的所有其他 Docker 容器的反向代理。我的防火墙设置为将所有端口 80/443 上的 WAN 流量发送到 NPM,并在 NPM 中将流量重定向到我的容器。

我遵循了以下指南:discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub

它确实表明它是为在云服务器上安装而设计的,尽管我的机器是本地托管的裸机。

System information as of Sun Jan 28 07:35:54 AM UTC 2024

  System load:              0.5126953125
  Usage of /:               45.9% of 13.16GB
  Memory usage:             6%
  Swap usage:               0%
  Processes:                125
  Users logged in:          0
  IPv4 address for docker0: 172.17.0.1
  IPv4 address for enp1s0:  10.30.20.150

我在 Unraid 中启动了一个虚拟机,安装了 Ubuntu Server,设置了静态 IP 地址,安装了 Docker,并下载了 Discourse。在运行设置时,我遇到了以下错误。

Hostname for your Discourse? [discourse.example.com]: forum.mydomain.net

Checking your domain name . . .
WARNING: Port 443 of computer does not appear to be accessible using hostname:
WARNING: Connection to  (port 80) also fails.

This suggests that forum.mydomain.net resolves to some IP address that does not reach this
machine where you are installing discourse.

The first thing to do is confirm that forum.mydomain.net resolves to the IP address of this server.
You usually do this at the same place you purchased the domain.

If you are sure that the IP address resolves correctly, it could be a firewall issue.
A web search for "open ports YOUR CLOUD SERVICE" might help.

This tool is designed only for the most standard installations. If you cannot resolve
the issue above, you will need to edit containers/app.yml yourself and then type

./launcher rebuild app

我能够从我的 NPM 容器 ping通我的 Ubuntu VM 的静态 IP 地址 10.30.20.150。我已经将我的 NPM 配置设置为指向 HTTPS 10.30.20.150 端口 443 以及 HTTP 端口 80,但都没有成功。当设置失败时,它似乎关闭了 VM 中的 Discourse 容器?

有没有什么解决方法?
也许,编辑我的防火墙端口以绕过反向代理直接指向 VM,以便它可以获取证书并运行容器,然后在运行后手动编辑 config.yml 以使用我的反向代理?
我能否编辑安装过程以不要求 SSL 证书,并在端口 80 上运行,然后通过 NPM 处理获取 SSL 证书?

最后,我在一些帖子中看到 Discourse 有“生产”和“开发”版本……似乎开发版本可以在本地端口上通过 HTML 运行?如果这是真的,我想我可以更容易地将所有东西放在我的反向代理后面……据我所知,生产包更容易更新,并且可能有性能改进。

我将非常感谢在这件事上的任何帮助、反馈或建议。

这是这里唯一支持的生产环境安装方式。

但我并不认为它适合你的情况,因为你已经有了反向代理。

你或许可以研究一下使用 Discourse 基础镜像,然后逆向工程出你自己的定制化组合:

https://hub.docker.com/r/discourse/base/

1 个赞

可以在 app.yml 中删除对端口 80 和 443 的引用,并加上 # 吗?

该文件位于 /var/discourse/containers 目录中吗?我无法 cd 到该目录,它显示“权限被拒绝”。

那么这个的基本概念是不是编辑 discourse 基础 dockerfile 并删除那些安装/配置包自带的反向代理的行?

不,我会着手创建一个完全定制的 docker compose(或您用于编排的任何工具),并为 discourse 使用自定义 dockerfile。

我以前从未做过这件事,听起来有点令人生畏。我不知道从哪里开始。我想知道是否有人走过我正在走的这条路,并且已经完成并发布了修复程序。

我想知道是否可以做一些类似于这位仁兄所做的事情,将容器隔离在反向代理中,以便我能够完成安装,或者正确解析到我自己的 Docker 容器中运行的外部反向代理?

2 个赞

这是系统管理员工作的进阶部分,但 Docker Compose 基本上就像玩很酷的乐高积木——它并不像看起来那么难,而且网上有很多帮助。

这将是一次很好的学习经历,可以培养一项非常可转移的技能,加油!

你的链接看起来也是一个尝试的好地方。

2 个赞

是的,就是那个。

不过,这并不那么容易。当我这样做的时候,我仍然使用启动器来构建一个镜像,将其推送到一个仓库,然后启动它。然后你还需要有预编译资产、迁移数据库以及可能还有其他东西的方法。

遵循“运行其他网站”的方法可能是应该做的。

3 个赞

是的,这并不简单,但在一个客户那里,我曾使用过一个相当不错的 Docker Compose 解决方案——完全没有 launcher

我还有一个使用 DC 的私有云开发安装……

2 个赞