Ce document est désormais remplacé par ce guide SMF2 : Migrate an SMF2 forum to Discourse
Je tenais vraiment à migrer notre bon vieux forum SMF2 vers Discourse. Nous avons plus de 1000 membres et environ 20 000 messages répartis dans environ 2 000 sujets.
Sur SMF2, nous n’utilisions ni sondages ni pièces jointes — en fait, tout le monde n’avait même pas d’avatar. Cependant, certains messages reposaient fortement sur du BBCode « avancé ».
Voici comment nous avons procédé.
Prérequis
Installez simplement Discourse de la manière habituelle.
J’ai ajouté le plugin Discourse BBCode pour gérer les listes, les tailles, les couleurs, etc., directement.
Si vous ne pouvez pas établir une connexion distante vers votre base de données MySQL SMF2, vous devrez importer vos données depuis un dump vers un conteneur Docker temporaire.
Si votre base de données accepte les connexions distantes — ou s’exécute sur le même hôte, vous pouvez sauter cette étape.
Un conteneur MySQL Docker temporaire
Faites un dump de votre base de données :
cd /tmp/
mysqldump –u[nom_utilisateur] –p[mot_de_passe] [nom_base_de_données] > sqldump.sql
Créez le conteneur MySQL Docker temporaire :
cd /tmp/
docker run -d -e MYSQL_ROOT_PASSWORD=pass -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DATABASE=db -v "$PWD":/backup --name=mysql mysql
Ensuite, connectez-vous à l’intérieur :
docker exec -it mysql bash
Importez le dump de votre base de données :
mysql -uuser -ppass db < /backup/sqldump.sql
Si vous obtenez l’erreur suivante :
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Attendez simplement une minute que le conteneur soit complètement démarré.
Pour la compatibilité de la base de données, j’ai dû modifier le plugin d’authentification de notre base de données temporaire, mais votre expérience peut varier :
mysql -uuser -ppass db
Utilisez cette requête :
ALTER USER user
IDENTIFIED WITH mysql_native_password
BY 'pass';
Puis déconnectez-vous et vérifiez l’adresse IP de votre instance MySQL :
exit
docker inspect mysql | grep IPAddress
Vous disposez maintenant d’une copie fonctionnelle de votre base de données SMF2.
Un conteneur d’importation Discourse temporaire
Créons un nouveau conteneur appelé « import », basé sur le conteneur app.yml par défaut :
cd /var/discourse
cp containers/app.yml containers/import.yml
nano containers/import.yml
Ajoutez le modèle mysql-dep à votre nouveau conteneur d’importation :
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Décommentez ces deux lignes si vous souhaitez ajouter Lets Encrypt (https)
#- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"
- "templates/import/mysql-dep.template.yml"
Ensuite, lancez simplement :
/var/discourse/launcher stop app
/var/discourse/launcher rebuild import
Importation dans Discourse
Une fois le conteneur d’importation reconstruit, nous devons y entrer pour notre dernier ajustement :
/var/discourse/launcher enter import
cd /var/www/discourse/ # le script doit être lancé depuis ce répertoire précis, mais vous devriez y être arrivé de toute façon
su discourse -c "bundle exec ruby script/import_scripts/smf2.rb -h 172.17.0.3 -u user -p pass -d db -f smf_ -t Europe/Paris"
- -h : l’hôte de la base de données MySQL SMF2 (ici, l’IP d’un conteneur Docker) ;
- -u : utilisateur MySQL SMF2 ;
- -p : mot de passe MySQL SMF2 ;
- -d : base de données MySQL SMF2 ;
- -f : préfixe des tables SMF2 ;
- -t : fuseau horaire SMF2.
Nettoyage
Si vous l’avez créé, arrêtez et supprimez le conteneur MySQL Docker temporaire :
docker stop mysql
docker rmi mysql
Arrêtez le conteneur Discourse « import » et utilisez le lanceur pour nettoyer :
/var/discourse/launcher destroy import
/var/discourse/launcher cleanup
J’ai en fait réussi à détruire mon conteneur principal
Pas de panique :
/var/discourse/launcher rebuild app
Paramètres Discourse après l’importation
Certains paramètres par défaut peuvent causer des problèmes avec les messages importés et les permissions. Modifiez-les selon vos besoins depuis le panneau des paramètres Discourse :
- longueur minimale du titre du sujet : Je l’ai changée à 3 — les sujets dont le titre était trop court s’avéraient très difficiles à gérer (impossibles à déplacer, etc.) ;
- esthétisation du titre : J’ai dû la désactiver — les sujets dont le titre ne commençait pas par une majuscule s’avéraient très difficiles à gérer (impossibles à déplacer, etc.).
Bibliographie
- Comment utiliser le script d’importation bbpress - ou tout autre script d’importation avec une dépendance MySQL (lead4good, mai 2017) ;
- “Authentication plugin ‘caching_sha2_password’ cannot be loaded” (meow, avril 2018).