多站点与多个容器

有人了解多站点(multisite)与多容器方案的优缺点吗?

我目前有三个作为独立容器运行的 Discourse 实例,正考虑将另外两到三个论坛也迁移到 Discourse。这些论坛将部署在同一台服务器上(64GB 内存,配备 SSD 存储),因此我在思考哪种方案更为合适。

我倾向于让它们尽可能独立,以便每个实例可以单独升级、单独备份和恢复,并且一个实例的问题不会影响其他实例。

您有什么建议?有哪些优缺点需要特别注意?

在 multisite(多站点)模式下,您无法单独升级,也无法隔离插件的使用。所有这些都由根 multisite 定义。不过,设置、主题和备份可以分别进行。

通常,您还需要在前端部署代理来处理 SSL 证书。

3 个赞

实际上,我已经找到了一种方法,可以让 Let’s Encrypt 为多个域名获取证书,而无需重定向到主域名。Setup Multisite Configuration with Let's Encrypt and no Reverse Proxy

@AstonJ,你有兴趣测试我的操作指南吗?我有 90% 的把握它是可行的,但距离我上次测试已经过去几周了,我不确定这些说明对其他人是否同样有效。

如果你希望所有站点拥有相同的插件并同时进行升级,那么多站点配置是个很好的选择。

3 个赞

我可以通过 ACP(管理控制面板)关闭任何未使用的插件(我想其中有一个论坛可能根本不需要),所以这取决于使用 multisite 有什么优势?具体来说,是性能或稳定性方面的优势吗?

我记得 @Blake 曾发帖说,不把 PG 运行在独立的容器中简直不可思议(这和 multisite 是一回事吗?),因此我一直在考虑这样做。顺便说一句,别把我说的 Blake 的话太当真,我可能是在做梦:rofl:

我使用 HAProxy 来处理我们的 SSL 证书,所以我认为这应该没问题。

我想这取决于优势所在,Jay——如果差别不大,我不介意继续按目前的方式运作,因为设置和管理已经相对容易了;但如果使用 multisite 有一些显著优势,那我绝对会感兴趣:sunglasses:

另一个优势是,你只需额外运行一份 Rails 和 Nginx 实例,因此所需的额外内存要少得多。不过,既然你内存充足,那么采用当前已运行的方案似乎正逐渐成为最佳选择。

2 个赞

您好。是否可以将多站点用户合并,以便用户只需在一个站点注册即可同时在所有多站点上注册(如 Magento 中)?或者使用类似联合的 Discourse 超级变体。这样警报就可以同步工作,站点 1 的用户可以接收来自站点 2 的警报?聊天也同样如此。
我有 4 个同属一个大方向但主题不同的社区,我希望这些社区能够紧密集成在一起

您可以将一个站点设置为 discourse connect 身份验证服务器,并让所有其他站点以此服务器进行身份验证。

2 个赞

我正在尝试弄清楚我是否需要一个多站点设置、多个容器或其他东西。

我目前有 3 个独立的社区,其中两个相似(都关于大学体育,但针对两所不同的学校),第三个关于烹饪和烘焙。

我想将它们都放在同一台服务器上(因为我的 ISP 有 IP 地址限制),但使用不同的 URL,有点像这样:

foo.bar.com/team1
foo.bar.com/team2
foo.bar.com/cooking

team1.bar.com 重定向到 foo.bar.com/team1 等,或者到单独的虚拟服务器也可以。(我知道 Apache 可以做到这一点,所以我假设 nginx 也可以,无论是直接还是在前面放置一个代理服务器。)

理想情况下,foo.bar.com 本身将作为这些独立社区的网关,解释它们是什么以及如何访问它们。每个社区中的某些类别可能可以公开读取并被网络爬虫访问,以便它们出现在网络搜索中。

这是一个多站点设置还是多容器设置,或者完全是其他东西?

运行 Multisite 时是否有任何已知的插件设计陷阱?

看起来我的 Chatbot 不支持 Mulitsite(所以这是一个已知问题),但我想了解原因:它在标准安装上运行正常。

具体来说,似乎 setup db task 和可能 this job 存在问题。

1 个赞

我想更新一下我的情况。

研究之后,我决定需要一个多站点设置(目前是一个容器),并在外部设置一个 nginx 站点来解释设置并将人员和流量引导至单独的 discourse 站点。这样,我就可以让两个站点都对访问者(和网络爬虫)开放只读访问,而无需 list1 的用户处理来自 list2 的内容。我可能需要调整 robots.txt 来满足网络爬虫的要求。

多站点设置的示例很有启发性,但我无法使用 Unix 套接字(网关错误)使其正常工作,因此我最终将其转发到另一个端口,并将该端口重定向到容器内的 443。

在我的 app.yml 文件中,我启用了 SSL 模板,但未启用 letsencrypt 模板。

我已经让测试站点正常工作了,现在我正在寻找在将生产站点转换时可能出现的任何问题,希望在本月晚些时候或下个月进行。

我正在处理外部服务器端的证书问题,但遇到了“不安全”的问题,我通过在容器中强制使用 https 来解决。我有一个任务将通过 cron 运行,将最新的证书和密钥复制到容器的 /shared/ssl 目录(作为 ssl.crt 和 ssl.key)。我不确定是否需要强制重新加载容器内的 nginx 以确保在证书更改时(我认为是在七月)加载新证书。

我确实遇到了一个 discourse 的陷阱:

在容器的 /etc/nginx/conf.d/discourse.conf 文件中,有这个代码片段(域名已更改):

if ($http_host != 'site1.my.domain') {
   rewrite (.*) https://site1.my.domain$1 permanent
}

这导致 site2.my.domain 被重定向到 site1.my.domain,所以我不得不注释掉它。

注意:重建容器需要重新进行此编辑,是否有办法避免这种情况?

这还导致了一个浏览器陷阱,因为现在 Firefox 已将该重定向标记为永久性,所以我必须删除浏览器缓存。(这花了我太长时间才弄明白!)

我还发现了其他一些奇怪的事情。

在我的测试站点上,强制使用 https 的参数未为任一站点选中。在我的生产站点上,该参数甚至不存在于设置文件中。我猜测这与两个站点之间的差异有关。