天天看点

Discourse 如何使用命令行方式进行恢复

本文主要用于说明如何从命令行工具的方式中恢复 Discourse,以及我们在备份和恢复的过程中遇到的坑和解决办法。

恢复前需要的准备工作

在新服务器上安装完整和全新的 Discourse,这个安装成功后不需要通过 UI 前台进行用户注册。

备份和获得备份文件。

确定你现在运行的 Discourse 版本是最新的版本,如果你的 Discourse 不是最新的版本,你需要先进行升级。

因为 Discourse 必须使用域名公共网络访问才能完整安装。如果你的站点比较大的话,你需要考虑这个问题。你需要考虑修改 DNS 的配置,让你的 Discourse 能够通过公共网络访问,或者你的域名将会在访问的时候出现你 Discourse 正在安装的提示。

这部分的操作按照完整的 Discourse 安装方式进行就可以了,你不需要进行任何操作,你也不需要在安装成功后注册管理员账号。

请注意安装次数,如果你是使用 Let’s Encrypt 的签名的话,你的 CA 签名是有次数限制的。最多可以重新安装 5 次,否则你需要再等 5 天。

除非使用自己的签名。

这个问题的讨论,请参考下面的链接:​​Discourse 如何不使用 Let's Encrypt 而使用 CA 签名的密钥进行安装​​

Discourse 可以使用混合附件存储方式。这个方式的定义是部分附件存储在本地,部分附件存储在云上,最常用的服务就是 AWS 的 S3 服务。

因为这种方式,会导致在恢复的时候,可能出现数据错误,绝大部分情况就是因为有部分附件在本地,有部分附件在 S3 ,但是你的 Discourse 已经全部使用 S3 了,这会导致在恢复的时候提示 S3 校验失败的情况。

在进行备份恢复之前,你需要将你的 Discourse 再备份一次。通常可以直接点后台的备份按钮。

如果你的备份是上传到 S3 的话,你可以直接到 AWS 上将备份文件下载到本地。

如果你是混合存储文件的话,在这里 不要备份附件 否则你没有办法恢复你的备份文件。

​​

Discourse 如何使用命令行方式进行恢复

如上图我们的内容,找到最新的备份文件,然后下载。

SSH 到你需要恢复的服务器上,如果你的服务器上没有下面的目录的话,你需要使用下面的命令创建一个:

​<code>​mkdir -p /var/discourse/shared/standalone/backups/default​</code>​

上传你下载的备份文件到这个目录中。如果你是在服务器直接进行数据传输的话,你可以使用下面的命令,下面命令是帮助你 SSH 到老服务器,然后将老服务器上的备份传输到新服务器上。

​<code>​scp /path/to/backup/backup.tar.gz [email protected]:/var/discourse/shared/standalone/backups/default​</code>​

参数说明:

/path/to/backup/backup.tar.gz 这个是你老服务器上备份文件的路径和文件名

192.168.1.1 这个是你老服务器的 IP 地址,你需要根据你的实际情况进行更改

你也可以使用 FTP 将备份上传到指定的目录。

我们最终的目的就是需要将你的备份文件存储到路径 ​<code>​/var/discourse/shared/standalone/backups/default​</code>​ 中。

依次执行下面的命令,首先你需要进入你新服务器的 Discourse 安装目录中:

然后通过下面的命令,进入到 Discourse 已经运行的容器,下面的操作其实是针对 Discourse 容器的操作。

针对 Discourse 的实例,你需要启用恢复功能,因为这个功能在安装后的默认情况下是禁用的。

恢复备份文件,直接执行下面的命令进行恢复就行。在这里只需要指定文件名就行,你不需要指定特定的路径,因为在 Discourse 容器中,默认会到上面你存储的文件路径中去找你的备份。

需要注意的是,上面的参数是示例参数,你需要根据你具体的情况替换掉备份文件的名字。

如果你在这里数据恢复成功的话,你将会在界面的下面看到 [Success] 的提示。否则将会提示失败,在失败的上面将会提示你失败的原因,你可以根据失败的原因重新调整参数后再重试,很多时候主要是附件的原因。

退出 Discourse 的容器,你可以使用命令 exit,然后你会界面中看到 bye 的容器退出提示。

然后在操作系统中的 Discourse 目录中,运行下面的命令,对 Discourse 进行重构。

如果你希望对你新的实例进行调整的话,比如说修改邮件地址,增加容器配置参数,修改 app.yml 文件,在重构之前,你可以对上面的内容进行后再进行重构。

下面是我们在备份恢复的时候踩过的坑和发现的问题:

在备份的时候,因为混合模式没有办法恢复数据。

需要修改备份方式不备份附件,只备份数据库。

文件权限问题。

需要使用 sudo 方式,让安装程序自行确定文件和文件夹的权限,避免权限不足。

备份恢复后无法发送邮件。

开放防火墙端口,同时需要将内部配置中的允许发送邮件的域名设置一个,然后再撤销。

新实例安装过多,导致无法 CA 签名。

注意恢复次数和必要的时候使用自己的域名签名。

继续阅读