Como você já sabe, o NodeBB suporta dois backends de banco de dados: Redis e MongoDB. O script de importação do Discourse suporta ambos. Neste tutorial, aprenderemos como migrar o NodeBB com MongoDB como backend de banco de dados. Usaremos o NodeBB Importer com o adaptador mongo. Se o seu fórum NodeBB usa Redis como backend, siga este tutorial, que demonstra o adaptador redis.
O plano
- Preparar o ambiente de desenvolvimento.
- Exportar o banco de dados do ambiente de produção.
- Importar o banco de dados de produção para uma instância do Discourse.
- Executar o script de importação.
O que pode ser migrado
- Grupos
- Anexos
- Categorias
- Categoria Raiz => Categoria Raiz
- Subcategoria e Sub-subcategoria => Subcategoria
- Tópicos e Posts
- tópico fixado => tópico fixado
- tópico bloqueado => tópico fechado
- visualizações de tópicos
- upvoted_by
- estilos, menções, emojis e anexos.
- Usuários (com os seguintes atributos)
- plano de fundo do perfil
- avatares
- status de banido
- nome de usuário
- nome
- administrador
- biografia
- grupo
- site
- localização
- data de ingresso
Preparando o Ambiente de Desenvolvimento Local
Como mencionado em nosso plano, primeiro precisamos preparar nosso ambiente de desenvolvimento. Siga um dos seguintes guias para instalar o próprio Discourse:
Por favor, consulte este guia se tiver problemas ao configurar o servidor Discourse.
Em seguida, instale o servidor de banco de dados 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 mais detalhes, consulte o guia 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 mais detalhes, consulte o guia oficial.
Windows 10:
Baixe o instalador e instale o MongoDB como um serviço do Windows:
https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-4.0.12-signed.msi
Execute o cmd com privilégios de administrador para verificar se o servidor mongo está funcionando corretamente:
"C:\Program Files\MongoDB\Server\4.0\bin\mongo.exe"
Para mais detalhes, consulte o guia oficial.
Este ambiente será nosso servidor Discourse.
Exportando o Dump do Banco de Dados de Produção
Desligue seu fórum NodeBB (servidor de produção).
$ cd /path_to_nodebb
$ ./nodebb stop
Desligue seu banco de dados:
$ sudo service mongodb stop
Faça backup do seu banco de dados:
$ mongodump --out ~/my_backup_path/
A saída do comando anterior será algo como:
2019-08-16T15:17:09.845+0300 done dumping admin.system.users (1 document)
2019-08-16T15:17:09.846+0300 done dumping admin.system.version (2 documents)
2019-08-16T15:17:09.849+0300 done dumping nodebb.sessions (10 documents)
2019-08-16T15:17:09.850+0300 done dumping nodebb.socket.io (215 documents)
2019-08-16T15:17:09.854+0300 done dumping nodebb.objects (1488 documents)
Observe que o backup é na verdade um diretório, não apenas um arquivo.
Você pode verificar o tamanho do seu banco de dados executando use myDatabase e depois db.stats().dataSize; dentro do CLI mongo. O valor retornado estará em bytes.
Faça backup dos ativos do fórum:
$ cd /path_to_nodebb_root_directory/
$ tar -czf ./uploads.tar.gz ./public/uploads
Após ter seu banco de dados e ativos do fórum, copie-os para o servidor Discourse.
Importando o Banco de Dados
Agora que temos nosso banco de dados, podemos importá-lo em nossa instância local do MongoDB:
$ mongorestore ~/path_of_my_backup_directory/
Para mais opções, consulte o guia oficial.
Em seguida, você precisa extrair o uploads.tar.gz para que o importador possa importar os ativos:
$ tar xvzf uploads.tar.gz
Executando o Script de Importação
Agora que nosso banco de dados e ativos estão prontos, estamos prontos para executar nosso script de importação. Antes disso, precisamos editar o script de importação do NodeBB para atender às nossas necessidades.
Este é o caminho da pasta de uploads do seu NodeBB:
ATTACHMENT_DIR = '/absolute_path/uploads'
Em seguida, precisamos informar ao importador para usar o adaptador mongo em vez do 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
# )
Execute o importador com Discourse limpo e suporte ao gem 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
O importador se conectará à instância do MongoDB e migrará tudo para o Discourse.
Após a conclusão do importador, inicie o Discourse:
$ bundle exec rails server
Inicie o Sidekiq para processar os dados migrados:
$ bundle exec sidekiq
Você pode monitorar o progresso em http://localhost:3000/sidekiq/queues.
Realize um backup do Discourse e faça o upload dele para seu servidor de produção do Discourse seguindo este tutorial.
![]()
Se você tiver alguma dúvida sobre o processo, ficarei feliz em ajudar.
Boa migração ![]()

