高可用性 3 服务器设置

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

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

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

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

非常感谢大家的帮助。

5 个赞

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

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

谢谢 Rafael,非常感谢。

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

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

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

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

太好了,再次感谢。

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

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

2 个赞

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

3 个赞

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

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

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

2 个赞

好的。我现在在一台机器上成功运行了 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 实例?

1 个赞

你有两个选择:

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

我设置了环境变量 DISCOURSE_FORCE_HTTPS: true

6 个赞