Migrar un foro phpBB3 a Discourse

¡Genial! Me alegra que lo hayas solucionado. ¿Cuál fue el truco?

Espero que no necesites esto Discourse Migration - Literate Computing

Tuve que seguir ejecutando import_phpbb3.sh hasta que se importaron todas las categorías. El script se ejecutó durante la noche y una interrupción de la red causó algún error de mi parte. Reinicié el script y creo que ahora está funcionando. Si hay más problemas, tendré que entrar y limpiar la tabla de MySQL.

1 me gusta

Hola a todos! El foro está casi en funcionamiento… se ve fantástico. Estoy escribiendo un script para modificar la etiqueta [/quote]. El foro es bastante antiguo, data de 2001, y simplemente añadir un espacio arriba y abajo de la etiqueta de cierre soluciona mucho. Estoy seguro de que había una configuración que podría haber actualizado en el script de importación, pero es mi primera vez migrando, así que estoy aprendiendo sobre la marcha.

Pregunta: Estoy arreglando 10 años de datos y tengo un foro phpBB en vivo funcionando. Está llevando un poco de tiempo. ¿Puedo usar el script import_phpbb3.sh para importar los últimos X días de publicaciones de mi foro? Creo que es solo una fusión en lo que respecta al script. Puedo exportar los últimos 7 días de datos de MySQL… pero no sé si eso funcionaría. ¿Opiniones?

No he verificado si el script está funcionando… lo probé en partes pequeñas, pero no en lotes. El problema que tuve fue un espacio arriba y abajo de la etiqueta de cierre. Ahora voy a ir a cortar el césped y volveré a comprobar más tarde:

batch_size = 1000
total_processed = 0

# Procesa las publicaciones en todo el sitio en lotes
Post.find_in_batches(batch_size: batch_size) do |batch|
  updated_posts = []

  batch.each do |post|
    original_raw = post.raw
    # Aplica la corrección
    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)  # Actualización directa de columna para omitir callbacks
      updated_posts << post
      total_processed += 1
    end
  end

  # Vuelve a hornear solo las publicaciones actualizadas para minimizar la carga
  updated_posts.each(&:rebake!)

  puts "Procesado un lote de #{batch.size}. Total procesado hasta ahora: #{total_processed}."
end

puts "Total de #{total_processed} publicaciones procesadas en todo el sitio."
1 me gusta

Esto funcionó en publicaciones individuales:

post = Post.find(344572) # Reemplaza 344572 con el ID correcto

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

Modificaría el script para hacer esto al importar los datos. Me sorprende que aún no lo haga. Vale la pena echar un vistazo más de cerca a las cosas.

En varios scripts en los que he trabajado, he agregado una configuración de entorno IMPORT_AFTER y modificado las consultas para incluir where some_timestamp > import_after_data. No creo que este tenga tal opción, pero no he prestado mucha atención.

Pero ten cuidado, es probable que las cosas de hace 10 años sean diferentes a las de los últimos 2 años, por lo que probar solo con datos recientes es excelente para depurar cosas que sabes que están en todas partes, también querrás probar con toda la base de datos.

1 me gusta

Hay un montón de cosas diferentes en la mezcla. La importación está completa en un 99 %… solo necesito volver y absorber las últimas semanas de publicaciones :slightly_smiling_face: Una vez que se agreguen los saltos de línea y se solucione esto \u003cLINK_TEXT text= todo debería estar bien :slight_smile:

1 me gusta

Aquí tienes lo que hice para limpiar una gran parte de mis publicaciones después de importar. Le pedí a la IA que proporcionara una explicación a alguien que venía de PhpBB. Estuve despierto hasta las 5 de la mañana intentando que funcionara :rofl::rofl::rofl:

Para ejecutar un script de Ruby dentro de tu entorno de Discourse que procesa temas del foro en lotes de 1000, y aplica transformaciones específicas a cada publicación dentro de esos temas, seguirás una secuencia de pasos para acceder a tu servidor, ingresar al entorno apropiado y ejecutar el script. Aquí tienes una guía detallada que incluye el script en sí:

Paso 1: Conéctate de forma segura a tu servidor

Usando un cliente Secure Shell (SSH) como PuTTY para Windows, conéctate a tu servidor donde está alojado el foro de Discourse. Necesitarás la dirección IP o el nombre de dominio de tu servidor, así como tus credenciales (nombre de usuario y contraseña o una clave SSH).

Paso 2: Accede al contenedor Docker de Discourse

Una vez conectado a tu servidor, navega al directorio de instalación de Discourse, típicamente /var/discourse. Luego, ingresa al contenedor Docker que ejecuta Discourse usando los siguientes comandos:

bash

cd /var/discourse
./launcher enter app

Paso 3: Abre la consola de Rails

