Ein phpBB3-Forum zu Discourse migrieren

Großartig! Schön, dass Sie es gelöst haben. Was war der Trick?

Hoffentlich brauchen Sie das nicht Discourse Migration - Literate Computing

Ich musste import_phpbb3.sh immer wieder ausführen, bis alle Kategorien importiert waren. Das Skript lief über Nacht, und eine Netzwerkunterbrechung verursachte auf meiner Seite einen Fehler. Ich habe das Skript neu gestartet und glaube, dass es jetzt funktioniert. Wenn es weitere Probleme gibt, muss ich die MySQL-Tabelle bereinigen.

1 „Gefällt mir“

Hallo zusammen! Das Forum ist größtenteils betriebsbereit… sieht fantastisch aus. Ich schreibe ein Skript, um das [/quote]-Tag zu ändern. Das Board ist ziemlich alt, stammt aus dem Jahr 2001, und ein einfacher Abstand oberhalb und unterhalb des schließenden Tags behebt vieles. Ich bin sicher, es gab eine Einstellung, die ich im Importskript hätte aktualisieren können, aber es ist meine erste Migration, also lerne ich unterwegs.

Frage: Ich korrigiere 10 Jahre an Daten und habe ein live phpBB-Board laufen. Das dauert eine Weile. Kann ich das Skript import_phpbb3.sh verwenden, um die letzten X Tage an Beiträgen aus meinem Forum zu importieren? Ich denke, es ist nur eine Zusammenführung, was das Skript angeht. Ich kann die Daten der letzten 7 Tage aus MySQL exportieren… aber ich weiß nicht, ob das funktionieren würde. Gedanken dazu?

Ich habe noch nicht überprüft, ob das Skript funktioniert… ich habe es mit kleinen Teilen getestet, aber nicht im Stapelbetrieb. Das Problem, das ich hatte, war ein Abstand oberhalb und unterhalb des schließenden Tags. Jetzt gehe ich Rasen mähen und komme später zurück, um nachzusehen:

batch_size = 1000
total_processed = 0

# Verarbeitet Beiträge im gesamten Forum in Stapeln
Post.find_in_batches(batch_size: batch_size) do |batch|
  updated_posts = []

  batch.each do |post|
    original_raw = post.raw
    # Wendet die Korrektur an
    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)  # Direkte Spaltenaktualisierung, um Callbacks zu überspringen
      updated_posts << post
      total_processed += 1
    end
  end

  # Nur die aktualisierten Beiträge neu backen, um die Last zu minimieren
  updated_posts.each(&:rebake!)

  puts "Ein Stapel von #{batch.size} wurde verarbeitet. Bisher insgesamt verarbeitet: #{total_processed}."
end

puts "Insgesamt #{total_processed} Beiträge im gesamten Forum verarbeitet."
1 „Gefällt mir“

Dies funktionierte bei einzelnen Beiträgen:

post = Post.find(344572) # Ersetzen Sie 344572 durch die korrekte ID

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

Ich würde das Skript so ändern, dass es dies beim Import der Daten tut. Ich bin überrascht, dass es das nicht bereits tut. Es lohnt sich, die Dinge genauer zu betrachten.

Bei mehreren Skripten, an denen ich gearbeitet habe, habe ich eine IMPORT_AFTER-Umgebungseinstellung hinzugefügt und die Abfragen so geändert, dass sie where some_timestamp > import_after_data enthalten. Ich glaube nicht, dass dieses eine solche Option hat, aber ich habe nicht genau darauf geachtet.

Aber Vorsicht: Es ist wahrscheinlich, dass Dinge aus Daten von vor 10 Jahren anders sind als die der letzten 2 Jahre. Daher ist das Testen nur mit aktuellen Daten großartig für die Fehlersuche bei Dingen, die überall vorkommen. Sie werden auch die gesamte Datenbank testen wollen.

1 „Gefällt mir“

Es gibt eine Menge verschiedener Dinge in der Mischung. Der Import ist zu etwa 99 % abgeschlossen… Ich muss nur zurückgehen und die Posts der letzten Wochen einsaugen :slightly_smiling_face: Sobald die Zeilenumbrüche hinzugefügt und dies behoben ist, sollte alles in Ordnung sein :slight_smile:

1 „Gefällt mir“

