Migrer un forum phpBB vers Discourse

Si vous possédez déjà un forum et que vous souhaitez passer sur le moteur Discourse sans perdre les données de celui-ci, vous aurez besoin d’utiliser un script de migration. Le plus couramment utilisé est celui permettant de passer de phpBB à Discourse. Voici le guide officiel en anglais : https://meta.discourse.org/t/importing-migrating-from-phpbb3/30810

Si vous avez un autre moteur que phpBB, vous pouvez consulter le tag #migration sur le forum meta.discourse.org pour voir si un guide est disponible.

Besoin d’aide pour une migration phpBB ?

Si la tâche vous paraît trop difficile ou si vous souhaitez un accompagnement plus poussé sur certaines parties de la migration, vous pouvez faire appel à mes services en me contactant à l’adresse [email protected]

Pensez à préciser la version de phpbb utilisée, la date de création du forum et le nombre de messages publiés.

Avant de débuter…

Avant de débuter, il est nécessaire de préciser quelques éléments importants :

  • Le script de migration ne permet d’importer uniquement des forums phpBB 3.0.x, 3.1.x et 3.2.x
  • Le processus de migration peut être long selon la quantité de messages publiés, la migration peut prendre de quelques heures à plusieurs dizaines d’heures.
    Petit exemple, j’ai effectué une migration d’un forum phpBB 3.0.12 créé en 2004 et contenant 400 000 messages, le processus a pris 16 heures.
  • Plus le serveur hébergeant votre forum Discourse est puissant, plus vite la migration se déroulera. Il peut être intéressant de prendre temporairement un serveur ou vps plus rapide et puissant le temps de faire la migration et déménager votre forum une fois que c’est terminé. Le processus de déménagement est simple.
    Installez un forum Discourse vierge sur votre nouveau serveur
    Faites une sauvegarde complète de votre forum Discourse actif
    Restaurez votre sauvegarde sur le Discourse que vous venez d’installer. Les messages, utilisateurs et pièces jointes seront ajoutées.
  • Vérifiez l’espace disque utilisé par votre forum phpBB sur votre hébergeur et multipliez cet utilisation par 2 pour estimer l’espace disque nécessaire sur votre serveur hébergeant Discourse.
    Concrètement, si vous utilisez 20 Go d’espace disque (dans le dossier files contenant les fichiers joints), il vous faudra plus de 40 Go d’espace libre disponible sur votre serveur Discourse.

Discourse : préparatifs

Dans un premier temps, installez un forum Discourse en suivant les méthodes traditionnelles : Guide Installer Discourse sur mon-discourse.fr

Une fois votre forum en ligne, nous devons préparer le script d’importation, connectez-vous à votre serveur et entrez les commandes suivantes :

cd /var/discourse
cp containers/app.yml containers/import.yml
nano containers/import.yml

Un éditeur de texte va alors s’ouvrir, vous allez devoir ajouter une ligne à ce document. Dans les premières lignes du document, le fichier indique différents templates utilisés. Selon votre configuration (si vous avez utilisé Let’s Encrypt par exemple) certaines lignes peuvent être actives ou inactives, la partie ci-dessous sert simplement d’exemple pour montrer quelle section nous intéresse ici :

## this is the all-in-one, standalone Discourse Docker container template
##
## After making changes to this file, you MUST rebuild
## /var/discourse/launcher rebuild app
##
## BE *VERY* CAREFUL WHEN EDITING!
## YAML FILES ARE SUPER SUPER SENSITIVE TO MISTAKES IN WHITESPACE OR ALIGNMENT!
## visit http://www.yamllint.com/ to validate this file as needed

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Uncomment these two lines if you wish to add Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

Ajoutez cette ligne dans la liste des templates

  - "templates/import/phpbb3.template.yml"

Vous aurez ainsi un fichier présenté comme ceci :


## this is the all-in-one, standalone Discourse Docker container template
##
## After making changes to this file, you MUST rebuild
## /var/discourse/launcher rebuild app
##
## BE *VERY* CAREFUL WHEN EDITING!
## YAML FILES ARE SUPER SUPER SENSITIVE TO MISTAKES IN WHITESPACE OR ALIGNMENT!
## visit http://www.yamllint.com/ to validate this file as needed

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Uncomment these two lines if you wish to add Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"
  - "templates/import/phpbb3.template.yml"

Enregistrez ensuite vos modifications (généralement CTRL+X puis Y) puis exécutez les commandes suivantes :

./launcher stop app
./launcher rebuild import

Lorsque ce sera fini, votre forum Discourse ne sera plus actif, ceci est normal car il est en mode importation et il a besoin d’être bloqué au public.

L’ajout du template phpBB et l’activation du mode import a créé de nouveaux dossiers sur votre FTP.

/var/discourse/shared/standalone/import
├── data
├── mysql
└── settings.yml

Vous allez ensuite avoir besoin d’accéder à votre serveur en FTP, pour les détails techniques, je vous renvoie à ce guide dédié :

phpBB : Sauvegarde de la base de données et des fichiers joints