Dentro del contenedor Docker, puedes interactuar con tu aplicación de Discourse a través de la consola de Rails. Este es un entorno Ruby on Rails que te permite ejecutar código Ruby directamente contra tu base de datos y lógica de aplicación de Discourse. Inicia la consola con:

bash

rails c

Paso 4: Ejecuta el script de Ruby

Con la consola de Rails abierta, estás listo para ejecutar el script de Ruby. El script debe estar preparado de antemano y copiado en tu portapapeles. En PuTTY, puedes pegar el script haciendo clic derecho o presionando Shift + Insert.

Aquí tienes el script completo que usarás:

code

# Recupera una matriz de todos los IDs de temas
topic_ids = Topic.pluck(:id)

# Define el tamaño del lote
batch_size = 1000
current_batch_start = 0

while current_batch_start < topic_ids.length
  # Procesa un lote de 1000 temas a la vez
  topic_ids[current_batch_start, batch_size].each do |topic_id|
    # Obtiene el tema por ID
    topic = Topic.find(topic_id)
  
    # Omite si el tema es nulo
    next if topic.nil?
  
    # Inicializa un contador de publicaciones transformadas para este tema
    transformed_count = 0

    # Itera sobre cada publicación dentro del tema
    topic.posts.each do |post|
      # Bandera para rastrear si se han realizado transformaciones
      transformed = false

      # Aplica transformaciones
      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?

      # Guarda y vuelve a hornear la publicación si se han realizado transformaciones
      if transformed
        post.save!
        post.rebake!
        transformed_count += 1
      end
    end

    # Muestra el resultado para el tema actual
    if transformed_count > 0
      puts "Transformadas #{transformed_count} publicaciones en el tema #{topic_id}."
    else
      puts "No fueron necesarias transformaciones para el tema #{topic_id}."
    end
  end

  # Actualiza el índice de inicio para el siguiente lote
  current_batch_start += batch_size

  # Comprueba si hay más temas que procesar
  if current_batch_start < topic_ids.length
    puts "Lote de #{batch_size} temas completado. ¿Quieres continuar con el siguiente lote? (sí/no)"
    response = gets.strip.downcase
    break unless response == 'yes'
  end
end

Comprensión del script y el procesamiento por lotes

  • Procesamiento por lotes: Este enfoque te permite manejar grandes conjuntos de datos en fragmentos pequeños y manejables. Es particularmente útil para reducir la carga en el servidor y para operaciones que pueden tardar mucho tiempo en completarse si se hacen todas a la vez. Aquí, se aplica para procesar temas de Discourse en lotes de 1000.

Así es como debería verse mientras se ejecuta.

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.
  • Funcionalidad del script: El script itera sobre cada ID de tema recuperado de tu base de datos de Discourse, aplicando las transformaciones especificadas a cada publicación dentro de esos
2 Me gusta

Estoy recibiendo este error (después de la migración, en una instalación estándar que funciona) al intentar cambiar el nombre de visualización de un usuario (no el nombre de usuario) para incluir caracteres especiales. Obtengo una ventana emergente de error interno del servidor cuando lo intento y los registros muestran el mismo error que @DDo.

Notablemente, otros usuarios pueden cambiar su nombre de visualización para incluir el mismo carácter (™). La diferencia relevante parece ser que los usuarios que han iniciado sesión después de la migración pueden tener caracteres UTF-8, pero los usuarios que no han iniciado sesión solo pueden tener ASCII-8BIT.

También supongo que este error se resolvería eliminando discourse-migratepassword, pero no lo he probado.

¿Es esto un error o algo inherente a hacer que ese plugin funcione? Si es lo primero, ¿es mejor crear un problema en Github para informarlo?

Estoy intentando (re)construir un contenedor de importación pero falla:

FALLÓ
--------------------
Errno::ENOENT: No existe tal archivo o directorio @ rb_sysopen - /etc/service/unicorn/run
Ubicación del fallo: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.2.1/lib/pups/replace_command.rb:11:in `read'
reemplazo falló con los parámetros {"tag"=>"precompile", "filename"=>"/etc/service/unicorn/run", "from"=>"PRECOMPILE_ON_BOOT=1", "to"=>"PRECOMPILE_ON_BOOT=0"}
el arranque falló con el código de salida 1
** FALLÓ EL ARRANQUE ** por favor desplácese hacia arriba y busque mensajes de error anteriores, puede haber más de uno.
./discourse-doctor puede ayudar a diagnosticar el problema.

Ya deshabilité todos los plugins, pero no hubo cambios.

¿Alguien tiene alguna idea?

Esa es la primera idea.

Sí, no encontré nada que me mostrara/apuntara a un error… Volveré a buscar…

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

Comenté la línea - rm -R unicorn en templates/import/phpbb3.template.yml y la compilación se completó sin el error.

¿Qué sucedió aquí? phpbb3.template.yml es la versión de Github, de hace dos años. Así que debe haber un cambio en otro lugar?!?

Eso podría ser de antes de que cambiaran de Ubuntu a Debian. Es probable que solo se actualicen cuando alguien se dé cuenta de que ya no funcionan.

No tiene mucho sentido para mí que ese rm fuera un problema, pero no les presto mucha atención si alguien no me paga. E incluso entonces no recuerdo haber prestado mucha atención a ese. :slight_smile:

Pensé que si el compilador se queja de que falta /etc/service/unicorn/run y se elimina exactamente eso, intenté comentar ese comando de eliminación. :wink: Funcionó.

Quizás alguien con más conocimiento sobre todo quiera verificar y actualizar en Github el script. También puedo hacer una PR, pero sin ningún conocimiento sobre todo, no quiero.

Pero cambiar de Ubuntu a Debian cambia mucho, es cierto.

1 me gusta

Para empezar, soy un neófito en Docker, así que es muy probable que haya estropeado algo.

Tengo una instalación limpia de Discourse en un Droplet de DigitalOcean con Ubuntu 22.04 utilizando su aplicación precompilada. El foro se compiló bien y funciona con la configuración estándar.

Cuando ejecuto /var/discourse/launcher rebuild import, obtengo lo siguiente al final de la compilación:

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.

Cuando ejecuto: /var/discourse/launcher enter import
Obtengo:

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

¿Es esto debido a los errores al principio de este post (y si es así, cómo lo soluciono), o qué estoy haciendo mal?

¿Creaste import.yml y arrancaste ese contenedor como (estoy bastante seguro) dicen las instrucciones?

Las instrucciones muestran copiar app.yml a import.yml y agregar “templates/import/phpbb3.template.yml” a import.yml (lo cual hice). Luego, reconstruyes la importación, lo que genera el error en mi OP. No veo dónde hay instrucciones sobre cómo crear un bootstrap (?).

Las instrucciones son bastante simples, por eso me confunde lo que está saliendo mal.

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

Lo siento. Rebuild hace un arranque. Si terminó, el contenedor de importación estaba en ejecución.

Oh. Lo siento mucho. No me di cuenta de lo que estaba pasando antes. Parece que la plantilla phpbb3 podría ser incompatible con cambios recientes en discourse_docker. Pero eso es todo lo que puedo decir desde mi teléfono.

Creo que si eliminas una línea en la plantilla phpbb3 que elimina “/etc/service/unicorn/run”, eso podría hacer que la compilación se complete.

1 me gusta

Jay, gracias por la respuesta a este problema. La compilación ahora se completa correctamente.

Siguiente problema: Cuando ejecuto: import_phpbb3.sh obtengo:

Iniciando la importación de phpBB3...

/usr/local/lib/ruby/3.3.0/psych/parser.rb:62:in `_native_parse': (\u003cunknown\u003e): no se encontró la clave esperada al analizar un bloque de mapeo en la línea 3, columna 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 `\u003cmodule:PhpBB3\u003e'
        from script/import_scripts/phpbb3.rb:16:in `\u003cmodule:ImportScripts\u003e'
        from script/import_scripts/phpbb3.rb:15:in `\u003cmain\u003e'

Supongo que no le gusta algo en mi archivo settings.yml. ¿Cómo puedo saber qué es lo que le molesta?

database:
  type: MySQL # actualmente solo se admite MySQL
  host: localhost
  port: 3306
  username: 
  password: 
  schema: phpbb
  table_prefix: phpbb_ # Cambia esto si tu foro utiliza un prefijo diferente. Normalmente todos los nombres de tabla empiezan por phpbb_
  batch_size: 1000 # No cambies esto a menos que sepas lo que estás haciendo. El valor predeterminado (1000) debería funcionar bien.

import:
  # Establece esto si importas varios foros de phpBB en un solo foro de Discourse.
  #
  # Por ejemplo, al importar varios sitios, prefija todos los IDs importados
  # con 'first' para evitar conflictos. Las ejecuciones de importación posteriores deben tener un
  # 'site_name' diferente.
  #
  # site_name: first
  #
  site_name: Freedom Owners Forum

  # Crear nuevas categorías
  #
  # Por ejemplo, para crear una categoría principal y una subcategoría.
  #
  # 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

  # Mapeos de categorías
  #
  # * "source_category_id" es el ID del foro en phpBB3
  # * "target_category_id" es un ID de foro de phpBB3 o un "forum_id"
  #   de la configuración "new_categories" (ver arriba)
  # * "discourse_category_id" es un ID de categoría de Discourse
  # * "skip" te permite ignorar una categoría durante la importación
  #
  # Usa "target_category_id" si quieres fusionar categorías y usa
  # "discourse_category_id" si quieres importar un foro a una categoría existente
  # en 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

  # Mapeos de etiquetas
  #
  # Por ejemplo, los temas importados de la categoría phpBB 1 se etiquetarán
  # con 'first-category', etc.
  #
  # tag_mappings:
  #   1:
  #   - first-category
  #   2:
  #   - second-category
  #   3:
  #   - third-category
  #
  tag_mappings: {}

  # Mapeo de rangos a nivel de confianza
  #
  # Mapea los niveles de rango de phpBB 3.x a nivel de confianza
  # Los usuarios con rango al menos 3000 tendrán TL3, etc.
  #
   rank_mapping:
     trust_level_1: 200
     trust_level_2: 1000
     trust_level_3: 3000
  
