Migrer un forum FluxBB vers Discourse

J’ai créé un script de migration ici pour importer une base de données FluxBB dans Discourse. Je vais maintenant expliquer comment procéder à l’importation étape par étape dans un tutoriel.

J’ai testé ce script de migration avec FluxBB v1.5.10 (qui est la version actuelle).

Quelles données peuvent être importées ?

  • Utilisateurs (y compris les bios et signatures)
  • Groupes
  • Catégories
    :warning: Les permissions ne seront pas importées et toutes les catégories seront publiques. Les permissions appropriées doivent être définies manuellement après l’importation.
  • Sujets (y compris le statut épinglé/fixé)
  • Messages
  • Utilisateurs suspendus

Avant de commencer la migration, configurez un environnement de développement sur votre machine (ou dans une machine virtuelle). Consultez le guide d’installation pour le développement sur OS X ou Ubuntu.

Discourse nécessite Ruby 3.4+. Pour vérifier votre version de Ruby, exécutez la commande suivante :

ruby -v

MySQL

Nous avons maintenant besoin du gem mysql2 pour Ruby afin de nous connecter à notre ancienne base de données FluxBB. Exécutez les commandes ci-dessous pour installer la dépendance libmysqlclient-dev et le gem mysql2.

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

(optionnel) Importation d’un dump MySQL dans localhost

Pour installer le client MySQL et importer un fichier de dump MySQL (.sql) sur votre machine de développement, suivez les instructions ci-dessous :

sudo apt-get install mysql-server mysql-client

Créez un utilisateur MySQL, des privilèges et une 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

Importez votre fichier de dump de base de données FluxBB :

mysql -u fluxbb -p fluxbb < myfluxbb.sql

BBCode vers Markdown

Le script d’importation gère automatiquement la conversion du BBCode vers Markdown. Aucun gem supplémentaire n’est nécessaire pour cela.


Après avoir installé mysql2, accédez au chemin d’installation de Discourse et ouvrez Gemfile pour le modifier.

cd ~/discourse
sudo nano Gemfile

Ajoutez maintenant la ligne suivante à la fin du fichier pour ajouter le gem mysql2 à Discourse.

gem 'mysql2'

Avant d’exécuter le script d’importation, collez ces lignes une par une dans votre terminal (utilisez les touches fléchées pour modifier les valeurs).

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

Il est maintenant temps d’exécuter le script d’importation. Lancez la commande ci-dessous pour démarrer la migration.

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

Attendez que l’importation soit terminée. Vous pouvez le redémarrer si le processus ralentit considérablement.

Une fois tout terminé, félicitations ! Votre base de données a été migrée avec succès de FluxBB vers Discourse :thumbsup:

Démarrez votre instance Discourse :

bundle exec rails server

Démarrez Sidekiq et laissez-le faire son travail :

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

Selon la taille de votre forum, cela peut prendre beaucoup de temps. Vous pouvez surveiller la progression à l’adresse http://localhost:3000/sidekiq.

Faites maintenant une sauvegarde depuis la page d’administration /admin/backups et importez-la sur votre site Discourse en production.

12 « J'aime »
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 
Chargement des groupes existants...
Chargement des utilisateurs existants...
Chargement des catégories existantes...
Chargement des messages existants...
Chargement des sujets existants...

création des groupes
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': La table 'flux.groups' n'existe pas (Mysql2::Error)

Il semble que les tables n’existent pas dans la base de données MySQL. Je vous recommande de vous connecter d’abord à la base MySQL pour vérifier quelles tables sont présentes. Vous devrez peut-être modifier le script pour qu’il fonctionne.

2 « J'aime »

Voici, étape par étape.

Cet importateur est-il cassé dans les versions modernes de Discourse ?

J’exécute une instance Discourse installée en utilisant le discourse/docs/INSTALL.md at main · discourse/discourse · GitHub (alias « Les seules installations officiellement prises en charge de Discourse »).

J’ai configuré une base de données MariaDB à l’intérieur du conteneur Docker, j’y ai importé mon dump de forum, etc., car toute autre approche est très difficile à configurer. Tout ce que j’ai fait s’est déroulé dans le shell cd /var/discourse/ &amp;&amp; ./launcher enter app.

L’exécution de bundle exec ruby script/import_scripts/fluxbb.rb bbcode-to-md échoue avec :

/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' : We could not find your database: discourse. Which can be found in the database configuration file located at config/database.yml. (ActiveRecord::NoDatabaseError)

L’exécution de sudo -u postgres psql discourse dans le même shell me connecte à la base de données “discourse” sans problème.

Désolé pour cette supposition négative, c’était simple :

Le script est censé être exécuté avec l’utilisateur discourse, et non en tant que root dans le conteneur, ce que j’ai fait.

À part quelques codes BB qui n’ont pas été convertis, cela semble avoir bien fonctionné. Merci !

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 semble être une bonne PR avec des corrections pour la conversion du code BB.

Avertissement important :

Les autorisations sont ignorées par cet importateur.

Tous vos forums seront publiés comme publics.

Si vous aviez des forums qui n’étaient lisibles que par les modérateurs, ils seront lisibles par n’importe qui après avoir utilisé cet importateur.

1 « J'aime »

Vous pouvez modifier les autorisations des catégories manuellement après l’importation. Ce ne serait probablement pas un travail très important de les corriger manuellement.

L’ajout de la prise en charge de l’importation des autorisations est probablement un travail plus important que de le faire manuellement.

1 « J'aime »

Merci d’avoir signalé cela, j’ai ajouté un avertissement à ce sujet dans le guide.

2 « J'aime »