Как вам известно, NodeBB поддерживает две СУБД: Redis и MongoDB. Скрипт импорта Discourse поддерживает обе из них. В этом руководстве мы разберём, как мигрировать NodeBB с MongoDB в качестве базы данных. Мы будем использовать импортер NodeBB с адаптером mongo. Если ваш форум NodeBB использует Redis в качестве базы данных, пожалуйста, следуйте этому руководству, которое демонстрирует работу адаптера redis.
План действий
- Подготовка среды разработки.
- Экспорт базы данных из рабочей среды.
- Импорт рабочей БД в экземпляр Discourse.
- Запуск скрипта импорта.
Что можно мигрировать
- Группы
- Вложения
- Категории
- Корневая категория => Корневая категория
- Подкатегория и под-подкатегория => Подкатегория
- Темы и сообщения
- Закреплённая тема => Закреплённая тема
- Закрытая тема => Закрытая тема
- Просмотры тем
- Пользователи, поставившие лайк (upvoted_by)
- Стили, упоминания, эмодзи и вложения.
- Пользователи (со следующими атрибутами)
- Фоновое изображение профиля
- Аватары
- Статус блокировки
- Имя пользователя
- Имя
- Электронная почта
- Администратор
- Биография
- Группа
- Веб-сайт
- Местоположение
- Дата регистрации
Подготовка локальной среды разработки
Как указано в нашем плане, сначала необходимо подготовить среду разработки. Следуйте одному из этих руководств для установки самого Discourse:
Пожалуйста, обратитесь к этому руководству, если у вас возникнут проблемы с настройкой сервера Discourse.
Затем установите сервер базы данных MongoDB.
Ubuntu-18-04:
$ wget -qO - https://www.mongodb.org/static/pgp/server-4.0.asc | sudo apt-key add -
$ echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org
$ sudo service mongod status
Для получения более подробной информации обратитесь к официальному руководству
Mac OS:
$ brew tap mongodb/brew
$ brew install mongodb-community@4.0
$ brew services start mongodb-community@4.0
$ brew services status mongodb-community@4.0
Для получения более подробной информации обратитесь к официальному руководству
Windows 10:
Загрузите установщик и установите MongoDB как службу Windows:
https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-4.0.12-signed.msi
Запустите cmd с правами администратора, чтобы проверить, работает ли сервер MongoDB корректно:
"C:\Program Files\MongoDB\Server\4.0\bin\mongo.exe"
Для получения более подробной информации обратитесь к официальному руководству.
Эта среда будет нашим сервером Discourse.
Экспорт дампа рабочей базы данных:
Остановите ваш форум NodeBB (рабочий сервер).
$ cd /path_to_nodebb
$ ./nodebb stop
Остановите вашу базу данных:
$ sudo service mongodb stop
Сделайте резервную копию вашей БД:
$ mongodump --out ~/my_backup_path/
Вывод предыдущей команды будет примерно следующим:
2019-08-16T15:17:09.845+0300 done dumping admin.system.users (1 document)
2019-08-16T15:17:09.846+0300 done dumping admin.system.version (2 documents)
2019-08-16T15:17:09.849+0300 done dumping nodebb.sessions (10 documents)
2019-08-16T15:17:09.850+0300 done dumping nodebb.socket.io (215 documents)
2019-08-16T15:17:09.854+0300 done dumping nodebb.objects (1488 documents)
Обратите внимание, что резервная копия — это на самом деле каталог, а не просто файл.
Вы можете проверить размер вашей БД, выполнив команду
use myDatabase, а затемdb.stats().dataSize;в CLImongo. Возвращаемое значение будет в байтах.
Сделайте резервную копию активов вашего форума:
$ cd /path_to_nodebb_root_directory/
$ tar -czf ./uploads.tar.gz ./public/uploads
После того как у вас есть резервная копия БД и активов форума, скопируйте их на сервер Discourse.
Импорт базы данных
Теперь, когда у нас есть база данных, мы можем импортировать её в наш локальный экземпляр MongoDB:
$ mongorestore ~/path_of_my_backup_directory/
Для получения дополнительных опций обратитесь к официальному руководству.
Далее вам нужно распаковать файл uploads.tar.gz, чтобы импортер мог загрузить активы:
$ tar xvzf uploads.tar.gz
Запуск скрипта импорта
Теперь, когда база данных и активы на месте, мы готовы запустить наш скрипт импорта. Перед этим нам нужно отредактировать скрипт импорта NodeBB, чтобы он соответствовал нашим потребностям.
Вот путь к папке загрузок вашего NodeBB:
ATTACHMENT_DIR = '/absolute_path/uploads'
Далее нам нужно указать импортеру использовать адаптер mongo вместо адаптера redis:
adapter = NodeBB::Mongo
@client = adapter.new('mongodb://127.0.0.1:27017/nodebb')
# adapter = NodeBB::Redis
# @client = adapter.new(
# host: "localhost",
# port: "6379",
# db: 14
# )
Запустите импортер с чистым Discourse и поддержкой gem mongo:
$ cd ~/discourse
$ echo "gem 'mongo'" >> Gemfile
$ bundle install
$ bundle exec rake db:drop db:create db:migrate
$ bundle exec ruby script/import_scripts/nodebb/nodebb.rb
Импортер подключится к экземпляру MongoDB и перенесёт всё в Discourse.
После завершения работы импортера запустите Discourse:
$ bundle exec rails server
Запустите Sidekiq для обработки перенесённых данных:
$ bundle exec sidekiq
Вы можете отслеживать прогресс по адресу http://localhost:3000/sidekiq/queues.
Сделайте резервную копию Discourse и загрузите её на ваш рабочий сервер Discourse, следуя этому руководству.
![]()
Если у вас возникнут вопросы по процессу, я с радостью помогу.
Удачной миграции ![]()

