Migrar um fórum MyBB para Discourse

Neste tutorial, aprenderemos como migrar um fórum MyBB para a plataforma :discourse: usando o script oficial de importação do MyBB.

O que pode ser migrado

  • Categorias
    • Categoria raiz => categoria raiz
    • Categoria filha => subcategoria
    • Fórum raiz => subcategoria
    • Fórum filho => subcategoria
  • Tópicos e respostas => tópicos e posts
  • Usuários
    • nome de usuário
    • e-mail
    • status de privilégios
    • status de inscrição
  • Redirecionamentos

Nosso plano é muito simples:

  • Configurar o ambiente local de DEV.
  • Exportar o banco de dados de produção.
  • Importar o banco de dados de produção para o Discourse.
  • Executar o script de importação do MyBB.

Vamos começar :slightly_smiling_face:

Configurando o Ambiente Local de DEV

Primeiro de tudo, você precisa seguir um destes guias para instalar a própria plataforma Discourse. Consulte este guia se tiver algum problema.

Instale o servidor de banco de dados MySQL;

MacOS:

$ brew install mysql@5.7
$ echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile

Verifique o status do serviço:

$ brew services list

Você deve ver algo como isto:

mysql@5.7         started

Caso contrário, execute o seguinte e tente novamente:

$ brew services start mysql@5.7

Ubuntu 18.04:

$ sudo apt update
$ sudo apt install mysql-server -y

Após concluir a instalação do MySQL, verifique seu status:

$ systemctl status mysql.service

Se não estiver em execução, execute o seguinte:

$ sudo systemctl start mysql

Para o Windows, você pode seguir o guia de instalação oficial.

Vamos chamar este ambiente de: servidor Discourse.

Exportando o Banco de Dados de Produção

Exporte/backup o banco de dados de produção (do servidor de produção MyBB) executando:

$ mysqldump -u NOME_USUARIO -p NOME_BANCO_DADOS > mybb_dump.sql
  • Copie este dump do banco de dados para o servidor Discourse.

:bulb: Você pode usar scp ou rsync para copiar o banco de dados.

Importando o Banco de Dados de Produção para o Discourse

No servidor Discourse, crie um banco de dados:

$ mysql -u root

:bulb: Se seu usuário do BD tiver uma senha, você deve usar: mysql -u root -p e depois digitar sua senha.

mysql> CREATE DATABASE mybb;

Certifique-se de que o banco de dados foi criado com sucesso executando:

mysql> SHOW DATABASES;

Você deve ver algo como:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| mybb               |
| sys                |
+--------------------+

O BD mybb está vazio por enquanto. Nosso próximo passo é importar o banco de dados de produção para ele.

$ mysql -u root mybb < mybb_dump.sql

Mais tarde, precisaremos do prefixo da tabela. Então, enquanto estamos aqui, vamos obtê-lo.

$ mysql -u root
mysql> USE mybb;
mysql> SHOW TABLES;

Você verá algo como isto:

+--------------------------+
| Tables_in_mybb           |
+--------------------------+
| mybb_adminlog            |
| mybb_adminoptions        |
| mybb_adminsessions       |
| mybb_adminviews          |
| mybb_announcements       |
| mybb_attachments         |
| mybb_attachtypes         |
| ...O restante das tabelas....|
+--------------------------+

Nosso prefixo de tabela é mybb_, conforme mostra a saída.

Executando o Script de Importação do MyBB

  • Vamos primeiro instalar as dependências do importador. Do servidor Discourse:
$ cd ~/discourse
$ echo "gem 'mysql2', require: false" >> Gemfile
$ bundle install

Em seguida, você deve configurar o script para funcionar corretamente. Copie e cole o seguinte em seu shell (altere os valores se necessário):

export DB_HOST="localhost"
export DB_NAME="mybb"
export DB_PW=""
export DB_USER="root"
export TABLE_PREFIX="mybb_"

Você tem outra opção para configurar o script. Abra script/import_scripts/mybb.rb em qualquer editor de sua escolha e altere os valores dentro das aspas duplas para atender às suas necessidades:

  DB_HOST ||= ENV['DB_HOST'] || "localhost"
  DB_NAME ||= ENV['DB_NAME'] || "mybb"
  DB_PW ||= ENV['DB_PW'] || ""
  DB_USER ||= ENV['DB_USER'] || "root"
  TABLE_PREFIX ||= ENV['TABLE_PREFIX'] || "mybb_"

