如何在升级失败后恢复我的无法通过 Web 访问的 Discourse 安装

我刚刚尝试通过网页更新将 我的 Discourse 安装 升级到最新的测试版(2.4.0 beta 11),但现在无法访问(您可以亲自尝试,会返回 HTTP 500 错误)。

背景

我安装的版本仍然是 2.4.0 beta 6,我试图升级到 2.4.0 beta 11。
我认为我的安装相当标准,不记得是否有任何自定义插件(现在也无法查证),但最多只有 1-2 个。我保留了大多数默认的 Discourse 设置。

我做了什么

我点击了更新通知邮件中的一键浏览器更新链接,将我带到了 /admin/upgrade

根据网页更新器,我必须首先进行一些 docker manager 更新,然后才能更新实际的 Discourse 版本,所以我选择了那个选项。一些操作运行了大约一半进度后,在网页日志输出屏幕上方出现了一条消息,提示升级过程中出现问题,我应该检查日志。我浏览了日志,但没有直接发现任何明显的问题。遗憾的是,我没有保存日志,而是简单地重新加载了页面,希望也许可以重试安装,并假设失败导致升级已回滚。

有趣的是,admin/upgrade/ 页面随后告诉我,docker_manager 已是最新,不再需要升级,所以我(很可能是错误地)认为升级确实成功了,错误消息只是一个 bug。我还检查了我的论坛是否仍在运行,它确实在运行,似乎没有任何问题。

现在我可以升级 Discourse 安装本身了(之前是灰色的),所以我这样做了。同样,日志被记录到日志输出中,我没有太在意,进度条大约填充了一半后,日志输出上方显示了类似的错误消息,提示某处出了问题。

我想,我会像之前一样,重新加载页面(再次,遗憾的是我没有保存日志)。正如预期的那样,Discourse 现在被列为“已是最新”。

这是我在 admin/upgrade/ 下目前看到的内容:

但实际的论坛不再工作,仅返回 500 错误。

仍然有效的部分

  • /admin/upgrade/ 仍然有效,并显示 Discourse 已是最新。
  • 我还可以点击“进程”选项卡并获取运行中的进程列表。

但即使是“备份”选项卡也已经返回 500 错误,/admin 也是如此。除了 /admin/upgrade/ 下的两个选项卡外,我还没有找到论坛中任何有效的部分。

如何恢复?

我不知道出了什么问题,也不知道该从哪里开始。我甚至不知道如何在没有网页界面的情况下访问日志以查明错误。Discourse 安装托管在 Digital Ocean 上,我可以 ssh 进入机器并可能进入容器,但我不知道在哪里查找日志。

如果能指点我哪里查找日志,将不胜感激。

目前,我最好的想法是恢复到备份,并丢失上次备份之后发布的所有内容(幸运的是,流量不大,所以丢失一天的内容是可以接受的)。

我目前的计划和我所缺少的

我已经设置 Digital Ocean 从 Droplet 进行每周备份,我相信我的 Discourse 安装已设置为每日备份。我从未配置过 S3,所以这些备份应该仍然保存在本地。Digital Ocean Droplet 备份是 5 天前的,但我宁愿不丢失最近几天的内容。

我的大致计划基本上是通过备份回退到已知的正常状态,具体步骤如下:

  1. 下载今天/昨天的 Discourse 备份。
  2. 通过 Digital Ocean 将整个 Droplet 回滚到 5 天前的最后一个备份,这样我就有了一个正常工作的 Discourse 安装。
  3. 导入下载的备份以恢复内容(减去上次 Discourse 备份之后发生的内容)

我可以通过 DO 执行回滚(步骤 2),并在到达那一步时弄清楚如何导入现有备份(步骤 3),但我不知道如何在没有网页界面且 /admin/backups/ 返回 HTTP 500 错误的情况下获取备份。

我必须在哪里查找以通过 SSH 找到备份?在通过 DO 回滚到旧的 Droplet 备份后,我需要做什么才能恢复它?

在论坛中搜索时,我只找到了关于将备份托管在 S3 上的主题,但没有提到当它们本地存储时 在哪里

1 个赞

这个主题 的帮助下,我发现备份文件存储在我的系统中的 /var/discourse/shared/standalone/backups/default 目录下。

我目前的假设是,我可以简单地从中复制一个 .tar.gz 文件,回滚 Droplet,然后将备份文件放回同一位置,这样 Discourse 就能找到它,并允许我通过网页界面将其恢复。

cd /var/discourse
./launcher rebuild app
7 个赞

非常感谢,成功了!这比走一遍备份和恢复的步骤简单多了!:slight_smile:

3 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.