Этот учебник покажет вам, как использовать импортер 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 ВАШ_ПАРОЛЬ.
Если по какой-то причине вы не нашли файл БД в ожидаемом пути, вы можете сгенерировать его вручную, выполнив команду
SAVEвнутри Redis CLI.
Теперь вам нужно скопировать вложения форума:
$ cd /path_to_nodebb_root_folder/
$ tar -czf ./uploads.tar.gz ./public/uploads
Теперь, когда у вас есть БД и ресурсы форума, вам нужно скопировать их на сервер Discourse.
Импорт базы данных
Если вы следовали инструкциям по установке Discourse, у вас должен быть установлен сервер Redis на сервере Discourse:
$ 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 DB на вашем сервере. Импортеру необходимо подключиться к серверу 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 и перенесет все данные в PostgreSQL базу данных Discourse.
После завершения работы импортера запустите платформу Discourse:
$ bundle exec rails server
Запустите Sidekiq для обработки перенесенных данных:
$ bundle exec sidekiq
Вы можете отслеживать прогресс по адресу http://localhost:3000/sidekiq/queues.
Сделайте резервную копию Discourse и загрузите её на ваш производственный сервер Discourse, следуя этому руководству.
Таким образом, вы успешно выполнили полную миграцию с NodeBB на Discourse ![]()
Если у вас возникнут вопросы, я с радостью помогу ![]()