Migrer un forum phpBB3 vers Discourse

Super ! Content que vous ayez résolu le problème. Quelle était l’astuce ?

J’espère que vous n’aurez pas besoin de ceci https://www.literatecomputing.com/services-discourse-migration/

J’ai dû continuer à exécuter import_phpbb3.sh jusqu’à ce que toutes les catégories soient importées. Le script a fonctionné pendant la nuit, et une interruption réseau a causé une erreur de mon côté. J’ai redémarré le script, et je pense qu’il fonctionne maintenant. S’il y a d’autres problèmes, je devrai aller nettoyer la table MySQL.

1 « J'aime »

Salut tout le monde ! Le forum est presque opérationnel… il est magnifique. J’écris un script pour modifier la balise [/quote]. Le forum est assez ancien, datant de 2001, et le simple fait d’ajouter un espace au-dessus et en dessous de la balise de fermeture résout beaucoup de problèmes. Je suis sûr qu’il y avait un réglage que j’aurais pu modifier dans le script d’importation, mais c’est la première fois que je migre, donc j’apprends au fur et à mesure.

Question : Je corrige 10 ans de données, et j’ai un forum phpBB actif. Cela prend un peu de temps. Puis-je utiliser le script import_phpbb3.sh pour importer les X derniers jours de messages de mon forum ? Je pense que c’est juste une fusion du point de vue du script. Je peux exporter les 7 derniers jours de données de MySQL… mais je ne sais pas si cela fonctionnerait. Des idées ?

Je n’ai pas encore vérifié si le script fonctionne… je l’ai testé sur de petites parties, mais pas en lot. Le problème que j’ai eu était un espace au-dessus et en dessous de la balise de fermeture. Maintenant, je vais aller tondre la pelouse et revenir vérifier plus tard :

batch_size = 1000
total_processed = 0

# Traiter les messages sur l'ensemble du site par lots
Post.find_in_batches(batch_size: batch_size) do |batch|
  updated_posts = []

  batch.each do |post|
    original_raw = post.raw
    # Appliquer la correction
    new_raw = original_raw.gsub(/\n\n\[\/quote\]\n\n\n/, "\n\n[/quote]\n\n")

    if original_raw != new_raw
      post.update_column(:raw, new_raw)  # Mise à jour directe de la colonne pour sauter les rappels
      updated_posts << post
      total_processed += 1
    end
  end

  # Re-cuire uniquement les messages mis à jour pour minimiser la charge
  updated_posts.each(&:rebake!)

  puts "Un lot de #{batch.size} messages a été traité. Total traité jusqu'à présent : #{total_processed}."
end

puts "Total de #{total_processed} messages traités sur l'ensemble du site."
1 « J'aime »

Cela a fonctionné sur des publications individuelles :

post = Post.find(344572) # Remplacez 344572 par l’ID correct

post.raw = post.raw.gsub(/\n\\n\[\/quote\]\\n\n\n/, “\n\n[/quote]\n\n”)

Je modifierais le script pour faire cela lors de l’importation des données. Je suis surpris que ce ne soit pas déjà le cas. Cela vaut la peine d’examiner les choses de plus près.

Sur plusieurs scripts sur lesquels j’ai travaillé, j’ai ajouté un paramètre ENV IMPORT_AFTER et modifié les requêtes pour inclure where some_timestamp > import_after_data. Je ne pense pas que celui-ci ait une telle option, mais je n’y ai pas prêté une attention particulière.

Mais attention, il est probable que les données d’il y a 10 ans soient différentes de celles des 2 dernières années, donc tester uniquement sur des données récentes est idéal pour déboguer des éléments que vous savez être partout, mais vous voudrez aussi tester sur la base de données entière.

1 « J'aime »

Il y a un tas de choses différentes dans le mélange. L’importation est terminée à 99 %… Je dois juste revenir en arrière et intégrer les publications de la semaine dernière :slightly_smiling_face: Une fois que les sauts de ligne seront ajoutés et que ceci sera corrigé <LINK_TEXT text= tout devrait être bon :slight_smile:

1 « J'aime »

Voici ce que j’ai fait pour nettoyer un gros volume de mes publications après mon importation. J’ai utilisé l’IA pour fournir une explication à quelqu’un qui arrive de PhpBB. J’ai veillé jusqu’à 5 heures du matin pour que cela fonctionne :rofl::rofl::rofl:

Pour exécuter un script Ruby dans votre environnement Discourse qui traite les sujets du forum par lots de 1000, et applique des transformations spécifiques à chaque publication au sein de ces sujets, vous suivrez une séquence d’étapes pour accéder à votre serveur, entrer dans l’environnement approprié et exécuter le script. Voici un guide détaillé incluant le script lui-même :

Étape 1 : Connexion sécurisée à votre serveur

À l’aide d’un client Secure Shell (SSH) comme PuTTY pour Windows, connectez-vous à votre serveur où est hébergé le forum Discourse. Vous aurez besoin de l’adresse IP ou du nom de domaine de votre serveur, ainsi que de vos identifiants (nom d’utilisateur et mot de passe ou une clé SSH).

Étape 2 : Accéder au conteneur Docker de Discourse

Une fois connecté à votre serveur, naviguez jusqu’au répertoire d’installation de Discourse, généralement /var/discourse. Ensuite, entrez dans le conteneur Docker qui exécute Discourse en utilisant les commandes suivantes :

bash

cd /var/discourse
./launcher enter app

Étape 3 : Ouvrir la console Rails

À l’intérieur du conteneur Docker, vous pouvez interagir avec votre application Discourse via la console Rails. Il s’agit d’un environnement Ruby on Rails qui vous permet d’exécuter du code Ruby directement sur votre base de données et votre logique d’application Discourse. Démarrez la console avec :

bash

rails c

Étape 4 : Exécuter le script Ruby

Une fois la console Rails ouverte, vous êtes prêt à exécuter le script Ruby. Le script doit être préparé à l’avance et copié dans votre presse-papiers. Dans PuTTY, vous pouvez coller le script en cliquant avec le bouton droit de la souris ou en appuyant sur Maj + Ins.

Voici le script complet que vous utiliserez :

code

# Récupérer un tableau de tous les identifiants de sujet
topic_ids = Topic.pluck(:id)

# Définir la taille du lot
batch_size = 1000
current_batch_start = 0

