Como bien sabes, NodeBB admite dos backends de base de datos: Redis y MongoDB. El script de importación de Discourse los admite a ambos. En este tutorial, aprenderemos a migrar NodeBB con MongoDB como backend de base de datos. Utilizaremos NodeBB Importer con el adaptador mongo. Si tu foro de NodeBB utiliza Redis como backend, por favor sigue este tutorial que demuestra el adaptador redis.
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 de importación.
Qué se puede migrar
- Grupos
- Adjuntos
- Categorías
- Categoría Raíz => Categoría Raíz
- Subcategoría y Sub-subcategoría => Subcategoría
- Temas y Publicaciones
- tema fijado => tema fijado
- tema bloqueado => tema cerrado
- vistas de tema
- upvoted_by
- estilos, menciones, emojis y adjuntos.
- Usuarios (con los siguientes atributos)
- fondo del perfil
- avatares
- estado de prohibición
- nombre de usuario
- nombre
- correo electrónico
- administrador
- biografía
- grupo
- sitio web
- ubicación
- fecha de ingreso
Preparación del entorno de desarrollo local
Como se mencionó en nuestro plan, primero necesitamos preparar nuestro entorno de desarrollo. Sigue una de estas guías para instalar Discourse:
Por favor, consulta esta guía si tienes problemas para configurar el servidor de Discourse.
Luego, instala el servidor de base de datos MongoDB.
Ubuntu-18-04:
$ wget -qO - https://www.mongodb.org/static/pgp/server-4.0.asc | sudo apt-key add -
$ echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org
$ sudo service mongod status
Para más detalles, consulta la guía oficial.
Mac OS:
$ brew tap mongodb/brew
$ brew install mongodb-community@4.0
$ brew services start mongodb-community@4.0
$ brew services status mongodb-community@4.0
Para más detalles, consulta la guía oficial.
Windows 10:
Descarga el instalador e instala MongoDB como un servicio de Windows:
https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-4.0.12-signed.msi
Ejecuta el cmd con privilegios de administrador para verificar si el servidor mongo funciona correctamente:
"C:\Program Files\MongoDB\Server\4.0\bin\mongo.exe"
Para más detalles, consulta la guía oficial.
Este entorno será nuestro servidor de Discourse.
Exportación del volcado de la base de datos de producción:
Apaga tu foro de NodeBB (servidor de producción).
$ cd /ruta_a_nodebb
$ ./nodebb stop
Apaga tu base de datos:
$ sudo service mongodb stop
Copia de seguridad de tu BD:
$ mongodump --out ~/mi_ruta_de_copia_seguridad/
La salida del comando anterior será algo como esto:
2019-08-16T15:17:09.845+0300 done dumping admin.system.users (1 documento)
2019-08-16T15:17:09.846+0300 done dumping admin.system.version (2 documentos)
2019-08-16T15:17:09.849+0300 done dumping nodebb.sessions (10 documentos)
2019-08-16T15:17:09.850+0300 done dumping nodebb.socket.io (215 documentos)
2019-08-16T15:17:09.854+0300 done dumping nodebb.objects (1488 documentos)
Ten en cuenta que la copia de seguridad es en realidad un directorio, no solo un archivo.
Puedes verificar el tamaño de tu BD ejecutando
use miBaseDeDatosy luegodb.stats().dataSize;dentro de la CLI demongo. El valor devuelto estará en bytes.
Copia de seguridad de los activos de tu foro:
$ cd /ruta_al_directorio_raiz_de_nodebb/
$ tar -czf ./uploads.tar.gz ./public/uploads
Una vez que tengas tu BD y los activos del foro, debes copiarlos al servidor de Discourse.
Importación de la base de datos
Ahora que tenemos nuestra base de datos, podemos importarla en nuestra instancia local de MongoDB:
$ mongorestore ~/ruta_de_mi_directorio_de_copia_seguridad/
Para más opciones, consulta la guía oficial.
A continuación, necesitas extraer el archivo uploads.tar.gz para que el importador pueda importar los activos:
$ tar xvzf uploads.tar.gz
Ejecución del script de importación
Ahora que nuestra base de datos y activos están en su lugar, estamos listos para ejecutar nuestro script de importación. Antes de eso, necesitamos editar el script de importador de NodeBB para adaptarlo a nuestras necesidades.
Esta es la ruta de tu carpeta de uploads de NodeBB:
ATTACHMENT_DIR = '/ruta_absoluta/uploads'
A continuación, necesitamos indicar al importador que utilice el adaptador mongo en lugar del adaptador redis:
adapter = NodeBB::Mongo
@client = adapter.new('mongodb://127.0.0.1:27017/nodebb')
# adapter = NodeBB::Redis
# @client = adapter.new(
# host: "localhost",
# port: "6379",
# db: 14
# )
Ejecuta el importador con Discourse limpio y soporte para la gema mongo:
$ cd ~/discourse
$ echo "gem 'mongo'" >> Gemfile
$ bundle install
$ bundle exec rake db:drop db:create db:migrate
$ bundle exec ruby script/import_scripts/nodebb/nodebb.rb
El importador se conectará a la instancia de MongoDB y migrará todo a Discourse.
Una vez que el importador termine, inicia Discourse:
$ bundle exec rails server
Inicia Sidekiq para procesar los datos migrados:
$ bundle exec sidekiq
Puedes monitorear el progreso en http://localhost:3000/sidekiq/queues.
Realiza una copia de seguridad de Discourse y súbelo a tu servidor de producción de Discourse siguiendo este tutorial.
![]()
Si tienes alguna pregunta sobre el proceso, estaré encantado de ayudarte.
¡Feliz migración! ![]()

