Migrer un forum MyBB vers Discourse

Dans ce tutoriel, nous apprendrons à migrer un forum MyBB vers la plateforme :discourse: en utilisant le script d’importation officiel MyBB Importer.

Ce qui peut être migré

  • Catégories
    • Catégorie racine => catégorie racine
    • Catégorie enfant => sous-catégorie
    • Forum racine => sous-catégorie
    • Forum enfant => sous-catégorie
  • Sujets et réponses => sujets et messages
  • Utilisateurs
    • Nom d’utilisateur
    • Adresse e-mail
    • Statut de privilège
    • Statut d’inscription
  • Redirections

Notre plan est très simple :

  • Configurer l’environnement de développement (DEV) local.
  • Exporter la base de données de production.
  • Importer la base de données de production dans Discourse.
  • Exécuter le script d’importation MyBB.

Commençons :slightly_smiling_face:

Configurer l’environnement de développement local

Tout d’abord, vous devez suivre l’un de ces guides pour installer la plateforme Discourse elle-même. Consultez ce guide si vous rencontrez des problèmes.

Installez le serveur de base de données MySQL ;

MacOS :

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

Vérifiez l’état du service :

$ brew services list

Vous devriez voir quelque chose comme ceci :

mysql@5.7         started

Sinon, exécutez la commande suivante et réessayez :

$ brew services start mysql@5.7

Ubuntu 18.04 :

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

Une fois l’installation de MySQL terminée, vérifiez son état :

$ systemctl status mysql.service

S’il ne fonctionne pas, exécutez la commande suivante :

$ sudo systemctl start mysql

Pour Windows, vous pouvez suivre le guide d’installation officiel.

Nous appellerons cet environnement : serveur Discourse.

Exporter la base de données de production

Exportez/sauvegardez la base de données de production (depuis le serveur de production MyBB) en exécutant :

$ mysqldump -u USER_NAME -p DATABASE_NAME > mybb_dump.sql
  • Copiez cette sauvegarde de base de données sur le serveur Discourse.

:bulb: Vous pouvez utiliser scp ou rsync pour copier la base de données.

Importer la base de données de production dans Discourse

Sur le serveur Discourse, créez une base de données :

$ mysql -u root

:bulb: Si votre utilisateur de base de données a un mot de passe, vous devez utiliser : mysql -u root -p puis saisir votre mot de passe.

mysql> CREATE DATABASE mybb;

Assurez-vous que la base de données a été créée avec succès en exécutant :

mysql> SHOW DATABASES;

Vous devriez voir quelque chose comme :

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| mybb               |
| sys                |
+--------------------+

La base de données mybb est pour l’instant vide. Notre prochaine étape consiste à importer la base de données de production dedans.

$ mysql -u root mybb < mybb_dump.sql

Plus tard, nous aurons besoin du préfixe de table. Donc, pendant que nous y sommes, récupérons-le.

$ mysql -u root
mysql> USE mybb;
mysql> SHOW TABLES;

Vous verrez quelque chose comme ceci :

+--------------------------+
| Tables_in_mybb           |
+--------------------------+
| mybb_adminlog            |
| mybb_adminoptions        |
| mybb_adminsessions       |
| mybb_adminviews          |
| mybb_announcements       |
| mybb_attachments         |
| mybb_attachtypes         |
| ...Le reste des tables...|
+--------------------------+

Notre préfixe de table est mybb_ comme le montre la sortie.

Exécuter le script d’importation MyBB

  • Installons d’abord les dépendances de l’importateur. Depuis le serveur Discourse :
$ cd ~/discourse
$ echo "gem 'mysql2', require: false" >> Gemfile
$ bundle install

Ensuite, vous devez configurer le script pour qu’il fonctionne correctement. Copiez et collez le suivant dans votre terminal (modifiez les valeurs si nécessaire) :

export DB_HOST="localhost"
export DB_NAME="mybb"
export DB_PW=""
export DB_USER="root"
export TABLE_PREFIX="mybb_"