while current_batch_start < topic_ids.length
  # Traiter un lot de 1000 sujets à la fois
  topic_ids[current_batch_start, batch_size].each do |topic_id|
    # Récupérer le sujet par son ID
    topic = Topic.find(topic_id)
  
    # Ignorer si le sujet est nul
    next if topic.nil?
  
    # Initialiser un compteur de publications transformées pour ce sujet
    transformed_count = 0

    # Itérer sur chaque publication dans le sujet
    topic.posts.each do |post|
      # Indicateur pour suivre si des transformations ont été effectuées
      transformed = false

      # Appliquer les transformations
      transformed |= post.raw.gsub!(/\<\\/?r\>/, '').present?
      transformed |= post.raw.gsub!(/\<\\/?s\>/, '').present?
      transformed |= post.raw.gsub!(/\<\\/?e\>/, '').present?
      transformed |= post.raw.gsub!(/\<\\/?QUOTE[^>]*\>/, '').present?
      transformed |= post.raw.gsub!(/\[quote=““([^”]+)””\]/, '[quote=\"\\1\"]').present?
      transformed |= post.raw.gsub!(/\\\\n/, "\\n").present?
      transformed |= post.raw.gsub!(/\[quote=([^\\s]+)\\s+post_id=\\d+\\s+time=\\d+\\s+user_id=\\d+\]/, '[quote=\"\\1\"]').present?
      transformed |= post.raw.gsub!(/\<URL url=\"([^\"]+)\"\>[^\<]*\<LINK_TEXT text=\"[^\"]+\"\>[^\<]+\<\/LINK_TEXT\>[^\<]*\<\/URL\>/, '\\1').present?
      transformed |= post.raw.gsub!(/\[\/quote\]/, "\\n[/quote]\\n").present?
      transformed |= post.raw.gsub!(/\\A\\n/, '').present?

      # Sauvegarder et rebaker la publication si des transformations ont eu lieu
      if transformed
        post.save!
        post.rebake!
        transformed_count += 1
      end
    end

    # Afficher le résultat pour le sujet actuel
    if transformed_count > 0
      puts "Transformed #{transformed_count} posts in topic #{topic_id}."
    else
      puts "No transformations were necessary for topic #{topic_id}."
    end
  end

  # Mettre à jour l'index de départ pour le lot suivant
  current_batch_start += batch_size

  # Vérifier s'il reste des sujets à traiter
  if current_batch_start < topic_ids.length
    puts "Completed a batch of #{batch_size} topics. Do you want to continue to the next batch? (yes/no)"
    response = gets.strip.downcase
    break unless response == 'yes'
  end
end

Comprendre le script et le traitement par lots

  • Traitement par lots : Cette approche vous permet de gérer de grands ensembles de données en petits morceaux gérables. Elle est particulièrement utile pour réduire la charge sur le serveur et pour les opérations qui peuvent prendre beaucoup de temps si elles sont effectuées toutes en même temps. Ici, elle est appliquée pour traiter les sujets Discourse par lots de 1000.

Voici à quoi cela devrait ressembler pendant son exécution.

No transformations were necessary for topic 19556.
No transformations were necessary for topic 35766.
No transformations were necessary for topic 35783.
No transformations were necessary for topic 35778.
No transformations were necessary for topic 35774.
No transformations were necessary for topic 35770.
Transformed 292 posts in topic 20234.
No transformations were necessary for topic 35781.
No transformations were necessary for topic 35779.
Transformed 242 posts in topic 20218.
Transformed 22 posts in topic 19522.
No transformations were necessary for topic 35771.
No transformations were necessary for topic 35767.
Transformed 2 posts in topic 22560.
No transformations were necessary for topic 35797.
No transformations were necessary for topic 35789.
No transformations were necessary for topic 35785.
No transformations were necessary for topic 31889.
Transformed 1 posts in topic 31831.
No transformations were necessary for topic 31792.
No transformations were necessary for topic 35794.
No transformations were necessary for topic 35815.
  • Fonctionnalité du script : Le script itère sur chaque ID de sujet récupéré de votre base de données Discourse, en appliquant des transformations spécifiées à chaque publication au sein de ces sujets.
2 « J'aime »

J’obtiens cette erreur (après migration, sur une installation standard fonctionnelle) lorsque j’essaie de changer le nom d’affichage d’un utilisateur (pas le nom d’utilisateur) pour inclure des caractères spéciaux. J’obtiens une popup d’ erreur interne du serveur lorsque j’essaie et les logs montrent la même erreur que @DDo.

Notamment, d’autres utilisateurs peuvent changer leur nom d’affichage pour inclure le même caractère (™). La différence pertinente semble être que les utilisateurs qui se sont connectés après la migration peuvent avoir des caractères UTF-8, mais les utilisateurs qui ne se sont pas connectés ne peuvent avoir que des caractères ASCII-8BIT.

Je suppose également que cette erreur serait résolue en supprimant discourse-migratepassword, mais je ne l’ai pas testé.

Est-ce un bug, ou quelque chose d’inhérent au fonctionnement de ce plugin ? Si c’est le premier cas, est-il préférable de créer un ticket sur Github pour le signaler ?

J’essaie de (re)construire un conteneur d’importation mais cela échoue :

FAILED
--------------------
Errno::ENOENT: No such file or directory @ rb_sysopen - /etc/service/unicorn/run
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/replace_command.rb:11:in `read'
replace failed with the params {"tag"=>"precompile", "filename"=>"/etc/service/unicorn/run", "from"=>"PRECOMPILE_ON_BOOT=1", "to"=>"PRECOMPILE_ON_BOOT=0"}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.

J’ai déjà désactivé tous les plugins, mais aucun changement.

Quelqu’un a-t-il une idée ?

C’est donc la première idée.

Oui, je n’ai rien trouvé qui m’indique une erreur… Je vais regarder à nouveau…

hooks:
  after_web_config:
    - exec:
        cd: /etc/service
        cmd:
        # - rm -R unicorn
          - rm -R nginx
          - rm -R cron

J’ai commenté la ligne - rm -R unicorn dans templates/import/phpbb3.template.yml et la construction s’est déroulée sans erreur.

Que s’est-il passé ici ? phpbb3.template.yml est la version de Github, vieille de deux ans. Il doit donc y avoir eu un changement ailleurs?!?

Cela pourrait venir d’avant leur passage d’Ubuntu à Debian. Ceux-ci ne seront probablement mis à jour que lorsque quelqu’un remarquera qu’ils ne fonctionnent plus.

Cela n’a pas beaucoup de sens pour moi que cette commande rm ait posé un problème, mais je n’y prête pas beaucoup attention si personne ne me paie. Et même dans ce cas, je ne me souviens pas y avoir prêté beaucoup d’attention. :slight_smile:

J’ai pensé que si le constructeur se plaint d’un fichier /etc/service/unicorn/run manquant et que c’est exactement ce qui est supprimé, j’ai essayé de commenter cette commande de suppression. :wink: Ça a marché.

Peut-être que quelqu’un qui en sait plus sur tout voudra vérifier et mettre à jour le script sur Github. Je peux aussi faire une PR - mais sans aucune connaissance de tout, je ne veux pas.

Mais passer d’Ubuntu à Debian change beaucoup de choses, c’est vrai.

1 « J'aime »

Tout d’abord, je suis un néophyte de Docker, il y a donc de fortes chances que j’aie fait une erreur.

J’ai une installation propre de Discourse sur un Droplet DigitalOcean exécutant Ubuntu 22.04 en utilisant leur application pré-construite. Le forum s’est bien construit et fonctionne dans la configuration standard.

Lorsque j’exécute /var/discourse/launcher rebuild import, j’obtiens ceci à la fin de la construction :

Errno::ENOENT: No such file or directory @ rb_sysopen - /etc/service/unicorn/run
Location of failure: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/replace_command.rb:11:in `read'
replace failed with the params {"tag"=>"precompile", "filename"=>"/etc/service/unicorn/run", "from"=>"PRECOMPILE_ON_BOOT=1", "to"=>"PRECOMPILE_ON_BOOT=0"}
bootstrap failed with exit code 1
** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one.
./discourse-doctor may help diagnose the problem.

Lorsque j’exécute : /var/discourse/launcher enter import
J’obtiens :

86_64 arch detected.
Error response from daemon: No such container: import

Est-ce à cause des erreurs en haut de ce message (et si oui, comment puis-je les corriger), ou que fais-je de mal ?

Avez-vous créé import.yml et démarré ce conteneur comme indiqué (je suis à peu près sûr) dans les instructions ?

Les instructions montrent la copie de app.yml vers import.yml et l’ajout de “templates/import/phpbb3.template.yml” à import.yml (ce que j’ai fait). Ensuite, vous reconstruisez l’importation, ce qui génère l’erreur dans mon OP. Je ne vois pas où il y a des instructions sur la création d’un bootstrap (?).

Les instructions sont assez simples, c’est pourquoi je suis confus quant à ce qui ne va pas.

# docker ps -a
CONTAINER ID   IMAGE                 COMMAND        CREATED        STATUS        PORTS                                                                      NAMES
81a2f335fd01   local_discourse/app   « /sbin/boot »   14 heures ago   Up 11 heures   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   app

Désolé. Rebuild effectue un bootstrap. Si terminé, le conteneur d’importation était en cours d’exécution.

Oh. Je suis vraiment désolé. Je n’ai pas compris ce qui se passait avant. Il semble que le modèle phpbb3 pourrait être incompatible avec les changements récents apportés à discourse_docker. Mais c’est tout ce que je peux dire sur mon téléphone.

Je pense que si vous supprimez une ligne dans le modèle phpbb3 qui supprime “/etc/service/unicorn/run”, cela pourrait permettre à la construction de se terminer.

1 « J'aime »

Jay, merci pour la réponse à ce problème. La compilation se termine maintenant correctement.

Problème suivant : Lorsque j’exécute : import_phpbb3.sh, j’obtiens :

Le processus d'importation phpBB3 démarre...

/usr/local/lib/ruby/3.3.0/psych/parser.rb:62:in `_native_parse': (unknown): n'a pas trouvé la clé attendue lors de l'analyse d'un bloc de mappage à la ligne 3, colonne 1 (Psych::SyntaxError)
        from /usr/local/lib/ruby/3.3.0/psych/parser.rb:62:in `parse'
        from /usr/local/lib/ruby/3.3.0/psych.rb:455:in `parse_stream'
        from /usr/local/lib/ruby/3.3.0/psych.rb:399:in `parse'
        from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/bootsnap-1.18.4/lib/bootsnap/compile_cache/yaml.rb:129:in `strict_load'
        from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/bootsnap-1.18.4/lib/bootsnap/compile_cache/yaml.rb:186:in `input_to_storage'
        from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/bootsnap-1.18.4/lib/bootsnap/compile_cache/yaml.rb:232:in `fetch'
        from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/bootsnap-1.18.4/lib/bootsnap/compile_cache/yaml.rb:232:in `load_file'
        from /var/www/discourse/script/import_scripts/phpbb3/support/settings.rb:10:in `load'
        from script/import_scripts/phpbb3.rb:20:in `<module:PhpBB3>'
        from script/import_scripts/phpbb3.rb:16:in `<module:ImportScripts>'
        from script/import_scripts/phpbb3.rb:15:in `<main>'

Je suppose qu’il n’aime pas quelque chose dans mon fichier settings.yml. Comment puis-je savoir ce qui pose problème ?

database:
  type: MySQL # actuellement seul MySQL est supporté
  host: localhost
  port: 3306
  username:
  password:
  schema: phpbb
  table_prefix: phpbb_ # Changez ceci si votre forum utilise un préfixe différent. Normalement, tous les noms de table commencent par phpbb_
  batch_size: 1000 # Ne changez pas ceci sauf si vous savez ce que vous faites. La valeur par défaut (1000) devrait fonctionner très bien.

import:
  # Définissez ceci si vous importez plusieurs forums phpBB dans un seul forum Discourse.
  #
  # Par exemple, lors de l'importation de plusieurs sites, préfixez tous les ID importés
  # avec 'first' pour éviter les conflits. Les exécutions d'importation ultérieures doivent avoir un
  # 'site_name' différent.
  #
  # site_name: first
  #
  site_name: Freedom Owners Forum

  # Créer de nouvelles catégories
  #
  # Par exemple, pour créer une catégorie parente et une sous-catégorie.
  #
  # new_categories:
  # - forum_id: foo
  #   name: Foo Category
  # - forum_id: bar
  #   name: Bar Category
  #   parent_id: foo
  #
  new_categories:
 - forum_id: general
   name: General
 - forum_id: systems
   name: Boat Systems
 - forum_id: photos
   name: Photos
 - forum_id: docs
   name: Manuals and Documentation
 - forum_id: buy
   name: Buy/Sell/Trade
 - forum_id: site
   name: Site Usage
 - forum_id: archives
   name: Archives

  # Mappages de catégories
  #
  # * "source_category_id" est l'ID du forum dans phpBB3
  # * "target_category_id" est soit un ID de forum de phpBB3, soit un "forum_id"
  #   provenant du paramètre "new_categories" (voir ci-dessus)
  # * "discourse_category_id" est un ID de catégorie de Discourse
  # * "skip" vous permet d'ignorer une catégorie lors de l'importation
  #
  # Utilisez "target_category_id" si vous souhaitez fusionner des catégories et utilisez
  # "discourse_category_id" si vous souhaitez importer un forum dans une catégorie existante
  # dans Discourse.
  #
  #  category_mappings:
  #    - source_category_id: 1
  #      target_category_id: foo
  #    - source_category_id: 2
  #      discourse_category_id: 42
  #    - source_category_id: 6
  #      skip: true
  #
  category_mappings:
  - source_category_id: 8
      target_category_id: systems
  - source_category_id: 7
      target_category_id: systems
  - source_category_id: 9
      target_category_id: systems
  - source_category_id: 10
      target_category_id: buy
  - source_category_id: 11
      target_category_id: general
  - source_category_id: 12
      target_category_id: general
  - source_category_id: 13
      target_category_id: general
  - source_category_id: 14
      target_category_id: general
  - source_category_id: 16
      target_category_id: docs
  - source_category_id: 17
      target_category_id: docs
  - source_category_id: 18
      target_category_id: general
  - source_category_id: 19
      target_category_id: general
  - source_category_id: 20
      target_category_id: general
  - source_category_id: 21
      target_category_id: docs
  - source_category_id: 22
      target_category_id: general
  - source_category_id: 23
      target_category_id: site
  - source_category_id: 24
      target_category_id: general
  - source_category_id: 25
      target_category_id: site
  - source_category_id: 42
      target_category_id: systems
  - source_category_id: 43
      target_category_id: docs
  - source_category_id: 44
      target_category_id: general
  - source_category_id: 45
      target_category_id: general
  - source_category_id: 46
      target_category_id: site
  - source_category_id: 48
      target_category_id: general
  - source_category_id: 56
      target_category_id: general
  - source_category_id: 58
      target_category_id: systems
  - source_category_id: 59
      skip: true
  - source_category_id: 60
      target_category_id: archives
  - source_category_id: 61
      target_category_id: archives
  - source_category_id: 62
      target_category_id: archives
  - source_category_id: 63
      target_category_id: archives
  - source_category_id: 64
      target_category_id: general
  - source_category_id: 65
      target_category_id: site

  # Mappages de tags
  #
  # Par exemple, les sujets importés de la catégorie phpBB 1 seront tagués
  # avec 'first-category', etc.
  #
  # tag_mappings:
  #   1:
  #   - first-category
  #   2:
  #   - second-category
  #   3:
  #   - third-category
  #
  tag_mappings: {}

  # Mappage du rang au niveau de confiance
  #
  # Mappe les niveaux de rang phpBB 3.x aux niveaux de confiance
  # Les utilisateurs avec un rang d'au moins 3000 auront TL3, etc.
  #
   rank_mapping:
     trust_level_1: 200
     trust_level_2: 1000
     trust_level_3: 3000

#  rank_mapping: {}

  # ATTENTION : N'activez pas cette option à moins de savoir ce que vous faites.
  # Cela risque de casser la conversion BBCode vers Markdown et de ralentir votre importation.
  use_bbcode_to_md: false

  # Ceci est le chemin vers le répertoire racine de votre installation phpBB actuelle (ou une copie de celle-ci).
  # L'importateur s'attend à trouver les répertoires /files et /images dans le répertoire de base.
  # Vous devez changer ceci pour quelque chose comme /var/www/phpbb si vous n'utilisez pas l'importateur basé sur Docker.
  # Ceci n'est nécessaire que si vous souhaitez importer des avatars, des pièces jointes ou des smileys personnalisés.
  phpbb_base_dir: /shared/import/data

  site_prefix:
    # ceci est nécessaire pour réécrire les liens internes dans les messages
    original: freedomyachts.org    # sans http(s)://
    new: https://test.freedomyachts.org       # avec http:// ou https://

  # Activez ceci si vous souhaitez rediriger les anciens liens du forum vers les nouveaux emplacements.
  permalinks:
    categories: true  # redirige   /viewforum.php?f=1            vers  /c/category-name
    topics: true      # redirige   /viewtopic.php?f=6&t=43       vers  /t/topic-name/81
    posts: false      # redirige   /viewtopic.php?p=2455#p2455   vers  /t/topic-name/81/4
    # Ajoutez un préfixe à chaque type de lien, par exemple 'forum' pour rediriger /forum/viewtopic.php?f=6&t=43 vers /t/topic-na
me/81
    # Laissez vide si votre forum n'a pas été installé dans un sous-dossier.
    prefix:

  avatars:
    uploaded: true  # importer les avatars téléchargés
    gallery: true   # importer les avatars prédéfinis proposés par phpBB
    remote: false   # ATTENTION : Cela peut considérablement ralentir votre importation. Il essaiera de télécharger les avatars distants.

  # Lorsque vrai : les utilisateurs anonymes sont importés comme des utilisateurs suspendus. Ils ne peuvent pas se connecter et n'ont pas d'adresse e-mail.
  # Lorsque faux : l'utilisateur système sera utilisé pour tous les utilisateurs anonymes.
  anonymous_users: true

  # Activez ceci si vous souhaitez importer des hachages de mot de passe afin d'utiliser le plugin "migratepassword".
  # Cela permettra aux utilisateurs de se connecter avec leur mot de passe actuel.
  # Le plugin est disponible à l'adresse : https://github.com/discoursehosting/discourse-migratepassword
  passwords: true

  # Par défaut, toutes les choses suivantes sont importées. Vous pouvez les désactiver en les réglant sur false.
  bookmarks: true
  attachments: true
  private_messages: true
  polls: true

  # Importer les likes de l'extension "Thanks for posts" de phpBB
  likes: false

  # Lorsque vrai : chaque utilisateur importé aura le nom d'utilisateur d'origine de phpBB comme nom
  # Lorsque faux : le nom de chaque utilisateur importé sera vide, sauf si le nom d'utilisateur a été modifié lors de l'importation
  username_as_name: false

  # Mapper les Emojis aux smileys utilisés dans phpBB. La plupart des smileys par défaut ont déjà un mappage, mais vous pouvez remplacer
  # les mappages ici si certains ne vous plaisent pas.
  # La syntaxe de mappage est : emoji_name: 'smiley_in_phpbb'
  # Ou mapper plusieurs smileys à un seul Emoji : emoji_name: ['smiley1', 'smiley2']
  emojis:
    # voici deux exemples de mappages...
    smiley: [':D', ':-D', ':grin:']
    heart: ':love:'

  # Mapper les champs de profil personnalisés de phpBB aux champs utilisateur personnalisés dans Discourse (fonctionne pour phpBB 3.1+)
  #
  #  custom_fields:
  #    - phpbb_field_name: "company_name"
  #      discourse_field_name: "Company"
  #    - phpbb_field_name: "facebook"
  #      discourse_field_name: "Facebook"
  custom_fields: []

Il vous manque le nom d’utilisateur et le mot de passe.