Mon parcours de migration phpBB (postgresql)

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.

1 « J'aime »

Le script d’importation en masse devrait fonctionner pour vous… discourse/script/bulk_import/phpbb_postgresql.rb at 52d4de7b45eb1b7c7997da2ba8bff83a3c22a3a5 · discourse/discourse · GitHub

4 « J'aime »

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 ?

2 « J'aime »

Oui, il y a des inconvénients. Si vous êtes à l’aise avec Ruby, je vous suggère de modifier les fichiers dans discourse/script/import_scripts/phpbb3/database at main · discourse/discourse · GitHub afin qu’ils fonctionnent avec la gemme pg au lieu de mysql2.

Peut-être ? Je n’ai aucune idée de la facilité avec laquelle cela serait possible et si cela fonctionnerait réellement. Vous pouvez essayer…

1 « J'aime »

dommage. eh bien, je vais essayer. je ferai un suivi si je trouve quelque chose.

2 « J'aime »

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 ?

2 « J'aime »

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.

Cela en vaudra la peine !

3 « J'aime »

Cela ressemble à une recette pour le désastre si vous ne faites pas attention aux jeux de caractères et aux collations de la base de données.

Il y a quelques années, j’ai commencé à y travailler, mais c’est inachevé et obsolète. Quoi qu’il en soit, peut-être que cela sera utile.

3 « J'aime »

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. :grinning:

3 « J'aime »

é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.

2 « J'aime »

Jusqu’à présent, je suis bloqué sur ce problème :

https://bugs.mysql.com/bug.php?id=89048

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.

1 « J'aime »

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 :

  1. 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.)
  2. 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.
  3. 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.

3 « J'aime »

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.

1 « J'aime »

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.

3 « J'aime »

phpbb_smilies.zip (87.2 Ko)

(Comparer aux smileys par défaut)

pour info, voici ma solution pour les emojis
j’offre deux options :

  1. natif
    • si vous ne souhaitez pas conserver les emojis phpBB d’origine, vous pouvez les mapper à des emojis natifs déjà présents dans discourse

:grin: :smile: :wink: :slightly_frowning_face: :astonished: :exploding_head: :confounded: :sunglasses: :joy: :rage:
:stuck_out_tongue: :person_facepalming: :sob: :imp: :smiling_imp: :roll_eyes: :exclamation: :question: :bulb: :arrow_forward:
:neutral_face: :smiley_cat: :nerd_face: :nerd_face:

  1. importé
    • si vous souhaitez conserver les emojis phpBB d’origine et les avoir disponibles en tant que shortcodes pour continuer à les utiliser :
      • avant d’exécuter l’importateur, allez dans la section des emojis du tableau de bord discourse (admin/customize/emojis)
      • si vous le souhaitez, créez d’abord un groupe d’emojis appelé phpbb ou quelque chose de similaire
      • faites glisser les fichiers emoji (5 à la fois) dans new_files sur le navigateur pour les importer en tant qu’emojis personnalisés

j’ai un zip avec la configuration pour l’une ou l’autre option incluse sous le nom de import.yml dans le zip.

également dans le zip se trouve une feuille de calcul pour vous aider à décider ou à créer votre propre mappage :

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
    └── ...
1 « J'aime »

quelqu’un a-t-il réussi à faire fonctionner correctement l’attribution des citations ?

voici un exemple d’un message original de phpbb contenant une citation (nom d’utilisateur et contenu modifiés, IDs, etc. sont les mêmes)

[quote=someuser post_id=46649 time=1677556325 user_id=48]
foo
[/quote]

bar

voici à quoi cela ressemble dans discourse :

voici le message brut migré vers discourse :

[quote=", post:37, topic:1893"]
foo
[/quote]

bar

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 ?

1 « J'aime »

Je suis à peu près certain que cela a fonctionné correctement lors d’une importation phpbb3 que j’ai effectuée le mois dernier.

1 « J'aime »

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.

1 « J'aime »

quelque chose ne va pas avec l’analyse des citations.

je viens d’essayer d’importer un phpBB 3.2.8 fraîchement installé (installé sur mariadb)

l’attribution des citations est cassée – le champ nom d’utilisateur est vide dans les citations importées, mais tout le reste est légitime

capture d’écran discourse du message importé :

message importé par discourse :

[quote=", post:4, topic:12"]
[quote=", post:3, topic:12"]
[quote=", post:2, topic:12"]
msg 1
[/quote]

second
[/quote]

third
[/quote]

fourth

message phpbb original :

MariaDB [phpbb]> select post_text from phpbb_posts where post_id=5;
...
| <r><QUOTE author="admin" post_id="4" time="1678400691" user_id="2"><s:>[quote=admin post_id=4 time=1678400691 user_id=2]</s:>
<QUOTE author="admin" post_id="3" time="1678400685" user_id="2"><s:>[quote=admin post_id=3 time=1678400685 user_id=2]</s:>
<QUOTE author="admin" post_id="2" time="1678400675" user_id="2"><s:>[quote=admin post_id=2 time=1678400675 user_id=2]</s:msg 1</e:></quote></e:></QUOTE>

second

</e:></quote></e:></QUOTE>

third

</e:></quote></e:></QUOTE>

fourth</r> |

peut-être que je finirai par apporter des améliorations à l’importateur après tout…

3 « J'aime »

Corrigé


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 :

docker_args:
  - '-v /path/to/discourse_dev/script/import_scripts:/var/www/discourse/script/import_scripts'

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 .
5 « J'aime »