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


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

    恢复前需要的准备工作

    • 在新服务器上安装完整和全新的 Discourse,这个安装成功后不需要通过 UI 前台进行用户注册。
    • 备份和获得备份文件。
    • 确定你现在运行的 Discourse 版本是最新的版本,如果你的 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 上将备份文件下载到本地。

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

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

    传输备份文件到新服务器

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

    mkdir -p /var/discourse/shared/standalone/backups/default

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

    scp /path/to/backup/backup.tar.gz root@192.168.1.1:/var/discourse/shared/standalone/backups/default

    参数说明:

    • /path/to/backup/backup.tar.gz 这个是你老服务器上备份文件的路径和文件名
    • 192.168.1.1 这个是你老服务器的 IP 地址,你需要根据你的实际情况进行更改

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

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

    恢复备份

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

    cd /var/discourse
    

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

    ./launcher enter app
    

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

    discourse enable_restore
    

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

    discourse restore sitename-2019-02-03-042252-v20190130013015.tar.gz
    

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

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

    重构 Discourse

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

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

    cd /var/discourse
    ./launcher rebuild app
    

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

    踩过的坑

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

    S3 混合存储无法恢复数据

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

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

    文件权限

    文件权限问题。

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

    无法发送邮件

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

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

    CA 无法签名

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

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

    https://www.ossez.com/t/discourse/553

  • 相关阅读:
    从零搭建Spring Boot脚手架(6):整合Redis作为缓存
    MyBatis初级实战之三:springboot集成druid
    table布局
    【JVM之内存与垃圾回收篇】直接内存
    【JVM之内存与垃圾回收篇】对象实例化内存布局与访问定位
    【JUnit测试】总结
    【JVM之内存与垃圾回收篇】方法区
    【JVM之内存与垃圾回收篇】堆
    【JVM之内存与垃圾回收篇】本地方法栈
    【JVM之内存与垃圾回收篇】本地方法接口
  • 原文地址:https://www.cnblogs.com/huyuchengus/p/13775384.html
Copyright © 2020-2023  润新知