Si vous avez un ancien forum Phorum et que vous envisagez de migrer vers Discourse, ce tutoriel est fait pour vous. Le processus est simple et nous utiliserons le script d’importation Phorum officiel. Commençons.
À un niveau élevé, nous allons procéder comme suit :
- Préparer l’environnement de développement local.
- Exporter la base de données depuis l’environnement de production.
- Importer la base de données de production dans une instance Discourse locale.
- Exécuter le script d’importation Phorum.
Ce qui peut être migré
- Catégories
- Chaque forum et dossier => Catégorie racine
- Sujets et Messages
- Utilisateurs (avec les attributs suivants)
- statut banni
- nom d’utilisateur
- vrai nom => nom
- adresse e-mail
- statut administrateur
- date d’ajout
- dernière activité
Préparation de l’environnement de développement local
Suivez l’un de ces guides pour installer Discourse lui-même et consultez ce guide si vous rencontrez des problèmes.
Installez le serveur de base de données MySQL ;
Ubuntu 18.04 :
$ sudo apt update
$ sudo apt install mysql-server -y
Une fois l’installation de MySQL terminée, vérifiez son statut :
$ systemctl status mysql.service
S’il n’est pas en cours d’exécution, exécutez la commande suivante :
$ sudo systemctl start 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 le statut des services :
$ brew services list
Vous devriez voir quelque chose comme ceci :
...
mysql@5.7 started
...
Sinon, exécutez la commande suivante et vérifiez à nouveau :
$ brew services start mysql@5.7
Pour Windows, vous pouvez suivre le guide d’installation officiel.
Cet environnement sera notre serveur Discourse.
Exportation de la base de données depuis l’environnement de production :
Exportez la base de données de production (depuis le serveur de production Phorum) :
$ mysqldump -u USER_NAME -p DATABASE_NAME > phorum_dump.sql
Copiez le dump de la base de données sur le serveur Discourse.
Utilisez
scpoursyncpour copier la base de données. Bien sûr, vous pouvez la compresser en gzip au préalable.
Importation de la base de données de production vers le serveur Discourse
Sur le serveur Discourse, créez une base de données :
$ mysql -u root
Si votre utilisateur de base de données a un mot de passe, vous devez utiliser :
mysql -u root -ppuis saisir votre mot de passe.
mysql> CREATE DATABASE phorum;
Assurez-vous que la base de données a été créée :
mysql> SHOW DATABASES;
Vous devriez voir quelque chose comme ceci :
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| phorum |
| sys |
+--------------------+
5 rows in set (0.04 sec)
Il s’agit d’une base de données vide. Notre prochaine étape consiste à importer la base de données de production dedans.
$ mysql -u root phorum < phorum_dump.sql
Pendant que nous y sommes, récupérons le préfixe de table. Nous en aurons besoin plus tard :
$ mysql -u root
mysql> USE phorum;
mysql> SHOW TABLES;
Vous verrez quelque chose comme ceci :
+---------------------------+
| Tables_in_phorum |
+---------------------------+
| pw_banlists |
| pw_files |
| pw_forum_group_xref |
| pw_forums |
| pw_groups |
| pw_messages |
| pw_messages_edittrack |
| pw_pm_buddies |
| pw_pm_folders |
| pw_pm_messages |
| pw_pm_xref |
| pw_search |
| pw_settings |
| pw_subscribers |
| pw_user_custom_fields |
| pw_user_group_xref |
| pw_user_newflags |
| pw_user_permissions |
| pw_users |
+---------------------------+
19 rows in set (0.00 sec)
D’après la sortie ci-dessus, vous pouvez voir que le préfixe est pw_.
Exécution du script d’importation Phorum
Tout d’abord, installez les dépendances de l’importateur :
$ cd ~/discourse
$ echo "gem 'mysql2', require: false" >> Gemfile
$ bundle install
Configurons maintenant le script pour qu’il corresponde à nos besoins. Dans notre exemple, cela suffira :
PHORUM_DB = "phorum"
TABLE_PREFIX = "pw_"
BATCH_SIZE = 1000
# ...
host: "localhost",
username: "root",
password: "", # Changez ceci si vous avez un mot de passe pour la base de données MySQL
database: PHORUM_DB
Si vous souhaitez créer une redirection d’URL, vous devez décommenter ce qui suit :
# categories.each do |category|
# Permalink.create(url: "list.php?#{category['id']}", category_id: category_id_from_imported_category_id(category['id'].to_i))
# end
#...
# results.each do |post|
# if post['parent_id'] == 0
# topic = topic_lookup_from_imported_post_id(post['id'].to_i)
# Permalink.create(url: "read.php?#{post['category_id']},#{post['id']}", topic_id: topic[:topic_id].to_i)
# end
# end
Cela ressemblera à ceci :
categories.each do |category|
Permalink.create(url: "list.php?#{category['id']}", category_id: category_id_from_imported_category_id(category['id'].to_i))
end
#...
results.each do |post|
if post['parent_id'] == 0
topic = topic_lookup_from_imported_post_id(post['id'].to_i)
Permalink.create(url: "read.php?#{post['category_id']},#{post['id']}", topic_id: topic[:topic_id].to_i)
end
end
Exécutez l’importateur avec une instance Discourse propre :
bundle exec rake db:drop db:create db:migrate
bundle exec ruby script/import_scripts/phorum.rb
L’importateur se connectera au serveur MySQL et migrera notre base de données Phorum vers la base de données Discourse.
Démarrez le serveur Discourse une fois l’importation terminée :
$ bundle exec rails server
Démarrez Sidekiq pour traiter les données migrées :
$ bundle exec sidekiq
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 base de données Discourse et téléversez-la sur votre serveur de production Discourse en suivant ce tutoriel.
C’est fait ![]()