twuky
(tuckie)
2020 年11 月 21 日 01:40
1
提前抱歉,如果这是错误的分类、版块等。
我通过 DigitalOcean VPS 运行 Discourse 站点已有大约 6 个月,期间几乎没有遇到问题。管理员页面显示我当前版本为 2.5.0.beta4。从昨晚开始,大部分站点内容要么无法加载,要么需要长得离谱的时间。例如,我可以导航到首页或 /admin 页面,但这些页面的实际内容(帖子、管理员图表或其他标签页)似乎都无法加载。我检查了系统状态,CPU 使用率一直徘徊在 2% 左右,流量和磁盘占用也极低。我的用户群大概只有 10 人左右,因为我还在尝试和设置阶段。考虑到这一点,这种行为显得非常奇怪。
根据 app.yml,我安装的插件只有 docker_manager 和 discourse-signatures。我是唯一的管理员用户,可以确认站点设置已经很久没有更改了。
我的第一个想法是重启机器,我也尝试过使用 git pull 和 ./launcher rebuild app 手动更新。我不确定在这个过程中应该关注哪些迹象来判断是否发生错误,但重建似乎完成了,之后可以再次访问站点,但版本仍然停留在 2.5.0.beta4。同样,尝试访问 /admin/update 页面最终也会超时。这一切都相当奇怪,因为站点可以说是“功能正常”的——我只是不太了解其运作方式,无法真正诊断问题。我找到了 discourse-doctor 工具并可以运行它,但我不确定它具体能完成什么——比如成功发送邮件等。
唯一可能表明存在问题的情况是,昨晚我收到了一封来自论坛的邮件,通知我对某条帖子有回复。当我导航到“最新帖子”分类时(在最终加载完成后),似乎没有任何迹象表明该帖子存在,因为“最新”中的主题概览并未显示该用户最后发布了这条帖子。我无法加载任何帖子的内容,因此无法确切检查。所以,数据库中可能存在某些错误或数据不一致?我不确定这种情况如何会蔓延导致整个站点的大部分内容无法加载,或者这是否值得深入追查。
对于这类问题,大家有什么建议的排查起点吗?如果您花时间阅读了,非常感谢!
嗨,tuckie!欢迎!
看来你做的都是对的。
如果你能更新的话,我强烈建议你更新一下——你的版本已经落后最新版很多了。但请务必先下载备份,以免丢失任何数据。
你能通过 SSH 登录并检查一下是否存储空间不足吗?
df -h
无论如何,检查存储空间是首要步骤。运行以下命令可以清除占用空间的陈旧容器:
./launcher cleanup app
然后,尝试将应用重新构建到最新版本。如果这次能正常运行且控制台没有显示任何错误,请告诉我们。
./launcher rebuild app
twuky
(tuckie)
2020 年11 月 21 日 02:48
3
感谢迅速响应。
当前挂载在 /dev/vda1 并挂载到 / 的驱动器显示约有 7.9 GB 可用空间。我对 Ubuntu 上其他分区的使用情况及其对运行的影响并不太了解(Discourse 是运行在容器中,对吧?),其余部分看起来是引导分区等。论坛目前总共只有约 30–40 篇帖子,处于测试阶段,因此在这方面似乎没有风险。清理操作已成功释放约 4 GB 额外空间。
至于应用重建,我实际上已经运行过几次了。在过程中我没有看到任何明显的警告信息,但同样地,完成后也没有看到任何表示“成功”的提示——我也不清楚应该留意哪些错误或警告行。它会先移除旧容器,然后运行 Docker 容器,之后便结束。我刚刚又运行了一次,但当我访问网站时,它仍然提示有可用更新,而且报告当前版本(仍是 2.5.0.beta4)和目标更新版本所需的时间极其漫长。
部分问题在于,由于响应时间过长或加载失败,我似乎也无法正常使用管理工具。例如,导航到“备份”选项卡时,加载动画会无限期地持续显示。出于好奇,我在备份选项卡上打开了浏览器控制台,发现浏览器尝试获取 JavaScript 文件,但所有文件都加载失败,且是一个接一个地缓慢失败。
如果能够通过 SSH 操作备份,那在这里将会非常有用。
pfaffman
(Jay Pfaffman)
2020 年11 月 21 日 12:55
4
这听起来像是网络问题。您使用的是 Cloudflare 吗?(如果是,请关闭橙色云朵图标)。
您可能在 DigitalOcean 遇到了“嘈杂的邻居”问题,因此可以为他们提交工单。
您提到已经进行了重建,但版本却没有变化,这说不通。我认为您需要执行 PostgreSQL 12 的升级。在进行重建时,您没有看到任何相关提示吗?
twuky
(tuckie)
2020 年11 月 21 日 20:24
5
我在 DigitalOcean 上运行,推测可能会出现类似情况,但我不确定这是否会导致如此持续或持久的这个问题。我认为更准确地描述该网站的问题应该是:页面通常能够加载模板或“外壳”,但除此之外,获取任何实际内容时似乎会一直无限加载。
至于重建或版本变更——确实可能发生此类错误,但我不清楚如何有效地解析它,也不太确定应该寻找什么。我刚才再次运行重建时,看到输出滚动中有一行类似“postgres installed”的信息。我不确定这是否是因为容器内部正在进行的操作,但例如 ./launcher rebuild app | grep 'postgres' 似乎无法过滤出任何内容,./launcher rebuild app > output.txt && grep 'postgres' output.txt 也不行。output.txt 中确实包含一些信息,但似乎并不完整?至少它的结尾与实际控制台输出不一致。
twuky
(tuckie)
2020 年12 月 1 日 18:58
6
你好,希望我的提问没有违反关于“顶贴”等规定,但我还是希望能得到一些帮助。上周某个时候,情况似乎变得更糟了?我无法确定具体是什么时候发生的,因为上周假期期间我并没有处理这个问题,但现在我完全无法连接到我的网站了。我仍然可以成功 ping 通 IP 地址,且该 IP 也能正确解析到对应的域名,因此看起来也不是域名服务器的问题。
现在使用 Firefox 访问该网站会出现以下提示:
https://aregames.art/ 站点发生了无法修复的网络协议违规。
由于检测到数据传输错误,无法显示您尝试查看的页面。
我无法从浏览器开发者工具中找到太多有用的信息,因为它似乎没有对 GET 请求返回任何响应。
自发现这个新问题以来,我已经:
多次运行了重建(rebuild)操作
将 Ubuntu 系统升级到 20.04
再次执行了重建
该网站实际上仅用于测试平台约一个月,我也愿意承认当初没有及时更新软件可能不是个好主意。如果需要,我也愿意从头重新安装 Discourse。当然,如果能找到一种方法在修复问题的同时保留站点配置、用户和帖子内容,那再好不过了。但我真正需要保留的只是在主题编辑器中编写的一些自定义 CSS。如果知道这些 CSS 存储在哪里,以便我可以将其复制到新环境中,那将非常有帮助。我(不负责任地)没有在本地保存任何更新后的版本。
另外,关于重建过程,我仍然不确定如何从中解析出任何潜在问题。据我所知,该过程会运行并顺利完成,无需任何输入,完成后最后几行输出涉及使用 YAML 中的配置启动 Docker 容器。我理解“重建完成”和“成功完成”之间存在区别,但我不确定应该关注哪些内容,或者在重建过程中出现问题时该如何诊断。
Falco
(Falco)
2020 年12 月 1 日 19:17
7
服务器是否正常运行?你能通过 SSH 连接吗?
如果可以,请重启服务器,然后重新构建 Discourse。
如果重启和重建后服务器仍无法运行,请将重建输出粘贴到这里,我们将协助你解决问题。
twuky
(tuckie)
2020 年12 月 1 日 19:51
8
是的,我可以正常通过 SSH 连接,这也是我每次运行重建操作的方式。不,重建后仍然无法访问。即使重建后,我注意到 ifconfig 显示 Docker 容器有一个与服务器 IP 不同的 IP 地址,但我无法从系统网页浏览器访问该地址。我不确定这是否是预期行为。./launcher rebuild app > output.txt 似乎只输出了部分实际控制台输出,但我也可以提供这部分内容。
https://paste.ubuntu.com/p/NRTDzF44zK/(简短输出文件)
https://paste.ubuntu.com/p/CZKjCb4qBV/(从终端复制的完整输出)
我看到 PostgreSQL 返回了几条错误消息,提示 ‘discourse’ 数据库已存在,这是否需要进一步调查?
Falco
(Falco)
2020 年12 月 1 日 20:39
9
twuky:
https://aregames.art/
你的 DNS 设置正确吗?
host aregames.art
aregames.art 的地址为 198.54.117.200
aregames.art 的地址为 198.54.117.199
aregames.art 的地址为 198.54.117.198
aregames.art 的地址为 198.54.117.197
为什么有这么多 IP 地址?你的服务器 IP 是什么?
twuky
(tuckie)
2020 年12 月 1 日 22:32
10
哇,这其实挺有启发性的——我竟然让域名过期了,而且巧合的是,就在我开始遇到这些问题的同一天发生的……我原本打算更换服务商,所以在那边关闭了自动付款,结果日期就悄悄过去了,我想。看来这些 IP 地址确实与某种域名停放服务有关。我刚刚已经续期了,所以也许它会重新应用正确的记录——不过我不确定这通常需要多久,目前主机仍然报告这些 IP。根据文档,我应该无法直接通过 IP 连接,所以我想我暂时无法测试这是否已经生效。感谢指出这一点。
话虽如此,我仍然对我最初遇到的问题有些困惑——我访问的是否是页面的缓存版本?由于名称服务器的问题,内容请求是否无法通过?有些内容,比如线程中的帖子,或者打开“最新帖子”时的帖子列表,最终还是会加载出来,只是需要很长时间。
更新:正如你上面提到的,host aregames.art 似乎再次解析到了正确的 IP 和邮件服务器。我通过 discourse-setup 脚本确认它接受 DNS 指向该 IP。看起来设置脚本也运行了重建。然而,访问该 URL 时却显示“找不到服务器”。直接通过 443 端口访问 IP 则返回 nginx 400 错误请求,这多少算是个进展。
再次编辑:我不得不清除浏览器缓存——在无痕模式下,网站完全正常加载。一切看起来又恢复正常了!我想……支付网站费用就是解决这个问题的方案。
Falco
(Falco)
2020 年12 月 2 日 00:14
11
是的,您使用的是缓存视图。
我们在 Discourse 2.6 中新增了一项功能,当处于该视图时,会为文档添加一个特定的 CSS 类,但目前我们尚未提供默认的 UI 元素。
您可以在 Offline Indicator 了解更多相关信息。