Je partage mes découvertes au fur et à mesure de ma migration de phpBB3 vers Discourse.
Les solutions incluent :
Base de données source PostgreSQL
Emoji
Ajustements de l’importateur (correction du bug des citations, meilleur support du bbcode (y compris YouTube), commentaires des pièces jointes)
Les messages supprimés en douceur importés comme des messages normaux
Je suis très exigeant, donc si vous suivez, vous devriez obtenir un très bon résultat.
J’envisage de passer à Discourse depuis phpBB (historique des versions installées : 3.2.1 - 3.2.8).
Le problème est que j’utilise PostgreSQL pour la base de données. Des suggestions ? Je n’ai pas essayé mais je suppose que ce n’est pas encore pris en charge, d’après le message initial.
Le nouveau script d’importation est-il jamais sorti ? Je vois que cela remonte à un peu plus d’un an.
Merci, @gerhard
Ma compréhension est-elle correcte ?
script/import_scripts/phpbb3 et script/bulk_import sont des importateurs complètement séparés
l’importateur en masse est moins sophistiqué (bien que plus rapide), et, par exemple, il n’importera pas les pièces jointes ?
Si oui, il semble y avoir des inconvénients à utiliser l’importateur en masse…
N’y a-t-il pas d’autre solution, alors ? Serait-il conseillé d’envisager une migration de base de données de postgresql vers mysql ou quelque chose de similaire ?
est-ce que cet importateur est celui qui sera déprécié ? quel est le statut du « nouvel » importateur ? j’essaie de décider combien d’efforts je vais y consacrer — y aura-t-il une valeur en amont ?
Je n’ai pas personnellement traité le problème de la migration de PostgreSQL vers MySQL, mais d’un point de vue purement de migration de phpBB vers Discourse, mon opinion est la suivante : faites tout ce qu’il faut pour réussir la migration.
J’ai migré deux forums phpBB vers Discourse, et bien qu’il y ait eu les habituelles plaintes d’un petit nombre d’utilisateurs que l’on rencontre avec tout changement, les avantages de Discourse en valent largement la peine ! Non seulement Discourse est plus facile à maintenir et à administrer, mais l’engagement utilisateur intégré, la gestion des images, la personnalisation par l’utilisateur et la lisibilité de Discourse ne sont que quelques-unes des fonctionnalités qui sont tellement en avance sur phpBB qu’il n’y a pas de comparaison. Vous bénéficiez également d’un bien meilleur support avec Discourse.
Je ne suis pas un expert, mais une recherche rapide semble indiquer que vous pourriez migrer de PostgreSQL vers MySQL en effectuant un dump de schéma, en modifiant les types de données dans les instructions de schéma pour qu’ils correspondent à ceux utilisés par MySQL, en utilisant le schéma modifié pour créer les tables dans une base de données MySQL, puis en effectuant une exportation et une importation CSV table par table.
Une fois que vous aurez la base de données MySQL, vous pourrez utiliser le script de migration phpBB habituel et conserver toutes vos pièces jointes.
Je ne voulais pas sous-entendre que ce serait facile, juste que cela en valait la peine, même possible de le faire manuellement, et il semble y avoir beaucoup de ressources disponibles pour y parvenir, à la fois avec des outils automatisés et manuellement.
étant donné que je déteste Ruby, et que l’importateur existant sera déprécié au profit de l’importateur en masse (qui n’est pas encore assez bon pour mes besoins), je vais de l’avant avec la stratégie de migration postgres → mysql.
je progresse avec l’assistant de migration de MySQL Workbench. j’écrirai un petit guide s’il réussit, mais cela semble prometteur jusqu’à présent.
En gros, MySQL Workbench échoue lors de l’importation d’Unicode. J’essaierai avec MariaDB demain pour voir si je peux définir le codage par défaut de la base de données ou quelque chose avant l’importation.
Il aurait été formidable si MySQL Workbench avait fonctionné. J’ai vu un tas de rapports d’erreurs à ce sujet lorsque j’ai examiné les options, et je ne l’ai donc pas recommandé.
J’ai mentionné la méthode d’exportation/importation de schéma et de CSV une fois auparavant, et je ne la mentionnerai qu’une seule fois de plus avec une légère modification pour la rendre beaucoup plus facile, puis je me tairai.
Si vous voulez passer par une interface graphique :
Procurez-vous une exportation de la structure seule de toutes les tables d’une copie fonctionnelle de la même version de phpBB3 que vous utilisez, qui fonctionne avec MySQL/MariaDB. Il faudrait littéralement deux minutes à quelqu’un pour en créer une à partir de phpMyAdmin, qui est disponible sur la plupart des hébergeurs web qui exécutent MySQL/MariaDB. (Alternativement, vous pourriez être en mesure d’obtenir les instructions CREATE TABLE dont vous avez besoin à partir des scripts d’installation de phpBB3 si vous ne parvenez pas à obtenir quelqu’un pour effectuer l’exportation de la structure seule pour vous, ou même utiliser un compte d’hébergement web peu coûteux pour effectuer une installation propre de votre version de phpBB3 dans un environnement MySQL/MariaDB, puis supprimer les données dans les tables qu’il crée pour créer une base de données MySQL/MariaDB vide.)
Trouvez l’accès à un hébergeur web avec MySQL/MariaDB et phpMyAdmin, créez la base de données, importez la structure à partir de l’exportation de la structure seule que vous avez créée à l’étape 1 en utilisant phpMyAdmin.
Créez une exportation CSV pour chaque table de votre base de données PostgreSQL et effectuez une importation CSV vers la table correspondante en utilisant phpMyAdmin dans votre nouvelle base de données MySQL/MariaDB.
Je pense que cela évitera tout problème de jeu de caractères et d’encodage, et vous n’aurez pas à trouver tous les types de données et tailles de champs correspondants qui seraient nécessaires si vous essayiez de convertir manuellement le dump de schéma de PostgreSQL.
Je peux vous fournir une instruction SQL de structure seule, mais la seule base de données que j’ai encore est celle de phpBB3 3.3.8, donc cela pourrait ajouter plus de problèmes si vous utilisez la version 3.2.x.
haha. ouais, il a fallu quelques astuces peu évidentes pour le faire fonctionner autant que j’ai pu. je pense que ça pourrait encore fonctionner, mais merci de me donner une autre piste à explorer.
ok, ouf. voici ma solution pour l’importation postgresql.
cela vous permettra de passer d’une sauvegarde postgres à un serveur mariadb fonctionnel dans lequel vous pourrez brancher l’importateur. nécessite docker compose.
cela fonctionne pour phpbb 3.2. aucune idée pour 3.3. si vous mourez d’envie d’avoir le support 3.3, je peux essayer de le corriger si vous me donnez une sauvegarde pg_dumpall de phpbb 3.3.
phpbb_smilies
├── phpbb_smilies.xlsx # référence principale pour vous aider à décider
├── import.yml # fichier de configuration avec les deux options
├── orig_phpbb_smilies.csv # données phpBB d'origine
├── orig_files # fichiers emoji phpBB d'origine
│ ├── icon_arrow.gif
│ └── ...
└── new_files # fichiers emoji renommés pour correspondre à la colonne `new_shortcode` dans la feuille de calcul
├── phpbb_arrow.gif
└── ...
le postid et le topicid migrés sont corrects, mais le nom d’utilisateur est manquant. cela le rend non interactif. lorsque le nom d’utilisateur est une chaîne vide, la citation ne se développe pas, et vous ne pouvez pas cliquer dessus pour suivre la référence au message original.
puis-je espérer une meilleure expérience sans apporter d’améliorations à l’importateur ? c’est-à-dire, est-ce que je fais juste quelque chose de mal ?
Je n’ai pas encore résolu le dernier problème, mais voici une autre question.
Je remarque qu’après la fin de l’importation et que vous démarrez le conteneur de l’application, mon serveur phpBB toujours existant est très sollicité. Je pense que cela se produit pendant la phase de post-traitement de Sidekiq.
phpBB existe toujours sur www.example.com, et Discourse est sur dc.example.com.
J’essaie de comprendre ce qui se passe réellement, quels paramètres ont du sens pendant cette migration de test, et quels paramètres auront du sens pour la migration finale. Et si j’ai besoin d’avoir phpBB en cours d’exécution pour ce post-traitement de Sidekiq. Je demande car je n’ai aucune idée de ce qui se passe dans le post-traitement.
Quelques paramètres potentiellement pertinents dans mon settings.yml actuel :
import:
# Définissez ceci si vous importez plusieurs forums phpBB dans un seul forum Discourse.
site_name:
site_prefix:
# ceci est nécessaire pour réécrire les liens internes dans les messages
original: example.com # sans http(s)://
new: https://dc.example.com # avec http:// ou https://
S’il y a d’autres éléments que vous devez examiner, faites-le moi savoir.
Une autre chose que je ne comprends pas, c’est le sous-domaine www. Je redirige actuellement vers www avec nginx pour phpBB. Donc, dans l’exemple ci-dessus, est-ce que cela a de l’importance si je mets original: example.com ou original: www.example.com ? Question similaire pour new lorsque je ferai la migration finale. Mes utilisateurs accéderaient en fait à Discourse depuis www.example.com, mais je ne sais pas quelle est la meilleure pratique.
Je suis assez pointilleux concernant la migration de mon forum, donc je continue d’améliorer l’importateur. Je ne suis pas sûr de vouloir faire des PR car l’importateur est obsolète, et certaines de mes corrections sont semi-spécifiques à mon forum, mais cette branche contiendra toutes mes corrections combinées au cas où elle serait utile à quelqu’un :
J’ai corrigé le problème des citations, ajouté la prise en charge de certains bbcode couramment ajoutés, rendu l’analyse des liens YouTube moins défectueuse et pris en charge l’extension mentions/simplementions. J’ai encore plus de choses à améliorer, comme ajouter la prise en charge de plusieurs préfixes de site (le cas d’utilisation principal est lorsque vous avez des liens sur votre forum vers example.com et www.example.com).
Même si je prends en charge certains éléments non standard, cela ne devrait pas poser de problème pour l’exécuter sur un forum phpBB standard sans extensions. Je recommande de toute façon d’utiliser le mien.
La façon la plus simple de l’utiliser est de cloner ma branche quelque part et de remplacer le répertoire du script d’importation à l’intérieur du conteneur par un montage de liaison.
C’est-à-dire, clonez mes modifications quelque part :
git clone --filter=blob:none --no-checkout https://github.com/ftc2/discourse.git discourse_dev
cd discourse_dev
git sparse-checkout set --cone
git switch phpbb_import
git sparse-checkout set script/import_scripts
Ensuite, ajoutez ceci à la configuration de votre conteneur import.yml :
Ensuite, reconstruisez le conteneur d’importation. Après la reconstruction, vous voudrez probablement réinitialiser l’endroit où vous avez cloné mon dépôt car le processus de construction écrasera mes fichiers, lol.
cd /path/to/discourse_dev
git reset --hard HEAD
chown -R 1000:1000 .