Migrate a FluxBB forum to Discourse

I created a migration script to import FluxBB database into Discourse. Now I’m going to explain how to do the import process in a step-by-step tutorial.

I tested this migration script with FluxBB v1.5.10 (which is current version now)

What data can be imported?

  • Users (including bios/signatures)
  • Groups
  • Categories
    :warning: Permissions won’t be imported and all categories will be public. Right permissions must be set manually after the import.
  • Topics (including sticky/pinned status)
  • Posts
  • Suspended users

Before starting the migration, set a development environment on your machine (or inside a virtual machine) . See the OS X or Ubuntu installation guide for development.

Discourse requires Ruby 3.4+. To check your Ruby version enter the command below

ruby -v

Mysql

Now we need mysql2 gem for ruby to connect with our old FluxBB database. Run the below commands to install libmysqlclient-dev dependency & mysql2 gem.

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install libmysqlclient-dev
gem install mysql2

(optional) Importing MySQL dump into localhost

To install MySQL client and import mysql dump file (.sql) to your development machine follow the instructions below

sudo apt-get install mysql-server mysql-client

Create MySQL user, grants and table

mysql -u root -p mysql
mysql> CREATE USER 'fluxbb'@'localhost' IDENTIFIED BY 'fluxbb';
Query OK, 0 rows affected (0.00 sec)
.
mysql> CREATE DATABASE fluxbb;
Query OK, 1 row affected (0.01 sec)
.
mysql> GRANT ALL PRIVILEGES ON fluxbb.* TO 'fluxbb'@'localhost';
Query OK, 0 rows affected (0.00 sec)
.
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
.
mysql> exit

Import your FluxBB database dump file

mysql -u fluxbb -p fluxbb < myfluxbb.sql

BBCode to Markdown

The import script handles BBCode to Markdown conversion automatically. No additional gems are needed for this.


After installing mysql2, go to your Discourse installation path and open Gemfile to edit.

cd ~/discourse
sudo nano Gemfile

Now insert the line below at the end of the file to add the mysql2 gem to Discourse.

gem 'mysql2'

Before running the import script, paste these lines one by one into your shell. (use arrow keys to edit the values)

export FLUXBB_HOST="localhost"
export FLUXBB_DB="fluxbb"
export FLUXBB_USER="root"
export FLUXBB_PW=""
export FLUXBB_PREFIX=""

Now it’s time to run the import script. Run the below command to start migration.

RAILS_ENV=production bundle exec ruby script/import_scripts/fluxbb.rb

Wait until the import is done. You can restart it if it slows down to a crawl.

After all congratulations! Your database successfully migrated from FluxBB to Discourse :thumbsup:

Start your Discourse instance:

bundle exec rails server

Start Sidekiq and let it do its work:

bundle exec sidekiq -q critical,4 -q default,2 -q low

Depending on your forum size this can take a long time. You can monitor the progress at http://localhost:3000/sidekiq

Now take a backup from admin page /admin/backups and import it in your live Discourse website.

Last edited by @JammyDodger 2024-05-27T14:54:39Z

Check documentPerform check on document:
12 лайков
discourse@app-deb10-app:/var/www/discourse$ FLUXBB_HOST="localhost" FLUXBB_DB="flux" FLUXBB_USER="fluxbb" FLUXBB_PW="fluxbb" RAILS_ENV=production bundle exec ruby script/import_scripts/fluxbb.rb 
Загрузка существующих групп...
Загрузка существующих пользователей...
Загрузка существующих категорий...
Загрузка существующих сообщений...
Загрузка существующих тем...

создание групп
Traceback (most recent call last):
	9: from script/import_scripts/fluxbb.rb:262:in `<main>'
	8: from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
	7: from script/import_scripts/fluxbb.rb:40:in `execute'
	6: from script/import_scripts/fluxbb.rb:50:in `import_groups'
	5: from script/import_scripts/fluxbb.rb:258:in `mysql_query'
	4: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.2/lib/patches/db/mysql2/alias_method.rb:22:in `query'
	3: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `query'
	2: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `handle_interrupt'
	1: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `block in query'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `_query': Таблица 'flux.groups' не существует (Mysql2::Error)

Похоже, что в базе данных MySQL отсутствуют таблицы. Сначала рекомендую войти в базу данных MySQL и проверить, какие таблицы там есть. Возможно, вам потребуется изменить скрипт, чтобы он заработал.

2 лайка

Вот, все по шагам.

Сломан ли этот импортер в современных версиях Discourse?

Я запускаю экземпляр Discourse, установленный с помощью discourse/docs/INSTALL.md at main · discourse/discourse · GitHub (так называемый «единственный официально поддерживаемый способ установки Discourse»).

Я настроил базу данных MariaDB внутри контейнера Docker, импортировал туда дамп форума и так далее, поскольку любой другой подход очень сложен в настройке. Все мои действия выполнялись в оболочке cd /var/discourse/ && ./launcher enter app.

Выполнение команды bundle exec ruby script/import_scripts/fluxbb.rb bbcode-to-md завершается ошибкой:

/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.4.3/lib/active_record/connection_adapters/postgresql_adapter.rb:81:in `rescue in new_client
': Мы не смогли найти вашу базу данных: discourse. Она должна быть указана в файле конфигурации базы данных, расположенном в config/database.yml. (ActiveRecord::NoDatabaseError)

Выполнение команды sudo -u postgres psql discourse в той же оболочке успешно входит в базу данных «discourse».

Извините за негативное предположение, всё было просто:

Скрипт предназначен для запуска от имени пользователя discourse, а не от root в контейнере, как я сделал.

За исключением того, что некоторые BB-коды не были преобразованы, всё сработало отлично. Спасибо!

Tests, fixes, and a small (optional) feature to allow a FluxBB config to work by harry-wood · Pull Request #6 · nlalonde/ruby-bbcode-to-md · GitHub выглядит как хороший PR с исправлениями для конвертации BB-кодов.

Внимание:

Этот импортер игнорирует настройки разрешений.

Все ваши форумы станут общедоступными.

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

1 лайк

После импорта вы можете вручную изменить права доступа для категорий. Скорее всего, исправление их вручную не займет много времени.

Добавление поддержки импорта прав доступа, вероятно, потребует гораздо больше усилий, чем их ручная настройка.

1 лайк

Спасибо, что сообщили об этом. Я добавил предупреждение об этом в руководство.

2 лайка