为 Discourse 重建或启动时添加一个离线页面显示

Cool good to know, thanks for your feedback

The first post says this

Is this the only way to do it? We don’t have nginx running outside docker

Yes, that’s the only way. The idea is to install a webserver (nginx recommended) to serve the request, if Discourse is up it routes it there. If not it does something else. All the installation process is explained step by step.

2 个赞

你好,

简介

感谢你的解决方案,@fefrei!我们已在 https://community.hiveeyes.org/ 上实施了该方案,效果非常好。

进一步思考

不过,我们希望在此引用 @mlinksvaSite maintenance mode during rebuilds? 中提出的相关问题,因为该问题也令我们感同身受,且目前尚未通过 /errorpages 方案解决。这涉及改进通用提示文本“抱歉,我们无法加载该主题,可能是由于连接问题。”。我们将尝试更详细地阐述这一点。

提供 discourse_offline.html

当新用户首次访问网站时,这非常完美。

提供不同的“抱歉”提示文本

然而,在 Discourse 内部导航时,系统会像这样向你报错:

却未揭示任何原因。

既然我们已与您相熟,想必应该有一个自定义功能可以修改该文本,对吧?我们可能只是错过了它。我们尚未调查功能 管理 » 备份 » 启用只读模式 是否如 Maintenance Mode? 所述已经解决了该问题。

尽管如此,我们认为在此再次提出该话题是有意义的,希望您不会介意这是否显得多此一举。

此致,
Andreas.


附言:@staff:鉴于此讨论在适当的 Nginx 或 Web 服务器配置细节方面有些失控,我建议进行彻底的重组,将这些帖子拆分到一个名称恰当的主题中,例如“配置 Web 服务器以显示离线页面”。我相信您会找到一个合适的标题。如果您觉得该建议值得采纳,提前表示感谢。

现在,当我们立刻发现它其实是可自定义的网站文本块后,我们确实 觉得 有点傻:


https://community.hiveeyes.org/admin/customize/site_texts/js.topic.server_error.description


我们将标准文本 js.topic.server_error.description 修改为:

感谢您的倾听;]。

3 个赞

嗯。我们不确定修改该文本是否真的对我们有效。在修改这个内容时,我们是否需要特别注意什么?


另外,我们想提一下,在站点宕机的特定时间段内,报错信息有所不同,例如:

您是否知道如何修改这部分内容?

1 个赞

我用那个,但我想自定义一个离线网页,却做不到。

非常棒的指南。
但如果您能提供一些自动续期此证书的命令行示例就更好了。那样这将是一份完整的指南。
因为我看到了这里提到的链接,但该链接仅说明了如何全新安装证书或手动续期。
但我找不到关于“自动续期”的指引。

谢谢。

1 个赞

好主意!我已经在原帖上方更新了这部分内容 :arrow_double_up:

1 个赞

有人注意到升级时出现更通用的 500 错误吗?也许我刚好在错误的时间遇到了?

1 个赞

容器在重建过程中停止时,没有任何进程在运行以返回 500 错误。

4 个赞

有人尝试过使用另一个 Docker 容器来实现这一目的,从而避免所有这些手动步骤吗?正如开头所建议的那样。

是的,很多人已经这样做了。请参阅 https://meta.discourse.org/t/how-to-move-from-standalone-container-to-separate-web-and-data-containers/29413。请注意,使用独立容器安装更为复杂,Meta 上的许多指南都假设采用单容器(独立)安装方式。在迁移到独立容器之前,请务必了解这两个容器的功能以及未来如何与它们交互。最重要的一点是:app 将不再作为 ./launcher 命令的有效目标。

5 个赞

嗯,不知为何这个话题在两个帖子中仍然提到了“前置 nginx”……

顺便说一下,我真正想要的是:

  • 实现这里讨论的离线页面
  • 在我的 Web 服务器上重定向 http → https 以及根域名 → www。我不想使用 Cloudflare 来做这件事,因为它的部分 IP 在中国被屏蔽了。

所以据我理解,我只需要弄清楚如何在仅 Web 容器中实现这些功能即可::blush:

现在我很困惑。

这两个目标都不需要单独的容器配置。您是想同时配置上述两个步骤,并且同时也在寻找独立的容器方案?还是您误以为需要单独的容器才能完成上述操作?

据我理解,离线(重建)页面处理不能位于同一容器中,因为它将无法运行。因此,当前主题中提出的解决方案是在前面添加 nginx。但正如在该主题中讨论的那样,这需要大量手动步骤且与操作系统相关,因此我认为使用另一个 Docker 容器来运行此前端 nginx 会更加可靠且更易于维护。

啊,现在我明白了。在这种情况下,请忽略我之前链接的话题。那个话题讨论的是将 Discourse 的 Web 服务器与数据库分离,但这里并不需要这样做。

在 Docker 容器中安装 Nginx 而不是直接安装在操作系统上是完全可行的,但我不知道是否有专门针对 Discourse 的相关指南。如果您选择这条路,请务必理解本话题的原始帖子(即创建离线页面并在前面安装 Nginx 代理所需的更改),并且对 Docker 的工作原理有充分了解,尤其是如何在两个 Docker 容器之间配置网络。另外请注意,我们可能无法提供太多帮助,因为这是我们没有经验的操作。

我也意识到这已经不再有效了。

我早在 11 月初就实现了 @fefrei 的方法,当时确实有效。这可能是因为我当时是手动停止容器并执行 git pull,而不是使用 /admin/upgrade

1 个赞

4 条帖子已移至新主题:在重建时添加对原生离线页面的支持

我们最近也完全照做了,离线页面成功生效了。

刚才我们尝试通过 /admin/upgrade 进行在线升级,却发现 Discourse 根本没有进入离线状态!无论这是否近期有所改进,还是我们这次只是运气好,能看到在线升级过程完全没有出现明显的停机行为,这确实令人欣喜。

通过 Docker Manager(/admin/upgrade)执行升级时,Discourse 绝不应进入离线状态。这是否经常发生在您身上?如果是,我们应该就此创建一个 Support 主题进行讨论。