如何在一台VPS上托管多个Discourse论坛?

你好!我想请问是否可以在一台 VPS 上托管多个 Discourse 实例。由于我是初学者,能否提供清晰、分步的操作指南?谢谢。

当然可以!

不过,这是一个高级主题,你需要掌握以下基本概念:

  • 什么是反向代理?
  • 我应该使用哪种反向代理?
  • 如何在反向代理上配置虚拟主机?
  • 如何将虚拟主机配置为反向代理以连接到我的 Web 应用?
  • 如何配置 Web 应用以配合反向代理使用?
  • 使用反向代理时如何设置 SSL?

@Aiden12114,你熟悉这些概念吗?

如果是的话,那你肯定没问题!

很遗憾,我完全不知道那是什么意思 :rofl:

您有两个选择:

  • 多站点(Multisite)——更复杂:Multisite configuration with Docker
  • 多个容器(Multiple containers)——稍复杂(需要反向代理等,如上所述),成本更高。
    请按照不使用 ./discourse-setup 脚本安装 Discourse 的说明操作(cp samples/standalone.yml containers/app2.yml),并将 volumes 重命名为除 standalone 以外的其他名称。

我认为,对于任何感兴趣或正在就此做出决定的人,分享一些技术事实是很重要的:

  • 单个 Discourse 容器中包含多个“站点”,或
  • 每个 Discourse“站点”使用多个容器。

如果您采用“单容器多站点”方案,并且有 5 个(甚至 10 个)Discourse 站点正在运行,那么当您重建容器或因任何原因导致容器出现问题时,所有 5 个(或 10 个)Discourse 站点将同时失败(或宕机)。这是因为您只有一个容器在支持所有“站点”。

如果您采用“多容器”方案,并且有 5 个(或 10 个)Discourse 站点正在运行,那么当您重建其中一个站点的容器,或因任何原因导致某个站点容器出现问题时,只有 1 个 Discourse 站点会失败(或宕机)。这是因为您是一个容器支持一个“站点”(如果您像我们一样为每个站点运行独立的数据容器和应用容器,则是一个站点对应两个容器)。

此外,由于 Docker 在使用 Discourse 推荐的存储驱动 overlay2 时,会通过容器共享所有只读层,每个容器仅拥有一个独立的薄读写覆盖层(用于日志文件、缓存等),因此使用多个容器并不会占用太多额外的磁盘空间,这是 OverlayFS 的工作原理决定的。

有关 Docker 覆盖驱动如何工作(以及如何在容器间共享库)的更多信息,请参阅:

显然,选择哪种方案取决于每位系统管理员。基于我们的分析,我们决定始终采用多容器方案,原因如上所述(还有一些尚未讨论的原因)。

希望这能帮到您。