Execute o importador com uma instância limpa do Discourse:

$ bundle exec rails db:drop
$ bundle exec rails db:create
$ bundle exec rails db:migrate
$ bundle exec ruby script/import_scripts/mybb.rb

O importador se conectará ao servidor MySQL e migrará seu banco de dados MyBB para o banco de dados Discourse.

Após o término do importador, inicie a instância do Discourse executando:

$ bundle exec rails server

Em seguida, inicie o Sidekiq (processador de jobs em segundo plano) para processar os dados migrados:

$ bundle exec sidekiq

:bulb: Você pode monitorar o progresso do sidekiq em http://localhost:3000/sidekiq/queues.

Configure seu servidor de produção do Discourse seguindo este tutorial.

Faça um backup da plataforma Discourse (servidor Discourse local) e faça o upload para seu servidor de produção do Discourse seguindo este tutorial.

:tada:

Se você tiver alguma dúvida sobre o processo, ficarei feliz em ajudar.

Boa migração :grinning:

9 curtidas

Olá — isso parece ser um ótimo guia, exceto pelo fato de que, como usuário do cPanel e não do Linux, migrando de uma hospedagem compartilhada, não tenho acesso root nem SSH ao servidor original. No entanto, tenho acesso ao phpMyAdmin no cPanel, pelo qual posso exportar o banco de dados do MyBB.

Isso será suficiente?

Há alguma configuração especial de exportação necessária? E em qual diretório do meu droplet da Digital Ocean esse banco de dados deve ser copiado? (Estou usando o FileZilla).

Sim.

Não importa, o diretório inicial funciona perfeitamente.

3 curtidas

Olá novamente — consigo chegar até este ponto no tutorial:

bundle install

Mas, para mim, isso falha com o erro:

'Não execute o Bundler como root. O Bundler pode solicitar sudo se necessário, e
instalar seu bundle como root quebrará este aplicativo para todos os usuários
não-root nesta máquina.
Seu Gemfile não possui fontes de servidor de gems. Se você precisar de gems que ainda não estão
em sua máquina, adicione uma linha como esta ao seu Gemfile:
source ‘https://rubygems.org
Não foi possível encontrar a gem ‘mysql2’ em nenhuma das fontes de gems listadas no seu Gemfile.

Alguma sugestão?

Infelizmente, não sei nada sobre Ruby, Linux ou Gemfiles, então estou apenas avançando literalmente pelas várias tarefas de configuração do Discourse CLI conforme os tutoriais orientam, copiando e colando comandos via PuTTY, sem qualquer tipo de compreensão.

Estou executando o Ubuntu e o Discourse em uma Droplet da Digital Ocean, se isso ajudar?

Além disso, vejo uma referência subsequente a colar comandos de exportação de banco de dados no ‘shell’. Para fins práticos, minha conexão atual do PuTTY com o servidor equivale ao ‘shell’, ou há alguma outra interface/console envolvida?

OK, como resposta parcial à minha própria pergunta, pesquisas aleatórias em fóruns sugerem que

$ sudo apt-get install libmysqlclient-dev

permitirá que o gem mysql2 seja instalado (seja lá o que for isso) — ignorando o aviso sobre não fazer isso como root.

Passando por isso e indo para a próxima etapa — digitando

$ bundle exec rails db:drop

— surge outro erro::::

bundler: failed to load command: rails (/usr/local/bin/rails)
Gem::Exception: can’t find executable rails for gem railties. railties is not currently included in the bundle, perhaps you meant to add it to your Gemfile?

Verificando em /usr/local/bin/, vejo que definitivamente há um arquivo chamado ‘rails’ lá.

Digitar sudo gem, gem install rails ou $ sudo gem install rails não ajuda (de acordo com várias sugestões encontradas para esse erro).

Cheguei até a voltar e instalar o Ruby on Rails do zero para garantir que todas as dependências normais estivessem presentes https://www.digitalocean.com/community/tutorials/how-to-install-ruby-on-rails-with-rbenv-on-ubuntu-18-04 — e sem nenhuma melhoria, independentemente de usar a versão 2.51 ou 2.61.

