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 »

Bonjour, cela ressemble à un excellent guide. Cependant, en tant qu’utilisateur de cPanel plutôt que de Linux, et en migrant depuis un hébergement mutualisé, je n’ai pas accès root ni accès SSH à l’hôte d’origine, mais j’ai accès à phpMyAdmin dans cPanel, ce qui me permet d’exporter la base de données MyBB.
Est-ce suffisant ?
Y a-t-il des paramètres d’exportation spécifiques requis ? Et dans quel répertoire de mon droplet Digital Ocean cette base de données doit-elle être copiée ? (J’utilise FileZilla).

Oui.

Cela n’a pas d’importance, le répertoire personnel fonctionne très bien.

3 « J'aime »

Bonjour à nouveau — je peux arriver jusqu’à ce point du tutoriel

bundle install

et pour moi, cela échoue avec l’erreur suivante :

'Ne lancez pas Bundler en tant que root. Bundler peut demander sudo si nécessaire, et
l’exécution de votre bundle en tant que root rendra cette application inutilisable pour tous les utilisateurs
non root sur cette machine.
Votre Gemfile ne contient aucune source de serveur de gems. Si vous avez besoin de gems qui ne sont pas déjà sur
votre machine, ajoutez une ligne comme celle-ci à votre Gemfile :*
source ‘https://rubygems.org
Impossible de trouver la gem ‘mysql2’ dans l’une des sources de gems listées dans votre Gemfile.

Avez-vous des suggestions ?

Malheureusement, je ne connais rien à Ruby, à Linux ou aux Gemfiles, et je me contente donc de suivre littéralement les différentes tâches de configuration de Discourse via CLI, comme l’indiquent les tutoriels, en copiant et collant des commandes via PuTTY, sans aucune compréhension.

Je tourne sous Ubuntu et Discourse sur un Droplet Digital Ocean, si cela peut aider ?

Par ailleurs, je vois une référence ultérieure à la copie de commandes d’exportation de base de données dans le ‘shell’. Pour des raisons pratiques, ma connexion PuTTY actuelle au serveur est-elle le ‘shell’, ou faut-il utiliser une autre interface/console ?

OK, en réponse partielle à ma propre question, des recherches aléatoires sur les forums suggèrent que

$ sudo apt-get install libmysqlclient-dev

permettra ensuite d’installer le gem mysql2 (quoi que ce soit) — en ignorant l’avertissement concernant le fait de ne pas le faire en tant que root.

Une fois cela dépassé et passé à l’étape suivante — en tapant

$ bundle exec rails db:drop

— un autre erreur apparaît :

bundler: failed to load command: rails (/usr/local/bin/rails)
Gem::Exception: impossible de trouver l’exécutable rails pour le gem railties. railties n’est pas actuellement inclus dans le bundle, peut-être devriez-vous l’ajouter à votre Gemfile ?

En vérifiant dans /usr/local/bin/, je vois qu’un fichier nommé ‘rails’ est bien présent.

Taper sudo gem ou gem install rails ou $ sudo gem install rails ne résout rien (selon diverses suggestions trouvées pour cette erreur).

J’ai même tout réinstallé à partir de zéro, en suivant le tutoriel Ruby on Rails, pour m’assurer que toutes les dépendances normales sont présentes : How To Install Ruby on Rails with rbenv on Ubuntu 18.04 | DigitalOcean — et aucune amélioration, que j’utilise la version 2.5.1 ou 2.6.1.

Je suis vraiment dépassé ici…

Je peux affirmer catégoriquement que suivre ce guide tel quel NE fonctionne pas pour quiconque suit les étapes officielles pour configurer un environnement de développement local sous une installation WSL2 d’Ubuntu-18.04 sur Windows 10 : à presque chaque étape, il manque une dépendance ou une erreur de refus de connexion se produit, ou quelque chose de similaire.

Après beaucoup de difficultés et de recherches en ligne, j’ai réussi à arriver à la commande :

$ bundle exec ruby script/import_scripts/mybb.rb

mais cela génère la réponse suivante :

mysql2/client.rb:90:in `connect’: Impossible de se connecter au serveur MySQL local via le socket ‘/tmp/mysql.sock’ (2) (Mysql2::Error::ConnectionError)

C’est un mur infranchissable : rien de ce que j’ai trouvé en cherchant en ligne ne semble offrir une solution fonctionnelle à ce problème.

Comment résoudre ce problème et passer à l’étape suivante ? Toute aide est grandement appréciée !

1 « J'aime »

Bonjour, comment puis-je télécharger une base de données sur mon droplet DigitalOcean ? J’ai utilisé l’installation en un clic de DigitalOcean pour installer Discourse (Ubuntu).
Sur mon PC, j’ai Windows 10 Home version 18362.

Ensuite, j’ai installé MySQL, mais je ne sais pas comment « physiquement » importer la base de données MyBB sur le serveur. N’existe-t-il pas phpMyAdmin où vous pouvez facilement importer la base de données ? :frowning:

1 « J'aime »

Vous devez télécharger le fichier en utilisant scp ou un outil similaire. Ensuite, quelque chose comme :

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

Je suis bloqué :frowning:

1 « J'aime »

Ce guide doit être mis à jour pour être compatible avec l’exécution de l’importation dans une installation Docker plutôt que sur une machine de développement locale.

5 « J'aime »

J’ai vraiment hâte de voir le guide s’exécuter dans un environnement basé sur Docker :slight_smile:

2 « J'aime »

Finalement, j’ai abandonné le bricolage et fait appel à un développeur — en lui signalant toutes les excellentes suggestions de ce forum (qui ont été utiles !). Je pense qu’il a réalisé cela directement sur mon droplet Digital Ocean en production, plutôt que dans un environnement de développement séparé (ce qui me permettait de vérifier facilement les travaux en cours — les utilisateurs n’ont pas été impactés car le forum n’était pas encore officiellement en ligne). En d’autres termes, je crois que c’est possible.

Après quelques itérations, les résultats sont maintenant très bons : tous les problèmes liés au MyCode et aux caractères spéciaux ont été résolus, les préfixes de messages MyBB ont été traduits en tags Discourse, et les champs de profil utilisateur personnalisés à sélection multiple ont été importés avec succès.

S’il est d’accord, je lui demanderai de partager les ajustements apportés au script d’importation standard ainsi que les autres techniques utilisées ici.

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.