Hier ist, was ich getan habe, um einen großen Teil meiner Beiträge nach dem Import zu bereinigen. Ich habe KI verwendet, um jemandem, der von PhpBB kommt, eine Erklärung zu geben. Ich war bis 5 Uhr morgens damit beschäftigt, ihn zum Laufen zu bringen :rofl::rofl::rofl:

Um ein Ruby-Skript in Ihrer Discourse-Umgebung auszuführen, das Forenthemen in Stapeln von 1000 verarbeitet und bestimmte Transformationen auf jeden Beitrag innerhalb dieser Themen anwendet, befolgen Sie eine Reihe von Schritten, um auf Ihren Server zuzugreifen, die entsprechende Umgebung aufzurufen und das Skript auszuführen. Hier ist eine detaillierte Anleitung, einschließlich des Skripts selbst:

Schritt 1: Sichere Verbindung zu Ihrem Server

Verwenden Sie einen Secure Shell (SSH)-Client wie PuTTY für Windows, um eine Verbindung zu Ihrem Server herzustellen, auf dem das Discourse-Forum gehostet wird. Sie benötigen die IP-Adresse oder den Domainnamen Ihres Servers sowie Ihre Anmeldeinformationen (Benutzername und Passwort oder einen SSH-Schlüssel).

Schritt 2: Zugriff auf den Discourse Docker Container

Sobald Sie sich auf Ihrem Server angemeldet haben, navigieren Sie zum Installationsverzeichnis von Discourse, normalerweise /var/discourse. Treten Sie dann mit den folgenden Befehlen in den Docker-Container ein, der Discourse ausführt:

bash

cd /var/discourse
./launcher enter app

Schritt 3: Öffnen der Rails Console

Innerhalb des Docker-Containers können Sie mit Ihrer Discourse-Anwendung über die Rails-Konsole interagieren. Dies ist eine Ruby on Rails-Umgebung, die es Ihnen ermöglicht, Ruby-Code direkt gegen Ihre Discourse-Datenbank und Anwendungslogik auszuführen. Starten Sie die Konsole mit:

bash

rails c

Schritt 4: Ausführen des Ruby-Skripts

Wenn die Rails-Konsole geöffnet ist, können Sie das Ruby-Skript ausführen. Das Skript sollte im Voraus vorbereitet und in Ihre Zwischenablage kopiert werden. In PuTTY können Sie das Skript einfügen, indem Sie mit der rechten Maustaste klicken oder Umschalt + Einfügen drücken.

Hier ist das vollständige Skript, das Sie verwenden werden:

code

# Ruft ein Array aller Themen-IDs ab
topic_ids = Topic.pluck(:id)

# Definiert die Stapelgröße
batch_size = 1000
current_batch_start = 0

while current_batch_start < topic_ids.length
  # Verarbeitet 1000 Themen auf einmal
  topic_ids[current_batch_start, batch_size].each do |topic_id|
    # Ruft das Thema anhand der ID ab
    topic = Topic.find(topic_id)

    # Überspringt, wenn das Thema nil ist
    next if topic.nil?

    # Initialisiert einen Zähler für transformierte Beiträge in diesem Thema
    transformed_count = 0

    # Iteriert über jeden Beitrag innerhalb des Themas
    topic.posts.each do |post|
      # Flag, um zu verfolgen, ob Transformationen vorgenommen wurden
      transformed = false

      # Wendet Transformationen an
      transformed |= post.raw.gsub!(/\u003c\/?r\u003e/, '').present?
      transformed |= post.raw.gsub!(/\u003c\/?s\u003e/, '').present?
      transformed |= post.raw.gsub!(/\u003c\/?e\u003e/, '').present?
      transformed |= post.raw.gsub!(/\u003c\/?QUOTE[^\u003e]*\u003e/, '').present?
      transformed |= post.raw.gsub!(/\u003cquote=““([^”]+)””\u003e/, '[quote="\\1"]').present?
      transformed |= post.raw.gsub!(/\\\\n/, "\n").present?
      transformed |= post.raw.gsub!(/\u003cquote=([^\\s]+\\s+post_id=\\d+\\s+time=\\d+\\s+user_id=\\d+\u003e/, '[quote="\\1"]').present?
      transformed |= post.raw.gsub!(/\u003cURL url="([^"]+)"\u003e.*?\u003cLINK_TEXT text="[^"]+"\u003e[^\u003c]+\u003c\/LINK_TEXT\u003e.*?\u003c\/URL\u003e/, '\\1').present?
      transformed |= post.raw.gsub!(/\u003c\/quote\u003e/, "\n[/quote]\n").present?
      transformed |= post.raw.gsub!(/\A\n/, '').present?

      # Speichert und backt den Beitrag neu, wenn Transformationen stattgefunden haben
      if transformed
        post.save!
        post.rebake!
        transformed_count += 1
      end
    end

    # Gibt das Ergebnis für das aktuelle Thema aus
    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

  # Aktualisiert den Startindex für den nächsten Stapel
  current_batch_start += batch_size

  # Prüft, ob weitere Themen zu verarbeiten sind
  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