Estou completamente perdido aqui…

Bem, posso afirmar categoricamente que seguir este guia exatamente como escrito NÃO funciona para ninguém que esteja seguindo os passos oficiais para configurar um ambiente de desenvolvimento local em uma instalação do Ubuntu-18.04 via WSL2 no Windows 10 — em quase cada etapa, haverá alguma dependência faltando, erro de conexão recusada ou algo similar.

Com muita dor de cabeça e pesquisas online, consegui chegar até o comando:

$ bundle exec ruby script/import_scripts/mybb.rb

mas isso gera a seguinte resposta:

mysql2/client.rb:90:in `connect’: Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2) (Mysql2::Error::ConnectionError)

Isso tem sido um muro — nada que encontrei pesquisando online parece oferecer uma solução funcional para isso.

Como resolvo isso e avanço para a próxima etapa? Qualquer ajuda será muito apreciada!

1 curtida

Olá, como posso fazer o upload do banco de dados no meu droplet DigitalOcean? Usei a instalação de 1 clique do DigitalOcean para instalar o Discourse (Ubuntu).
No meu PC, tenho o Windows 10 Home, versão de build 18362.

Depois, instalei o MySQL, mas agora não sei como “fisicamente” fazer o upload do banco de dados MyBB no servidor. Não existe um phpMyAdmin onde seja possível importar o banco de dados facilmente? :frowning:

1 curtida

Você precisa fazer o upload do arquivo usando scp ou similar. Em seguida, algo como

  mysql -u user -p password database < filename..sql
3 curtidas

Estou preso :frowning:

1 curtida

Este guia deve ser atualizado para ser compatível com a execução da importação dentro de uma instalação Docker, em vez de usar uma máquina de desenvolvimento local.

5 curtidas

Estou muito ansioso para ver o guia rodando em um ambiente baseado em Docker :slight_smile:

2 curtidas

No final, desisti do faça-você-mesmo e contratei um desenvolvedor para o trabalho — encaminhando a ele todas as excelentes sugestões deste fórum (que foram úteis!). Acredito que ele realizou isso diretamente no meu droplet Digital Ocean em produção, em vez de em um ambiente de desenvolvimento separado (assim eu podia revisar as coisas facilmente enquanto ele trabalhava — os usuários não foram impactados, pois o fórum ainda não estava oficialmente no ar). Ou seja, acho que é possível.

Após algumas iterações, os resultados estão bem bons: todos os problemas com MyCode e caracteres estranhos foram resolvidos, traduzi os prefixos de post do MyBB para tags do Discourse e os campos de perfil de usuário personalizados de seleção múltipla foram importados com sucesso.

Se ele estiver disposto, vou pedir que compartilhe quaisquer ajustes feitos no script de importação padrão e outras técnicas utilizadas aqui.

4 curtidas

Caso ajude alguém, o desenvolvedor @rahilqf que contratei concluiu o projeto, incluindo a tradução de campos personalizados de usuário do MyBB para campos personalizados de usuário do Discourse (o que depende da instalação do plugin multi-select-user-field), a tradução de prefixos de post do MyBB para tags do Discourse e a remoção de quase todas as tags MyBB redundantes do texto dos posts do MyBB.

Sua versão personalizada do script de importação está disponível aqui - Script de Importação Personalizado do MyBB para o Discourse.

Ele também mesclou com sucesso um arquivo Mbox do Yahoo Groups, usando o script de importação padrão do Yahoo — embora, com isso, os anexos pareçam não ter sido traduzidos. No meu caso, isso não foi um problema significativo.

3 curtidas

Estou convertendo usuários, posts, tópicos, etc., do banco de dados do MyBB!

Segui este guia: Install Discourse on Ubuntu or Debian for Development

mas http://localhost:3000/ ou http://forum.omaggieconcorsi.com:3000/ não funcionam

De qualquer forma, o programa está convertendo algo, mas não sei onde posso exportar os dados depois.
Como não consigo ver o Discourse em http://forum.omaggieconcorsi.com:3000/ ou http://localhost:3000/, como posso pelo menos exportar o banco de dados com posts, usuários, etc., do antigo fórum MyBB e depois importá-lo em uma nova instância do Discourse?

Obrigado!

Você seguiu essas instruções no mesmo computador onde está executando o navegador web?

1 curtida

Sim, sempre o mesmo computador

Ok, segui este guia no Ubuntu 18.04 com o SO “real” instalado no PC e localhost:3000 está funcionando!

Mas agora tenho um problema com o banco de dados MySQL :frowning: Desculpe…

Digitei:

debby@debby-MS-7721: mysql -u root
ERROR 1698 (28000): Acesso negado para o usuário 'root'@'localhost'

:frowning:

EDIT: Adicionei uma senha ao root com ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

E em DB_PW, escrevi a senha do usuário root.

… e agora está criando usuários!!

Deseje boa sorte para mim, será que finalmente é a hora certa depois de semanas de testes??

1 curtida

Estou tentando importar o banco de dados do MyBB para o Discourse. Assim como o @Paul_King, não consigo fazer funcionar no meu servidor DigitalOcean. Continho recebendo todos os tipos de erros ao seguir este guia.

Estou travado tentando executar o comando

$ bundle exec rails db:drop
bundler: comando não encontrado: rails
Instale os executáveis das gems ausentes com `bundle install`

O bundle install diz que está completo

$ bundle install
Seu Gemfile lista a gem mysql2 (>= 0) mais de uma vez.
Você provavelmente deve manter apenas uma delas.
Embora não seja um problema agora, isso pode causar erros se você alterar a versão de uma delas mais tarde.
Usando bundler 1.16.1
Usando mysql2 0.4.10
Bundle completo! 2 dependências do Gemfile, 2 gems agora instaladas.
Use `bundle info [gemname]` para ver onde uma gem agrupada está instalada.

Tentar instalar o rails manualmente resulta nisso:

$ gem install rails
Construindo extensões nativas. Isso pode demorar um pouco...
ERRO: Erro ao instalar rails:
        ERRO: Falha ao construir extensão nativa da gem.

    diretório atual: /var/lib/gems/2.5.0/gems/racc-1.5.2/ext/racc/cparse
/usr/bin/ruby2.5 -r ./siteconf20210110-8155-1ms05r3.rb extconf.rb
mkmf.rb não consegue encontrar arquivos de cabeçalho do ruby em /usr/lib/ruby/include/ruby.h

extconf falhou, código de saída 1

Os arquivos da gem permanecerão instalados em /var/lib/gems/2.5.0/gems/racc-1.5.2 para inspeção.
Resultados registrados em /var/lib/gems/2.5.0/extensions/x86_64-linux/2.5.0/racc-1.5.2/gem_make.out

Isso é extremamente frustrante.


Deixei este post aberto e consegui instalar o rails. Depois tive um milhão de outros erros e consegui corrigi-los. Erros. Em. Cada. Único. Passo.

Nunca antes senti tal ódio puro por software. Por que o ruby é assim? Isso é um pesadelo. Agora estou travado com este erro:

$ bundle exec rails db:drop
Traceback (most recent call last):
        1: from /usr/local/bin/bundle:23:in `<main>'
/usr/local/bin/bundle:23:in `load': não é possível carregar o arquivo -- /usr/share/rubygems-integration/all/gems/bundler-1.16.1/exe/bundle (LoadError)

Alguém pode ajudar?

1 curtida

Não foi útil, mas encontrei muitos dos mesmos obstáculos, tanto ao tentar configurar um ambiente de desenvolvimento local (para gerar um arquivo de backup do banco de dados do Discourse) quanto diretamente no meu Droplet da Digital Ocean. Depois de desperdiçar dezenas de horas, decidi que a vida é muito curta e contratei um desenvolvedor no Fiverr (que levou semanas para resolver, mas conseguiu).
Suspeito que os incentivos simplesmente não existem para que alguém torne o processo mais fácil.

Boa sorte — e espero que, se você finalmente conseguir resolver, deixe um rastro de migalhas aqui para que outros possam seguir!

1 curtida

Como você instalou o Rails? Você seguiu um dos guias de desenvolvimento? (como o Guia para Iniciantes para Instalar o Discourse no Ubuntu para Desenvolvimento)

Existem alguns documentos de passo a passo para executar o script de instalação dentro do container de produção (o que eu geralmente faço), então você pode usar um deles como guia.