原文首发CEPD论坛:

https://bbs.imbhj.com/t/topic/137

首先,在迁移前,请务必保证新旧服务器上的版本一致,最好都是最新的,包括插件和组件。

注意!本教程内容部分路径和容器名称是我自定义过的,可能和默认安装不同,但步骤绝对是相同的,请仔细甄别!

旧服务器更新

进入到 discourse_docker 目录,先备份一下 containers/discourse-app.yml 文件,接着执行:

## 更新git库
git pull
## 重构容器
./launcher rebuild discourse-app

启动起来之后进入 https://discourse.example.com/admin/upgrade 页面看一下是否是最新。

旧服务器备份

进入到 discourse_docker 目录,执行一次最新备份:

## 进入容器内部
./launcher enter discourse-app
## 执行一次备份
discourse backup
## 退出容器
exit

执行备份命令后会等待一段时间,出现 [SUCCESS] 字样代表备份成功,备份的文件就在容器外../standalone/backups/default 中,文件名应该为 <sitename>-2024-11-06-092317-v20241022022326.tar.gz 这种格式,需要注意的是,不能更改文件名和文件格式!

容器内部的备份文件路径应该为:

/var/www/discourse/public/backups/default/
## 或者在容器外使用下列命令拷贝到home目录下:
docker cp discourse-app:/var/www/discourse/public/backups/default/<sitename>-2024-11-06-092317-v20241022022326.tar.gz /home/

将这个备份文件和 discourse-app.yml 两个文件一起下载传输到新服务器,旧服务器上的操作就已经完成了。

新服务器恢复备份

首先在自己要安装的目录下执行:

## 获取最新discourse构建仓库
git clone https://github.com/discourse/discourse_docker.git
## 进入仓库根目录
cd ./discourse_docker/
## 更改配置文件夹权限
chmod 700 containers

然后将上传到新服务器的 discourse-app.yml 文件复制到 ./containers/ 目录下,执行:

## 更改复制过去的配置文件权限
chmod o-rwx ./containers/discourse-app.yml
## 构建并启动容器
./launcher rebuild discourse-app

注意新服务器上的文件路径与 discourse-app.yml 文件中的路径对应,yml文件中的路径为绝对路径

等待 discourse-app 构建和启动成功之后,此时新容器什么内容都没有,是无法访问的,下面来恢复备份,进入容器内部,创建备份文件的路径:

## 进入容器内部
./launcher enter discourse-app
## 创建备份文件的路径
mkdir -p var/www/discourse/public/backups/default
## 退出容器
exit

容器外将上传到新服务器的备份文件拷贝到容器内的备份路径:

docker cp /home/<sitename>-2024-11-06-092317-v20241022022326.tar.gz discourse-app:/var/www/discourse/public/backups/default/

然后进入容器内部进行恢复备份:

## 进入容器
./launcher enter discourse-app
## 开启备份恢复功能
discourse enable_restore
## 执行恢复备份,这里不需要加路径
discourse restore <sitename>-2024-11-06-092317-v20241022022326.tar.gz
## 退出容器
exit

在恢复备份的过程中,看到 [Success] 的提示即为恢复备份成功,如果恢复备份失败,参考:

Discourse论坛如何从旧服务器迁移到新服务器 - 社区Wiki / 社区相关 - CEPD@BBS

Move your Discourse Instance to a Different Server - Discourse.Meta

恢复备份成功之后退出容器,重新执行一次构建,清除缓存内容:

./launcher rebuild discourse-app

重启完成后,就可以配置反向代理、域名和https了,配置好就可以进行访问了,当用管理员登录新站点的时候会发现顶部有一个提示,内容是:

## 非管理员用户无法向外发送电子邮件。
## 或者
## Outgoing email has been disabled for non-staff users. 

这是为了防止你恢复备份后某些使用了缩略图的帖子需要重新发布,而重新发布会给参与帖子的所有人发送邮件,避免短时间内要大量发送邮件的情况,论坛在恢复备份之后关闭了邮件通知,

可以进入后台管理页面,在所有设置里搜索 disable emails 即可看到:

f3cbd1d3722f4c.png

设置为 NO 即可消除横幅提示和恢复邮件发送功能,不过在此之前最好要先检查一下自己论坛有无未恢复成功的一些帖子什么的。

参考链接