Verständnis des Skripts und der Stapelverarbeitung

  • Stapelverarbeitung: Dieser Ansatz ermöglicht es Ihnen, große Datenmengen in kleineren, überschaubaren Blöcken zu verarbeiten. Dies ist besonders nützlich, um die Serverlast zu reduzieren und für Vorgänge, die lange dauern können, wenn sie auf einmal durchgeführt werden. Hier wird es angewendet, um Discourse-Themen in Stapeln von 1000 zu verarbeiten.

So sollte es während der Ausführung aussehen.

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.
  • Skriptfunktionalität: Das Skript durchläuft jede Themen-ID, die aus Ihrer Discourse-Datenbank abgerufen wird, und wendet auf jeden Beitrag innerhalb dieser Themen die angegebenen Transformationen an.
2 „Gefällt mir“

Ich erhalte diesen Fehler (nach der Migration, bei einer funktionierenden Standardinstallation), wenn ich versuche, den Anzeigenamen eines Benutzers (nicht den Benutzernamen) zu ändern, um Sonderzeichen einzufügen. Ich erhalte ein Popup mit einem internen Serverfehler, wenn ich es versuche, und die Protokolle zeigen denselben Fehler wie @DDo.

Bemerkenswerterweise können andere Benutzer ihren Anzeigenamen ändern, um dasselbe Zeichen (™) einzufügen. Der relevante Unterschied scheint zu sein, dass Benutzer, die sich nach der Migration angemeldet haben, UTF-8-Zeichen verwenden können, aber Benutzer, die sich nicht angemeldet haben, nur ASCII-8BIT verwenden können.

Ich gehe auch davon aus, dass dieser Fehler durch das Entfernen von discourse-migratepassword behoben würde, habe es aber nicht getestet.

Ist dies ein Fehler oder etwas, das diesem Plugin innewohnt? Wenn ersteres, ist es am besten, ein Problem auf Github zu melden?

Ich versuche, einen Import-Container zu (re)builden, aber es schlägt fehl:

FAILED
--------------------
Errno::ENOENT: No such file or directory @ rb_sysopen - /etc/service/unicorn/run
Ort des Fehlschlags: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/replace_command.rb:11:in `read'
replace fehlgeschlagen mit den Parametern {"tag"=>"precompile", "filename"=>"/etc/service/unicorn/run", "from"=>"PRECOMPILE_ON_BOOT=1", "to"=>"PRECOMPILE_ON_BOOT=0"}
bootstrap fehlgeschlagen mit exit code 1
** FAILED TO BOOTSTRAP ** bitte scrolle nach oben und suche nach früheren Fehlermeldungen, es kann mehr als eine geben.
./discourse-doctor kann helfen, das Problem zu diagnostizieren.

Ich habe bereits alle Plugins deaktiviert, aber keine Änderung.

Hat jemand eine Idee?

Das ist also die erste Idee.

Ja, ich habe nichts gefunden, das mir einen Fehler anzeigt/aufzeigt… Ich werde noch einmal nachsehen…

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

Ich habe die Zeile - rm -R unicorn in templates/import/phpbb3.template.yml auskommentiert und der Build wurde ohne Fehler durchgeführt.

Was ist hier passiert? phpbb3.template.yml ist die Version von Github, zwei Jahre alt. Es muss also eine Änderung an anderer Stelle geben?!?

Das könnte von davor sein, als sie von Ubuntu auf Debian umgestiegen sind. Diese werden wahrscheinlich nur aktualisiert, wenn jemand bemerkt, dass sie nicht mehr funktionieren.

Es ergibt für mich nicht viel Sinn, dass rm ein Problem war, aber ich achte nicht sehr auf solche Dinge, wenn mir niemand dafür bezahlt. Und selbst dann erinnere ich mich nicht, dass ich dem viel Aufmerksamkeit geschenkt hätte. :slight_smile:

Ich dachte, wenn sich der Ersteller über eine fehlende Datei /etc/service/unicorn/run beschwert und genau diese entfernt wird, habe ich versucht, diesen Entfernungsbefehl zu kommentieren. :wink: Hat funktioniert.

Vielleicht möchte jemand mit mehr Wissen darüber dies überprüfen und ein Update auf Github im Skript vornehmen. Ich kann auch einen PR erstellen – aber ohne jegliches Wissen darüber möchte ich das nicht.

Aber die Umstellung von Ubuntu auf Debian ändert vieles, das stimmt.

1 „Gefällt mir“

Zuerst einmal bin ich ein Docker-Neuling, daher ist es gut möglich, dass ich etwas vermasselt habe.

Ich habe eine saubere Installation von Discourse auf einem DigitalOcean Droplet mit Ubuntu 22.04, das die vorgefertigte App verwendet. Das Forum wurde problemlos erstellt und läuft in der Standardkonfiguration.

Wenn ich /var/discourse/launcher rebuild import ausführe, erhalte ich am Ende des Builds Folgendes:

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.

Wenn ich ausführe: /var/discourse/launcher enter import
Erhalte ich:

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

Liegt das an den Fehlern am Anfang dieses Beitrags (und wenn ja, wie behebe ich das), oder mache ich etwas falsch?

Haben Sie import.yml erstellt und diesen Container wie in den Anweisungen beschrieben gestartet?

Die Anweisungen zeigen, wie man app.yml nach import.yml kopiert und “templates/import/phpbb3.template.yml” zu import.yml hinzufügt (was ich getan habe). Dann baut man import neu auf, was den Fehler in meiner OP erzeugt. Ich sehe nicht, wo es Anweisungen zum Erstellen eines Bootstrap (?) gibt.

Die Anweisungen sind ziemlich einfach, weshalb ich verwirrt bin, was schiefgeht.

# docker ps -a
CONTAINER ID   IMAGE                 COMMAND        CREATED        STATUS        PORTS                                                                      NAMES
81a2f335fd01   local_discourse/app   „/sbin/boot“   14 Stunden   Hoch 11 Stunden   0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   app

Entschuldigung. Rebuild führt einen Bootstrap durch. Wenn fertig, lief der Import-Container.

Oh. Es tut mir sehr leid. Ich habe nicht mitbekommen, was vorher passiert ist. Es sieht so aus, als ob die phpbb3-Vorlage mit den jüngsten Änderungen an discourse_docker inkompatibel sein könnte. Aber das ist alles, was ich auf meinem Handy sagen kann.

Ich denke, wenn Sie eine Zeile in der phpbb3-Vorlage löschen, die “/etc/service/unicorn/run” löscht, könnte dies den Build abschließen.

1 „Gefällt mir“

Jay, danke für die Antwort auf dieses Problem. Der Build wird jetzt ordnungsgemäß abgeschlossen.

Nächstes Problem: Wenn ich import_phpbb3.sh ausführe, erhalte ich:

Der phpBB3-Import wird gestartet...

/usr/local/lib/ruby/3.3.0/psych/parser.rb:62:in `_native_parse': (unknown): did not find expected key while parsing a block mapping at line 3 column 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>'

Ich vermute, dass etwas in meiner settings.yml-Datei nicht stimmt. Wie kann ich feststellen, woran es liegt?

database:
  type: MySQL # currently only MySQL is supported
  host: localhost
  port: 3306
  username:
  password:
  schema: phpbb
  table_prefix: phpbb_ # Change this, if your forum is using a different prefix. Usually all table names start wi
th phpbb_
  batch_size: 1000 # Don't change this unless you know what you're doing. The default (1000) should work just fin
e.