Vous avez une autre option pour configurer le script. Ouvrez script/import_scripts/mybb.rb dans n’importe quel éditeur de votre choix et modifiez les valeurs entre guillemets doubles pour qu’elles correspondent à vos besoins :

  DB_HOST ||= ENV['DB_HOST'] || "localhost"
  DB_NAME ||= ENV['DB_NAME'] || "mybb"
  DB_PW ||= ENV['DB_PW'] || ""
  DB_USER ||= ENV['DB_USER'] || "root"
  TABLE_PREFIX ||= ENV['TABLE_PREFIX'] || "mybb_"

Exécutez l’importateur avec une instance Discourse propre :

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

L’importateur se connectera au serveur MySQL et migrera votre base de données MyBB vers la base de données Discourse.

Une fois l’importation terminée, démarrez l’instance Discourse en exécutant :

$ bundle exec rails server

Ensuite, démarrez Sidekiq (processeur de tâches en arrière-plan) pour traiter les données migrées :

$ bundle exec sidekiq

:bulb: Vous pouvez surveiller la progression de Sidekiq à l’adresse http://localhost:3000/sidekiq/queues.

Configurez votre serveur de production Discourse en suivant ce tutoriel.

Effectuez une sauvegarde de la plateforme Discourse (serveur Discourse local) et téléchargez-la sur votre serveur de production Discourse en suivant ce tutoriel.

:tada:

Si vous avez des questions sur le processus, je suis heureux de vous aider.

Bonne migration :grinning:

9 « J'aime »

Hi - this looks like a great guide, except as a Cpanel rather than linux user, migrating from a shared host, I don’t have root access or ssh access to the original host, but I do have access to PhPMyAdmin in Cpanel from which I can export the Mybb database.
Will this do?
What if any special export settings are required? And into what directory on my Digital Ocean droplet should this database be copied? (I am using FileZilla)

Yes.

It does not matter, home directory works just fine.

3 « J'aime »

Hi again - I can get up to this point in the tutorial

bundle install

and for me this falls over with error

'Don’t run Bundler as root. Bundler can ask for sudo if it is needed, and
installing your bundle as root will break this application for all non-root
users on this machine.
Your Gemfile has no gem server sources. If you need gems that are not already on
your machine, add a line like this to your Gemfile:
source ‘https://rubygems.org
Could not find gem ‘mysql2’ in any of the gem sources listed in your Gemfile.

Any suggestions?

Unfortunately I know nothing about ruby or linux or gemfiles and so am just literally plodding though various discourse cli setup tasks as the tutorials instruct by cutting and pasting commands via PuTTy, without any kind of understanding.

I am running Ubuntu and Discourse in a Digital Oceans Droplet, if that helps?

Also, I see a subsequent reference to pasting database export commands into ‘shell’ . For practical purposes is my current PuTTy connection to the server = ‘shell’, or is some other interface/console involved?

OK, in partial answer to my own question, random thrashing around on forums suggests

$ sudo apt-get install libmysqlclient-dev

will then allow mysql2 gem to install (whatever that is) - ignoring the warning about not doing this as root.

Getting past that and to the next step - typing

$ bundle exec rails db:drop

gives another error::::

bundler: failed to load command: rails (/usr/local/bin/rails)
Gem::Exception: can’t find executable rails for gem railties. railties is not currently included in the bundle, perhaps you meant to add it to your Gemfile?

Checking in /usr/local/bin/ and I can see a file named ‘rails’ is definitely there.

Typing $ sudo gem or $ gem install rails or $ sudo gem install rails does not help (per various suggestions stumbled across for this error).

Have even gone back and installed Ruby on Rails from scratch to try and ensure all normal dependencies are present How To Install Ruby on Rails with rbenv on Ubuntu 18.04 | DigitalOcean -and no improvement - whether I use version 2.51 or 2.61.

Well out of my depth here…

Well I can say categorically that following this guide as written does NOT work for anyone following the official steps for setting up local Dev environment under WSL2 installation of Ubuntu-18.04 under Windows 10 - at almost every step there will be some dependency missing or connection refused error or similar.

