Миграция форума PunBB на Discourse

В этом руководстве мы узнаем, как мигрировать форум PunBB на платформу :discourse: с помощью официального скрипта импорта. Давайте начнём :slight_smile:

Что можно мигрировать

  • Темы и ответы => темы и сообщения

  • Категории и форумы

    • Корневая категория => корневая категория
    • Дочерняя категория => подкатегория
    • Корневой форум => подкатегория
    • Дочерний форум => подкатегория
  • Пользователи

    • Имя пользователя
    • Имя
    • Электронная почта
    • Веб-сайт
    • Статус привилегий
    • Местоположение
    • Дата регистрации
    • Статус администратора
    • Статус блокировки

Наш план очень прост, нам нужно только:

  • Настроить локальную среду разработки (DEV ENV).

  • Экспортировать базу данных продакшн-сервера.

  • Импортировать базу данных продакшн-сервера в Discourse.

  • Запустить скрипт импорта PunBB.

Давайте начнём :slightly_smiling_face:

Настройка локальной среды разработки (DEV ENV)

Прежде всего, вам нужно следовать одному из следующих руководств для установки платформы Discourse. Если у вас возникнут проблемы, обратитесь к этому руководству.

Установите сервер базы данных MySQL;

MacOS:


$ brew install mysql@5.7
$ echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile

Проверьте статус службы, выполнив:

$ brew services list

Вы должны увидеть что-то вроде:

mysql@5.7 started

В противном случае выполните следующую команду и снова проверьте статус:

$ brew services start mysql@5.7

Ubuntu 18.04:

Выполните следующие команды для установки сервера MySQL:

$ sudo apt update
$ sudo apt install mysql-server -y

После завершения установки MySQL проверьте её статус:

$ systemctl status mysql.service

Если служба не запущена, выполните следующую команду:

$ sudo systemctl start mysql

Для Windows вы можете следовать руководству по установке

Теперь наша среда разработки готова. Мы будем называть её: сервер Discourse.

Экспорт базы данных продакшн-сервера

Экспортируйте/сделайте резервную копию базы данных продакшн-сервера (с продакшн-сервера PunBB), выполнив:

$ mysqldump -u USER_NAME -p DATABASE_NAME > punbb.sql
  • Скопируйте этот дамп базы данных на сервер Discourse.

:bulb: Вы можете использовать scp или rsync для копирования базы данных.

Импорт базы данных продакшн-сервера в Discourse

На сервере Discourse создайте новую пустую базу данных. Для этого нам нужно использовать CLI MySQL:

$ mysql -u root

Если у вашего пользователя БД есть пароль, выполните следующую команду, а затем введите пароль:

mysql -u root -p
mysql> CREATE DATABASE punbb;

Убедитесь, что база данных успешно создана, выполнив:

mysql> SHOW DATABASES;

Вы должны увидеть что-то вроде:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| punbb              |
+--------------------+

Наш следующий шаг — импортировать базу данных продакшн-сервера в эту новую пустую базу данных.

$ mysql -u root punbb < punbb.sql

Запуск скрипта импорта PunBB

Сначала установим зависимости импортера. На сервере Discourse:

$ cd ~/discourse
$ echo "gem 'mysql2', require: false" >> Gemfile
$ bundle install

Далее нужно настроить скрипт для корректной работы. Откройте script/import_scripts/punbb.rb в любом редакторе по вашему выбору и измените. По сути, всё, что вам нужно сделать, — это предоставить информацию о базе данных MySQL:

PUNBB_DB = "DATABASE_NAME"
.
.
.
@client = Mysql2::Client.new(
  host: "localhost",
  username: "MYSQL_USERNAME",
  password: "MYSQL_PASSWORD",
  database: PUNBB_DB
)

Запустите импортер с чистой версией Discourse:

$ bundle exec rails db:drop
$ bundle exec rails db:create
$ bundle exec rails db:migrate
$ bundle exec ruby script/import_scripts/punbb.rb

Импортер подключится к базе данных MySQL и мигрирует ваш форум PunBB в базу данных Discourse.

После завершения работы импортера запустите сервер Discourse, выполнив:

$ bundle exec rails server

Далее запустите процессор фоновых задач для обработки мигрированных данных:

$ bundle exec sidekiq

:bulb: Вы можете отслеживать прогресс sidekiq по этому URL: http://localhost:3000/sidekiq/queues.

Далее подготовьте ваш продакшн-сервер Discourse, следуя этому руководству.

Сделайте резервную копию локальной платформы сервера Discourse и загрузите её на ваш продакшн-сервер Discourse, следуя этому руководству.

Если у вас возникнут вопросы по процессу, я с радостью помогу.

Удачной миграции :grinning:

7 лайков