本教程将向您展示如何使用 NodeBB 导入器 将 NodeBB 论坛迁移到 Discourse 平台。如果您的 NodeBB 论坛使用 MongoDB 作为后端,请遵循 本教程。不用担心,这是一个简单的过程。让我们开始吧。
计划
- 准备开发环境。
- 从生产环境导出数据库。
- 将生产数据库导入 Discourse 实例。
- 运行导入器脚本。
可以迁移哪些数据?
- 群组
- 分类
- 根分类 => 根分类
- 子分类及子子分类 => 子分类
- 附件
- 主题与帖子
- 置顶主题 => 置顶主题
- 主题浏览量
- 所有样式(包括提及、表情符号和附件)都将顺利迁移。
- 用户(包含以下属性)
- 头像(个人资料图片)
- 个人资料背景
- 封禁状态
- 姓名
- 用户名
- 电子邮件
- 个人简介
- 管理员状态
- 网站
- 所在地
- 加入时间状态
- 群组
准备本地开发环境
按照以下指南之一设置您的开发环境:
从现在开始,我将此环境称为 Discourse 服务器。
如果您在设置 Discourse 时遇到任何问题,请使用 本指南。
导出生产数据库转储(来自 NodeBB 服务器):
关闭您的论坛。这是 NodeBB 推荐的步骤。
$ cd /path_to_nodebb
$ ./nodebb stop
您还应该关闭 Redis:
$ sudo service redis-server stop
$ sudo service redis-server status
# redis-server is not running
您的论坛数据库全部在一个文件中。该文件由 Redis 定期自动生成。通常该文件位于 /var/lib/redis/dump.rdb。此外,您也可以从 Redis CLI 获取路径:
$ redis-cli
127.0.0.1:6379> config get dir
# "/var/lib/redis"
127.0.0.1:6379> exit
$ ls -la /var/lib/redis
# -rw-rw-r-- 1 redis redis 2664346 Aug 4 16:24 dump.rdb
如果您的 Redis 服务器需要密码,请使用
AUTH YOUR_PASSWORD。
如果由于某种原因您未在预期路径中找到数据库文件,可以通过在 Redis CLI 中运行
SAVE命令手动生成它。
现在您需要复制论坛附件:
$ cd /path_to_nodebb_root_folder/
$ tar -czf ./uploads.tar.gz ./public/uploads
现在您已拥有数据库和论坛资源,需要将它们复制到 Discourse 服务器。
导入数据库
如果您按照安装 Discourse 的说明操作,Discourse 服务器 上应该已安装 Redis 服务器:
$ redis-server -v
# Redis server v=5.0.2...
现在您需要停止 Redis 服务器(重要)。
基于 Linux 的系统:
$ sudo service redis-server stop
$ sudo service redis-server status
# redis-server is not running
Mac OS:
$ brew services stop redis
$ brew services list
# redis stopped
您现在需要做的将论坛数据库复制到本地 Redis 数据库路径。导入器需要连接到 Redis 服务器并将 NodeBB 数据库迁移到 Discourse 数据库。此步骤假设您的 Redis 数据库中没有任何重要数据,否则您应该先进行备份。
$ redis-cli
127.0.0.1:6379> config get dir
# "/var/lib/redis"
检查是否有任何文件,并记录当前用户以及 dump.rdb 的权限:
$ ls -la /var/lib/redis
复制 NodeBB 数据库(如果已有则覆盖):
$ cp dump.rdb /var/lib/redis
稍后尝试连接 Redis 服务器时,您可能会收到 Fatal error loading the DB: Permission denied 错误,因此您应更改 dump.rdb 的权限:
# 将用户替换为您之前记录的相同用户。
$ sudo chown redis:redis /var/lib/redis/dump.rdb
$ sudo chmod 660 /var/lib/redis/dump.rdb
现在您需要将 uploads.tar.gz 解压到您选择的任意路径:
$ tar xvzf uploads.tar.gz
运行导入器脚本
现在我们的数据库已就位,可以运行导入器脚本了。在此之前,我们需要编辑一些配置。您可能只需要更改以下两行。
这是您的 NodeBB 上传文件夹的路径:
ATTACHMENT_DIR = '/absolute_path/uploads'
这是 Redis 中数据库的名称。默认为 0:
db: 0
在干净的 Discourse 上运行导入器:
$ cd ~/discourse
$ bundle exec rake db:drop db:create db:migrate
$ bundle exec ruby script/import_scripts/nodebb/nodebb.rb
导入器将连接到 Redis 服务器,并将所有内容迁移到 Discourse PostgreSQL 数据库。
导入器完成后,启动 Discourse 平台:
$ bundle exec rails server
启动 Sidekiq 以处理迁移的数据:
$ bundle exec sidekiq
您可以在 http://localhost:3000/sidekiq/queues 监控进度。
按照本 教程 执行 Discourse 备份并将其上传到您的 Discourse 生产服务器。
至此,您应该已成功完成从 NodeBB 到 Discourse 的完整迁移 ![]()
如果您有任何问题,我很乐意提供帮助 ![]()