With a lot of pain and online research, I have managed to get up to the command:

$ bundle exec ruby script/import_scripts/mybb.rb

but this generates response:

mysql2/client.rb:90:in `connect’: Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2) (Mysql2::Error::ConnectionError)

This has been a brick wall - nothing I have found by searching online seems to offers a working solution to this

How do I solve this and progress to the next step? Any help much appreciated!

1 « J'aime »

Hi, how can I upload database on my DigitalOcean droplet? I used installation 1click of DigitalOcean to install Discourse (Ubuntu).
On my PC I have Windows 10 Home 18362 build version.

Then I have installed Mysql but now I don’t know how “physically” upload Mybb database on the server. Isn’t there phpmyadmin where you can easily import the database? :frowning:

1 « J'aime »

You need to upload the file using scp or similar. Then Something like

  mysql - u user - p password database < filename..sql
3 « J'aime »

I’m stuck :frowning:

1 « J'aime »

This guide should be updated to be compatible with running the import inside a Docker install instead of using a local development machine.

5 « J'aime »

Really looking forward for the guide to run on a docker based environment :slight_smile:

2 « J'aime »

I gave up on DIY in the end and got a developer on the job - referring him to all the great suggestions on this forum (which helped!) - and I believe he achieved this directly on my live Digital Ocean droplet rather than in a separate development environment (so I could review things easily as he worked - users were not impacted as forum not officially live yet.) - in other words I think it is possible.

After a few iterations, results are now pretty good - all the MyCode and strange character issues resolved, translated my MyBB post prefixes as Discourse tags, custom multi-select user profile fields imported successfully.

If he is willing, I will ask him to share any tweaks to standard import script, and other techniques used here.

4 « J'aime »

Au cas où cela aiderait quelqu’un, le développeur @rahilqf que j’ai engagé a terminé le projet, y compris la traduction des champs personnalisés d’utilisateur MyBB vers les champs personnalisés d’utilisateur Discourse (ce qui nécessite d’avoir le plugin multi-select-user-field installé), la traduction des préfixes de publication MyBB vers les balises Discourse, et l’élimination de presque toutes les balises MyCode redondantes du texte des publications MyBB.

Sa version personnalisée du script d’importation est partagée ici - Script d’importation personnalisé de MyBB vers Discourse.

Il a également fusionné avec succès une archive Mbox de Yahoo Groups, en utilisant le script d’importation Yahoo standard - bien que dans ce cas, les pièces jointes n’aient pas été traduites. Dans mon cas, ce n’était pas un problème majeur.

3 « J'aime »

Je suis en train de convertir des utilisateurs, des messages, des sujets, etc., depuis une base de données MyBB !

J’ai suivi ce guide : Install Discourse on Ubuntu or Debian for Development

mais http://localhost:3000/ ou http://forum.omaggieconcorsi.com:3000/ ne fonctionnent pas.

Quoi qu’il en soit, le programme effectue une conversion, mais je ne sais pas où je peux ensuite exporter les données.
Je ne vois pas Discourse via http://forum.omaggieconcorsi.com:3000/ ou http://localhost:3000/, alors comment puis-je au moins exporter la base de données contenant les messages, les utilisateurs, etc., depuis l’ancien forum MyBB, puis l’importer dans la nouvelle instance Discourse ?

Merci !

Avez-vous suivi ces instructions sur le même ordinateur où vous exécutez le navigateur web ?

1 « J'aime »

Oui, toujours le même ordinateur

Ok, j’ai suivi ce guide sur Ubuntu 18.04 avec un véritable système d’exploitation installé sur PC, et localhost:3000 fonctionne !

Mais maintenant, j’ai un problème avec la base de données MySQL :frowning: Désolé…

J’ai tapé :

debby@debby-MS-7721: mysql -u root
ERROR 1698 (28000) : Accès refusé pour l'utilisateur 'root'@'localhost'

:frowning:

EDIT : J’ai ajouté un mot de passe à root avec ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

Et dans DB_PW, j’ai inscrit le mot de passe de l’utilisateur root.

… et maintenant, il crée des utilisateurs !!

Croisez les doigts pour moi, est-ce enfin le moment après des semaines de tests ??

1 « J'aime »

J’essaie d’importer la base de données de MyBB vers Discourse. Comme @Paul_King, je n’arrive pas à faire fonctionner cela sur mon serveur DigitalOcean. Je rencontre constamment toutes sortes d’erreurs en suivant ce guide.

Je suis bloqué en essayant d’exécuter la commande :

$ bundle exec rails db:drop
bundler : commande 'rails' introuvable
Installez les exécutables manquants des gems avec `bundle install`

bundle install indique que l’installation est terminée :

$ bundle install
Votre Gemfile liste la gem mysql2 (>= 0) plus d'une fois.
Vous devriez probablement n'en garder qu'une seule.
Bien que cela ne pose pas de problème pour le moment, cela pourrait causer des erreurs si vous changez la version de l'une d'elles plus tard.
Utilisation de bundler 1.16.1
Utilisation de mysql2 0.4.10
Bundle terminé ! 2 dépendances Gemfile, 2 gems maintenant installées.
Utilisez `bundle info [nom_gem]` pour voir où une gem groupée est installée.

Tenter d’installer manuellement rails donne ceci :

$ gem install rails
Construction des extensions natives. Cela peut prendre un certain temps...
ERREUR : Erreur lors de l'installation de rails :
        ERREUR : Échec de la construction de l'extension native de la gem.

    répertoire actuel : /var/lib/gems/2.5.0/gems/racc-1.5.2/ext/racc/cparse
/usr/bin/ruby2.5 -r ./siteconf20210110-8155-1ms05r3.rb extconf.rb
mkmf.rb ne peut pas trouver les fichiers d'en-tête de ruby à /usr/lib/ruby/include/ruby.h

échec de extconf, code de sortie 1

Les fichiers de la gem resteront installés dans /var/lib/gems/2.5.0/gems/racc-1.5.2 pour inspection.
Résultats enregistrés dans /var/lib/gems/2.5.0/extensions/x86_64-linux/2.5.0/racc-1.5.2/gem_make.out

C’est extrêmement frustrant.


J’ai laissé ce post ouvert et réussi à installer rails. Ensuite, j’ai eu une million d’autres erreurs et j’ai réussi à les résoudre. Des erreurs. À. Chacune. Des. Étapes.

Je n’ai jamais ressenti une telle haine pure pour un logiciel. Pourquoi Ruby est-il comme ça ? C’est un cauchemar. Je suis maintenant bloqué avec cette erreur :

$ bundle exec rails db:drop
Traceback (appel le plus récent en dernier) :
        1: from /usr/local/bin/bundle:23:in `<main>'