Sur l’hébergeur où se trouve votre forum phpBB connectez vous à votre base de données, ou allez dans le panneau de configuration du forum pour réaliser une exportation de la base de données. Vous allez enregistrer sur votre disque dur en format .sql, que vous allez nommer phpbb_mysql.sql

Placez ce fichier sur le ftp de votre serveur Discourse dans le dossier

/var/discourse/shared/standalone/import/data/

Faites ensuite une copie du dossier /files de votre forum phpBB (celui qui contient les fichiers joints aux messages). Envoyez ce dossier complet dans le dossier

/var/discourse/shared/standalone/import/data/

Vous aurez ainsi sur votre FTP une structure se présentant comme ceci :

/var/discourse/shared/standalone/import
├── data
│   ├── files
├── mysql
└── settings.yml

Selon la quantité de messages et d’utilisateurs, votre fichier sql peut peser quelques centaines de Mo. Selon la quantités d’images utilisées dans vos messages, ce sera plusieurs Go d’espace qui seront utilisés. Il est possible d’importer également les avatars des utilisateurs mais il semble que le script soit actuellement instable dans ce domaine particulier.

💡 ASTUCE

Si vous disposez d’un accès SSH sur l’hébergeur accueillant votre forum phpBB, vous pourrez être en mesure de déplacer directement le dossier files du phpBB au dossier data, c’est pratique pour les personnes ayant une connexion internet lente, ou si le volume de données est trop important. Pour ceci vous utiliserez la commande scp. Vous devrez tout d’abord trouver où se situe le dossier files sur votre hébergement, aidez-vous du ftp de votre forum phpBB pour vous guider, et ajoutez l’ip de votre serveur Discourse dans la ligne de commande suivante :

scp /dossier_phpbb/files [email protected]:/var/discourse/shared/standalone/import/data/

Modifier le fichier settings.yml

Avant de lancer l’importation, il va falloir préparer le fichier settings.yml. Pour que vous soyez plus à l’aise, je vous conseille de le télécharger sur votre disque dur pour le modifier avec le bloc note, notepad++ ou votre éditeur de fichier favori, l’édition de ce fichier directement sur le terminal peut vous amener à faire des erreurs bloquantes, les fichiers yaml (.yml) étant sensibles à l’indentation. Le fichier settings.yml se trouve dans le chemin :

/var/discourse/shared/standalone/import

Le fichier contient de nombreuses explications, ce qu’il est essentiel de vérifier dans un premier temps c’est la ligne 10, table prefix. Vérifiez dans la base de données de votre forum phpbb quel est le préfixe de chacune des tables (phpbb_acl_groups) :

L’autre élément vital à vérifier, ce sont les lignes 91 à 94. Vous allez devoir modifier les deux lignes. Après original, ajoutez le domaine de votre forum phpbb actuel, sans ajouter http:// ou https://
Après new, indiquez le lien de votre forum Discourse actuel, avec http:// ou https://

Si vous faites une migration sur un sous-domaine temporaire, ce n’est pas un soucis, indiquez l’adresse actuelle, vous pourrez corriger les redirections plus tard.

  site_prefix:
    # this is needed for rewriting internal links in posts
    original: oldsite.example.com/forums    # without http(s)://
    new: http://discourse.example.com       # with http:// or https://

Vous avez également une liste d’options que vous choisirez d’activer ou non. Comme l’importation des avatars, des mots de passe (cela nécessite un plugin, je conseille de laisser en false), des sondages, messages privés, etc.

Faites selon vos besoins et préférences pour chaque réglage. Sachez toutefois que l’activation de certaines options peut rendre l’importation plus lente. Le script de migration n’est pas infaillible, des options activées pourraient ne pas fonctionner. Cela peut être lié au script de migration temporairement défectueux, à des modifications de votre forum phpBB qui impactent le script, etc. Le script est toutefois très efficace pour importer le principal, à savoir les utilisateurs, les catégories et les messages !

Une fois vos réglages effectués, sauvegardez le fichier et envoyez-le sur le ftp.

Lancement de l’importation !

Maintenant que votre base de données a été placée sur le serveur hébergeant votre forum Discourse, que les pièces jointes sont toutes dans le dossier files, et que le fichier de configuration est prêt, vous pouvez lancer l’importation. Pour cela, connectez-vous au serveur et lancez les commandes suivantes :

cd /var/discourse
./launcher enter import
import_phpbb3.sh

