多站点安装……在子目录中?

你好!

我需要在某个环境中部署 Discourse,该环境要求有多个独立的论坛,且论坛集合需要能够随时间灵活调整。(是的,我确实需要多个论坛;它们服务于不同的社区。)

答案似乎是采用多站点(multi-site)安装方案,我已经成功实现了这一点:目前我拥有一套基于 Docker 的多站点工作配置,各站点的数据容器和 Web 容器相互独立,具体可参考 https://meta.discourse.org/t/multisite-configuration-with-docker/14084。(我使用了两个主机名 $hostname.$domaindiscourse.$domain,在测试中运行良好。)

然而,存在一个限制:我无法轻松控制 DNS,因此难以添加多个“真实”的主机名。目前看到的所有文档都表明多站点部署需要多个主机名,快速查阅多站点支持的实现机制也证实了这一点。

我理想的布局是让每个论坛位于独立的子目录中,例如 discourse.$domain/forum1, …, discourse.$domain/forumN;同样理想的是,能够像现有的多站点机制那样,仅通过一个 Web 容器来服务所有这些论坛。

从实际测试来看,我可以成功将“主”论坛移至子目录(例如 discourse.$domain/forum),参考 Serve Discourse from a subfolder (path prefix) instead of a subdomain —— 但这似乎将 Web 容器绑定到了该特定子目录,并且在我的实验中严重干扰了多站点功能。

我还尝试过一些技巧,例如根据主机前端 Web 服务器的路径,在传入 Web 容器的 Host: 请求头中进行调整,但均未成功——结果得到了多个论坛的奇怪混合状态。

因此:是否有简洁的方法实现这一目标?我能否像多站点那样仅使用一个 Web 容器?还是必须使用第二个 Web 容器?如果两个容器都指向同一个数据容器且彼此不知情,它们是否会表现异常?或者我是否完全走错了方向?

1 个赞

目前,我们尚不支持同时使用多站点和子文件夹。如果未来有客户有此需求,我们可能会考虑实现,但预计这将是一项工作量较大的任务。

6 个赞

如果它们都属于同一个基础域名,我的变通方法是使用 *.forum.example.com。这样,您只需要一条 DNS 记录即可。

3 个赞

谢谢两位!很遗憾,我现在无法设置通配符子域名,因此我可能只能采用不支持多站点、而是使用多个 Web 前端容器的方案。(如果早一点意识到这一点,我本会尽力争取通配符子域名的支持。)

我当然很希望看到对多站点/子文件夹的支持——如果(不太可能)我将来有时间的话,可能会研究一下这个方向。

1 个赞