import:
  # Set this if you import multiple phpBB forums into a single Discourse forum.
  #
  # For example, when importing multiple sites, prefix all imported IDs
  # with 'first' to avoid conflicts. Subsequent import runs must have a
  # different 'site_name'.
  #
  # site_name: first
  #
  site_name: Freedom Owners Forum

  # Create new categories
  #
  # For example, to create a parent category and a subcategory.
  #
  # 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

  # Category mappings
  #
  # * "source_category_id" is the forum ID in phpBB3
  # * "target_category_id" is either a forum ID from phpBB3 or a "forum_id"
  #   from the "new_categories" setting (see above)
  # * "discourse_category_id" is a category ID from Discourse
  # * "skip" allows you to ignore a category during import
  #
  # Use "target_category_id" if you want to merge categories and use
  # "discourse_category_id" if you want to import a forum into an existing
  # category in 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

  # Tag mappings
  #
  # For example, imported topics from phpBB category 1 will be tagged
  # with 'first-category', etc.
  #
  # tag_mappings:
  #   1:
  #   - first-category
  #   2:
  #   - second-category
  #   3:
  #   - third-category
  #
  tag_mappings: {}

  # Rank to trust level mapping
  #
  # Map phpBB 3.x rank levels to trust level
  # Users with rank at least 3000 will have TL3, etc.
  #
   rank_mapping:
     trust_level_1: 200
     trust_level_2: 1000
     trust_level_3: 3000

#  rank_mapping: {}

  # WARNING: Do not activate this option unless you know what you are doing.
  # It will probably break the BBCode to Markdown conversion and slows down your import.
  use_bbcode_to_md: false

  # This is the path to the root directory of your current phpBB installation (or a copy of it).
  # The importer expects to find the /files and /images directories within the base directory.
  # You need to change this to something like /var/www/phpbb if you are not using the Docker based importer.
  # This is only needed if you want to import avatars, attachments or custom smilies.
  phpbb_base_dir: /shared/import/data

  site_prefix:
    # this is needed for rewriting internal links in posts
    original: freedomyachts.org    # without http(s)://
    new: https://test.freedomyachts.org       # with http:// or https://

  # Enable this, if you want to redirect old forum links to the new locations.
  permalinks:
    categories: true  # redirects   /viewforum.php?f=1            to  /c/category-name
    topics: true      # redirects   /viewtopic.php?f=6&t=43       to  /t/topic-name/81
    posts: false      # redirects   /viewtopic.php?p=2455#p2455   to  /t/topic-name/81/4
    # Append a prefix to each type of link, e.g. 'forum' to redirect /forum/viewtopic.php?f=6&t=43 to /t/topic-na
me/81
    # Leave it empty if your forum wasn't installed in a subfolder.
    prefix:

  avatars:
    uploaded: true  # import uploaded avatars
    gallery: true   # import the predefined avatars phpBB offers
    remote: false   # WARNING: This can considerably slow down your import. It will try to download remote avatar
s.

  # When true: Anonymous users are imported as suspended users. They can't login and have no email address.
  # When false: The system user will be used for all anonymous users.
  anonymous_users: true

  # Enable this, if you want import password hashes in order to use the "migratepassword" plugin.
  # This will allow users to login with their current password.
  # The plugin is available at: https://github.com/discoursehosting/discourse-migratepassword
  passwords: true

  # By default all the following things get imported. You can disable them by setting them to false.
  bookmarks: true
  attachments: true
  private_messages: true
  polls: true

  # Import likes from the phpBB's "Thanks for posts" extension
  likes: false

  # When true: each imported user will have the original username from phpBB as its name
  # When false: the name of each imported user will be blank unless the username was changed during import
  username_as_name: false

  # Map Emojis to smilies used in phpBB. Most of the default smilies already have a mapping, but you can override
  # the mappings here, if you don't like some of them.
  # The mapping syntax is: emoji_name: 'smiley_in_phpbb'
  # Or map multiple smilies to one Emoji: emoji_name: ['smiley1', 'smiley2']
  emojis:
    # here are two example mappings...
    smiley: [':D', ':-D', ':grin:']
    heart: ':love:'

  # Map custom profile fields from phpBB to custom user fields in Discourse (works for phpBB 3.1+).
  #
  #  custom_fields:
  #    - phpbb_field_name: "company_name"
  #      discourse_field_name: "Company"
  #    - phpbb_field_name: "facebook"
  #      discourse_field_name: "Facebook"
  custom_fields: []

Sie haben den Benutzernamen und das Passwort vergessen.