Le script va maintenant travailler, vous pouvez garder un œil dessus pour voir si tout se passe bien. Il y a maintenant deux choses à savoir :

  • À l’heure où le guide est rédigé (décembre 2021), le script rencontre un bug qui l’empêche d’intégrer dans la même exécution le premier message d’un sujet créé sur phpBB et ses réponses. Pas de panique néanmoins, il vous suffira d’exécuter à nouveau la commande mentionnée plus haut : import_phpbb3.sh ceci effectuera un second passage qui intègrera toutes les réponses.
    Vous verrez donc lors de la première exécutions du script des messages d’erreurs de ce type :
    3597 / 130000 ( 2.7%) [1208 items/min] Parent post 3662 doesn't exist. Skipping 3664:
    Ceci n’est donc pas alarmant.
  • Prêtez plus attention au message d’erreur Failed to create upload: No such file or directory @ rb_sysopen - /shared/import/data/files/....
    S’il se reproduit très souvent, cela peut vouloir dire que l’importation des pièces jointes ne fonctionne pas. Vérifiez particulièrement le chemin indiqué dans le message d’erreur, il doit bien indiquer le chemin shared/import/data/files. Vous pouvez explorer votre FTP pour vérifiez que le dossier files contient bien les fichiers mentionnés.
  • Il n’est pas nécessaire de rester collé à votre écran à tout moment, le script s’exécute tout seul et il n’y a pas de validation à faire à certains moments. Vérifiez simplement de temps en temps qu’il continue d’avancer. Il est toutefois important de laisser le terminal ouvert, et de ne pas perdre votre connexion internet. Ceci dit, si vous subissez une déconnexion et que le script s’est arrêté, ce n’est pas dramatique, lisez le point suivant.
  • Vous pouvez à tout moment stopper le script pour observer les premiers résultats, et le reprendre ensuite. Pour réactiver le forum entrez les commandes suivantes :

    cd /var/discourse
    ./launcher stop import
    ./launcher start app


    Vous pouvez consulter votre forum avec les premières données importées. Ceci peut être utile pour vérifier que les utilisateurs, catégories et images sont bien importées. Ne commencez pas à supprimer des messages, vous devez vous contenter d’inspecter les premiers résultats. Pour reprendre le script, exécutez les commandes suivantes :

    cd /var/discourse
    ./launcher stop app
    ./launcher start import

    ./launcher enter import
    import_phpbb3.sh

Vous devez donc exécuter le script au moins deux fois à l’heure où je rédige ce guide. Une fois ces deux étapes terminées, n’hésitez pas à le relancer une troisième fois pour vous assurer que tout a été importé. Le script ne va pas tout importer de nouveau rassurez-vous. Il passera en revue tout le travail déjà effectué et n’ajoutera que ce qui n’a pas été traité. Si plus rien ne s’est ajouté, la migration est officiellement terminée, vous pouvez à présent réactiver votre forum.

cd /var/discourse
./launcher start app

Observez le résultat final, vérifiez surtout l’intégration des utilisateurs, des sujets et des pièces jointes telles que les images !

Nettoyage et derniers réglages

Si vous êtes satisfaits du résultat, vous pourrez effectuer un nettoyage des dossier d’importation. Cela vous permettra de faire de la place sur votre serveur car les images sont stockées en double (celles du dossier files qui ont servi à l’importation, et les images copiées dans les dossiers de Discourse par le script). Pour cela, connectez-vous à votre serveur et exécutez les commandes suivantes :

/var/discourse/launcher destroy import
rm /var/discourse/containers/import.yml
rm -R /var/discourse/shared/standalone/import

Pensez à effectuer une sauvegarde de votre forum Discourse dès que possible pour éviter de perdre tout votre travail !

Si vous avez créé votre forum Discourse sur un sous-domaine temporaire, vous pouvez modifier la configuration pour le placer sur le domaine ou le sous-domaine principal. Pour cela modifiez le fichier de configuration du forum en entrant les commandes suivantes :

cd /var/discourse
nano containers/app.yml

Au niveau de la ligne ~50 vous verrez l’option DISCOURSE_HOSTNAME: avec l’adresse temporaire de votre forum. Mettez à jour ce réglage et enregistrez vos modifications. Ensuite mettez à jour le forum en utilisant la commande suivante :

./launcher rebuild app

Après quelques minutes, le forum sera accessible sur le domaine principal. Mais rappelez-vous, dans le script d’importation, vous avez indiqué votre sous-domaine temporaire. Vous devez donc utiliser une redirection sur tous les liens internes. Rassurez-vous, c’est très simple. Connectez-vous au serveur et entrez les commandes suivantes pour entrer dans l’application :

cd /var/discourse
./launcher enter app

Vous allez ensuite utiliser une option appelée discourse remap qui va changer automatiquement toutes les références à l’ancien domaine, utilisez comme base le code ci-dessous en changeant les deux domaines, dans l’ordre votre sous-domaine temporaire, puis votre nouveau domaine utilisé pour héberger le forum :

discourse remap ancien.domaine.fr nouveau.domaine.fr

Si vous n’utilisez pas de sous-domaine, le code se présentera ainsi :

discourse remap ancien.domaine.fr domaine.fr

Besoin d’aide ?

Pour rappel, si vous avez besoin d’aide ou si vous souhaitez que je me charge de la migration de votre forum phpBB vers Discourse, vous pouvez faire appel à mes services en me contactant à l’adresse [email protected]

Auteur de l’article : Steven

Webmaster depuis 2003, j'ai œuvré en particulier sur des forums tournant sur phpBB avant de prendre le virage plus moderne avec Discourse en 2015 sur les conseils de mon associé sur iunctis.fr où je gère l'aspect technique. Pour aider d'autres créateurs de forums Discourse, j'ai voulu lancer un site pour proposer quelques guides.

Laisser un commentaire