#  rank_mapping: {}

  # ADVERTENCIA: No actives esta opción a menos que sepas lo que estás haciendo.
  # Probablemente romperá la conversión de BBCode a Markdown y ralentizará tu importación.
  use_bbcode_to_md: false

  # Esta es la ruta al directorio raíz de tu instalación actual de phpBB (o una copia de ella).
  # El importador espera encontrar los directorios /files y /images dentro del directorio base.
  # Necesitas cambiar esto a algo como /var/www/phpbb si no estás usando el importador basado en Docker.
  # Esto solo es necesario si quieres importar avatares, archivos adjuntos o emoticonos personalizados.
  phpbb_base_dir: /shared/import/data

  site_prefix:
    # esto es necesario para reescribir enlaces internos en las publicaciones
    original: freedomyachts.org    # sin http(s)://
    new: https://test.freedomyachts.org       # con http:// o https://

  # Habilita esto si quieres redirigir enlaces antiguos del foro a las nuevas ubicaciones.
  permalinks:
    categories: true  # redirige   /viewforum.php?f=1            a  /c/category-name
    topics: true      # redirige   /viewtopic.php?f=6&t=43       a  /t/topic-name/81
    posts: false      # redirige   /viewtopic.php?p=2455#p2455   a  /t/topic-name/81/4
    # Añade un prefijo a cada tipo de enlace, por ejemplo, 'forum' para redirigir /forum/viewtopic.php?f=6&t=43 a /t/topic-na
me/81
    # Déjalo vacío si tu foro no se instaló en una subcarpeta.
    prefix:

  avatars:
    uploaded: true  # importar avatares subidos
    gallery: true   # importar los avatares predefinidos que ofrece phpBB
    remote: false   # ADVERTENCIA: Esto puede ralentizar considerablemente tu importación. Intentará descargar avatares remotos.

  # Cuando es verdadero: los usuarios anónimos se importan como usuarios suspendidos. No pueden iniciar sesión y no tienen dirección de correo electrónico.
  # Cuando es falso: se utilizará el usuario del sistema para todos los usuarios anónimos.
  anonymous_users: true

  # Habilita esto si quieres importar hashes de contraseñas para usar el plugin "migratepassword".
  # Esto permitirá a los usuarios iniciar sesión con su contraseña actual.
  # El plugin está disponible en: https://github.com/discoursehosting/discourse-migratepassword
  passwords: true

  # Por defecto, se importan todas las siguientes cosas. Puedes deshabilitarlas estableciéndolas en falso.
  bookmarks: true
  attachments: true
  private_messages: true
  polls: true

  # Importar "me gusta" de la extensión "Gracias por las publicaciones" de phpBB
  likes: false

  # Cuando es verdadero: cada usuario importado tendrá el nombre de usuario original de phpBB como su nombre
  # Cuando es falso: el nombre de cada usuario importado estará en blanco a menos que el nombre de usuario se haya cambiado durante la importación
  username_as_name: false

  # Mapear Emojis a emoticonos usados en phpBB. La mayoría de los emoticonos predeterminados ya tienen un mapeo, pero puedes anular
  # los mapeos aquí si no te gustan algunos de ellos.
  # La sintaxis de mapeo es: nombre_emoji: 'emoticono_en_phpbb'
  # O mapear varios emoticonos a un solo Emoji: nombre_emoji: ['emoticono1', 'emoticono2']
  emojis:
    # aquí hay dos ejemplos de mapeos...
    smiley: [':D', ':-D', ':grin:']
    heart: ':love:'

  # Mapear campos de perfil personalizados de phpBB a campos de usuario personalizados en Discourse (funciona para phpBB 3.1+)
  #
  #  custom_fields:
  #    - phpbb_field_name: "company_name"
  #      discourse_field_name: "Company"
  #    - phpbb_field_name: "facebook"
  #      discourse_field_name: "Facebook"
  custom_fields: []

Te falta el nombre de usuario y la contraseña.