高可用性 3 服务器设置

Discourse 是否支持在独立负载均衡器后端部署多台机器(每台机器运行一个 Docker 容器)?

我需要配置一个 Discourse 环境以应对服务器故障,因此我的标准做法是配置 3 台服务器位于负载均衡器后端(由负载均衡器处理 SSL 证书)。

我已为 Discourse 配置了独立的外部 PostgreSQL 和 Redis 服务器。(所有这些都部署在 Google Cloud Platform 上。)我使用 Discourse 启动器来配置仅包含 Web 服务的 Docker 容器。

  1. Discourse 是否支持在每台机器上运行多个容器(每个容器位于不同的机器上)?
  2. 我是否只需将第一台机器上创建的 Docker 容器复制到其他机器上?
  3. 上传的徽标是如何处理的?
  4. 上传的徽标、网站图标(favicons)等是否存储在数据库中?

非常感谢大家的帮助。

是的,我们在 我们的托管服务 中就是这样运行的。

  1. 是的
  2. 是的
  3. 您应该配置 使用对象存储进行上传(S3 及克隆)
  4. 不,如第 3 点所述,它们会存储到对象存储中。

谢谢 Rafael,非常感谢。

我在负载均衡器上遇到了 SSL 终止的问题。Discourse 将其所有链接都指定为 HTTP。

有没有办法让 Discourse 知道它的链接应该是 HTTPS?

是的,进入 Rails 控制台并使用以下命令将其设置为 https:

cd /var/discourse
./launcher enter app
rails c
SiteSetting.force_https = true

太好了,再次感谢。

我猜我可以在 app.yml 中这样写:
- exec: rails c "SiteSetting.force_https = true"

我对 Rails 一无所知。在我上面的命令中,应该是 ‘rails c’ 还是 ‘rails r’?

我们在示例文件中确实有一个在 Bootstrap 中更改站点设置的示例:

没错,我的命令就是从这里复制的。

最后一个问题:Docker 容器是否被监控?如果 Docker 容器因任何原因停止,launcher 是否已配置为自动重启它?

没错,launcher 会要求 Docker 自动重启容器。

好的。我现在在一台机器上成功运行了 Discourse。我还有另外两台机器。Docker 容器中的 /shared 卷已指向一个 NFS 目录,以便所有机器都能访问上传的文件(尤其是徽标等)。

我已将 Docker 镜像复制到机器 2 和 3(使用 docker save -o app-image local_discourse/app,然后执行 docker load -i app-image)。

我原以为直接运行 ./launcher start app 即可,但它却尝试检查 containers/app.yml 文件。

如果允许机器 2 和 3 对 app.yml 进行检查(并进行修改),然后将其更改写入数据库,我是否会遇到问题?

是否有更好的方法让三台机器运行同一个 Discourse 实例?

你有两个选择:

  • 在完全配置好的机器(即“构建机器”)上使用 ./launcher start-command app 来获取完整的 Docker 命令行
  • 复制 app.yml 文件,然后执行你刚才尝试的操作(launcher start)。

我设置了环境变量 DISCOURSE_FORCE_HTTPS: true