/usr/local/bin/bundle:23:in `load': impossible de charger le fichier -- /usr/share/rubygems-integration/all/gems/bundler-1.16.1/exe/bundle (LoadError)

Quelqu’un peut-il aider ?

1 « J'aime »

Pas très utile, mais j’ai rencontré des murs de briques tout aussi infranchissables, à la fois en tentant de configurer un environnement de développement local (pour générer un fichier de sauvegarde de base de données Discourse) et directement sur mon Droplet Digital Ocean. Finalement, après avoir perdu des dizaines d’heures, j’ai décidé que la vie est trop courte et j’ai fait appel à un développeur sur Fiverr (qui a mis des semaines à comprendre, mais y est parvenu). Je soupçonne que les incitations ne sont tout simplement pas là pour que quiconque rende le processus plus simple. Bonne chance — et j’espère que si vous finissez par y arriver, vous laisserez une piste de miettes de pain ici pour que d’autres puissent vous suivre !

1 « J'aime »

Comment as-tu installé Rails ? As-tu suivi l’un des guides de développement (comme le Guide pour les débutants : Installer Discourse sur Ubuntu pour le développement) ?

Il existe quelques documents explicatifs pour exécuter le script d’installation à l’intérieur du conteneur de production (ce que je fais habituellement), tu pourrais donc t’en servir comme guide.