Esta guía le mostrará cómo usar el NodeBB Importer para migrar un foro de NodeBB a la plataforma Discourse. Si su foro de NodeBB utiliza MongoDB como backend, siga esta guía. No se preocupe, es un proceso sencillo. Comencemos.
El plan
- Preparar el entorno de desarrollo.
- Exportar la base de datos desde el entorno de producción.
- Importar la base de datos de producción a una instancia de Discourse.
- Ejecutar el script del importador.
¿Qué datos se pueden migrar?
- Grupos
- Categorías
- Categoría Raíz => Categoría Raíz
- Subcategoría y Sub-subcategoría => Subcategoría
- Adjuntos
- Temas y Publicaciones
- tema fijado => tema fijado
- vistas de temas
- todos los estilos se migrarán correctamente, incluyendo menciones, emojis y adjuntos.
- Usuarios (con los siguientes atributos)
- avatares (foto de perfil)
- fondo de perfil
- estado de prohibición
- nombre
- nombre de usuario
- correo electrónico
- biografía
- administrador
- sitio web
- ubicación
- estado de fecha de ingreso
- grupo
Preparando el entorno de desarrollo local
Configure su entorno de desarrollo siguiendo una de estas guías:
A partir de ahora, me referiré a este entorno como servidor Discourse.
Por favor, use esta guía si tiene problemas al configurar Discourse.
Exportar volcado de la base de datos de producción (desde el servidor NodeBB):
Apague su foro. Esto es recomendado por NodeBB.
$ cd /ruta_al_nodebb
$ ./nodebb stop
También debe detener Redis:
$ sudo service redis-server stop
$ sudo service redis-server status
# redis-server no está en ejecución
Su base de datos del foro está contenida en un solo archivo. Este archivo se genera automáticamente periódicamente por Redis. Por lo general, este archivo se encuentra en /var/lib/redis/dump.rdb. Además, puede obtener la ruta desde la CLI de Redis:
$ redis-cli
127.0.0.1:6379> config get dir
# "/var/lib/redis"
127.0.0.1:6379> exit
$ ls -la /var/lib/redis
# -rw-rw-r-- 1 redis redis 2664346 4 ago 16:24 dump.rdb
Si su servidor Redis requiere contraseña, use
AUTH SU_CONTRASEÑA.
Si por alguna razón no encuentra su archivo de base de datos en la ruta esperada, puede generarlo manualmente ejecutando
SAVEdentro de la CLI de Redis.
Ahora necesita copiar los adjuntos del foro:
$ cd /ruta_a_la_carpeta_raiz_nodebb/
$ tar -czf ./uploads.tar.gz ./public/uploads
Ahora que tiene su base de datos y los activos del foro, debe copiarlos al servidor Discourse.
Importar la base de datos
Si siguió las instrucciones para instalar Discourse, debería tener el servidor Redis instalado en el servidor Discourse:
$ redis-server -v
# Redis server v=5.0.2...
Ahora necesita detener el servidor Redis (importante).
Basado en Linux:
$ sudo service redis-server stop
$ sudo service redis-server status
# redis-server no está en ejecución
Mac OS:
$ brew services stop redis
$ brew services list
# redis detenido
Lo que debe hacer ahora es copiar la base de datos del foro a la ruta local de la base de datos de Redis. El importador necesita conectarse al servidor Redis y migrar la base de datos de NodeBB a la base de datos de Discourse. Este paso asume que no tiene nada importante en su base de datos de Redis; de lo contrario, debería realizar una copia de seguridad.
$ redis-cli
127.0.0.1:6379> config get dir
# "/var/lib/redis"
Verifique si hay archivos y tome nota del usuario actual y los permisos de dump.rdb:
$ ls -la /var/lib/redis
Copie la base de datos de NodeBB (sobrescriba si ya existe una):
$ cp dump.rdb /var/lib/redis
Más tarde, al intentar conectarse al servidor Redis, podría obtener Fatal error loading the DB: Permission denied, por lo tanto, debe alterar los permisos de dump.rdb:
# Reemplace el usuario con el mismo que tomó nota anteriormente.
$ sudo chown redis:redis /var/lib/redis/dump.rdb
$ sudo chmod 660 /var/lib/redis/dump.rdb
Ahora necesita descomprimir uploads.tar.gz en cualquier ruta de su elección:
$ tar xvzf uploads.tar.gz
Ejecutar el script del importador
Ahora que nuestra base de datos está en su lugar, estamos listos para ejecutar nuestro script de importación. Antes de eso, necesitamos editar algo de configuración. Probablemente solo necesite cambiar las siguientes dos líneas.
Esta es la ruta de su carpeta de uploads de NodeBB:
ATTACHMENT_DIR = '/ruta_absoluta/uploads'
Este es el nombre de la base de datos en Redis. El valor predeterminado es 0:
db: 0
Ejecute el importador con Discourse limpio:
$ cd ~/discourse
$ bundle exec rake db:drop db:create db:migrate
$ bundle exec ruby script/import_scripts/nodebb/nodebb.rb
El importador se conectará al servidor Redis y migrará todo a la base de datos PostgreSQL de Discourse.
Después de que el importador termine, inicie la plataforma Discourse:
$ bundle exec rails server
Inicie Sidekiq para procesar los datos migrados:
$ bundle exec sidekiq
Puede monitorear el progreso en http://localhost:3000/sidekiq/queues.
Realice una copia de seguridad de Discourse y súbala a su servidor de producción de Discourse siguiendo esta guía.
Con esto, debería haber realizado con éxito una migración completa de NodeBB a Discourse ![]()
Por favor, si tiene alguna pregunta, estaré encantado de ayudar ![]()