Migre um fórum FluxBB para o Discourse

Criei um script de migração para importar o banco de dados do FluxBB para o Discourse. Agora vou explicar como realizar o processo de importação em um tutorial passo a passo.

Testei este script de migração com o FluxBB v1.5.10 (que é a versão atual).

Quais dados podem ser importados?

  • Usuários (incluindo biografias e assinaturas)
  • Grupos
  • Categorias
    :warning: As permissões não serão importadas e todas as categorias ficarão públicas. As permissões corretas devem ser definidas manualmente após a importação.
  • Tópicos (incluindo status de fixado/pin)
  • Posts
  • Usuários suspensos

Antes de iniciar a migração, configure um ambiente de desenvolvimento em sua máquina (ou dentro de uma máquina virtual). Consulte o guia de instalação para desenvolvimento no OS X ou no Ubuntu.

O Discourse requer Ruby 3.4+. Para verificar sua versão do Ruby, digite o comando abaixo:

ruby -v

MySQL

Agora precisamos do gem mysql2 para o Ruby se conectar ao nosso antigo banco de dados FluxBB. Execute os comandos abaixo para instalar a dependência libmysqlclient-dev e o gem mysql2.

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install libmysqlclient-dev
gem install mysql2

(opcional) Importando dump MySQL para localhost

Para instalar o cliente MySQL e importar um arquivo de dump MySQL (.sql) para sua máquina de desenvolvimento, siga as instruções abaixo:

sudo apt-get install mysql-server mysql-client

Crie o usuário MySQL, conceda permissões e crie a tabela:

mysql -u root -p mysql
mysql> CREATE USER 'fluxbb'@'localhost' IDENTIFIED BY 'fluxbb';
Query OK, 0 rows affected (0.00 sec)
.
mysql> CREATE DATABASE fluxbb;
Query OK, 1 row affected (0.01 sec)
.
mysql> GRANT ALL PRIVILEGES ON fluxbb.* TO 'fluxbb'@'localhost';
Query OK, 0 rows affected (0.00 sec)
.
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
.
mysql> exit

Importe o arquivo de dump do seu banco de dados FluxBB:

mysql -u fluxbb -p fluxbb < myfluxbb.sql

BBCode para Markdown

O script de importação lida automaticamente com a conversão de BBCode para Markdown. Nenhum gem adicional é necessário para isso.


Após instalar o mysql2, vá até o caminho de instalação do Discourse e abra o Gemfile para editar.

cd ~/discourse
sudo nano Gemfile

Agora, insira a linha abaixo no final do arquivo para adicionar o gem mysql2 ao Discourse.

gem 'mysql2'

Antes de executar o script de importação, cole estas linhas uma por uma no seu shell. (Use as setas do teclado para editar os valores)

export FLUXBB_HOST="localhost"
export FLUXBB_DB="fluxbb"
export FLUXBB_USER="root"
export FLUXBB_PW=""
export FLUXBB_PREFIX=""

Agora é hora de executar o script de importação. Execute o comando abaixo para iniciar a migração.

RAILS_ENV=production bundle exec ruby script/import_scripts/fluxbb.rb

Aguarde até que a importação seja concluída. Você pode reiniciá-la se o processo ficar extremamente lento.

Após tudo, parabéns! Seu banco de dados foi migrado com sucesso do FluxBB para o Discourse :thumbsup:

Inicie sua instância do Discourse:

bundle exec rails server

Inicie o Sidekiq e deixe-o realizar seu trabalho:

bundle exec sidekiq -q critical,4 -q default,2 -q low

Dependendo do tamanho do seu fórum, isso pode levar bastante tempo. Você pode monitorar o progresso em http://localhost:3000/sidekiq.

Agora faça um backup na página de administração /admin/backups e importe-o no seu site Discourse ao vivo.

12 curtidas
discourse@app-deb10-app:/var/www/discourse$ FLUXBB_HOST="localhost" FLUXBB_DB="flux" FLUXBB_USER="fluxbb" FLUXBB_PW="fluxbb" RAILS_ENV=production bundle exec ruby script/import_scripts/fluxbb.rb
Carregando grupos existentes...
Carregando usuários existentes...
Carregando categorias existentes...
Carregando posts existentes...
Carregando tópicos existentes...

criando grupos
Traceback (most recent call last):
	9: from script/import_scripts/fluxbb.rb:262:in `<main>'
	8: from /var/www/discourse/script/import_scripts/base.rb:47:in `perform'
	7: from script/import_scripts/fluxbb.rb:40:in `execute'
	6: from script/import_scripts/fluxbb.rb:50:in `import_groups'
	5: from script/import_scripts/fluxbb.rb:258:in `mysql_query'
	4: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-2.3.2/lib/patches/db/mysql2/alias_method.rb:22:in `query'
	3: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `query'
	2: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `handle_interrupt'
	1: from /var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `block in query'
/var/www/discourse/vendor/bundle/ruby/2.7.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `_query': A tabela 'flux.groups' não existe (Mysql2::Error)

Parece que as tabelas não existem no banco de dados MySQL. Verifique fazendo login no banco de dados MySQL primeiro e vendo quais tabelas estão lá. Você pode precisar modificar o script para fazê-lo funcionar.

2 curtidas

Aqui, passo a passo.

Este importador está quebrado em versões modernas do Discourse?

Estou executando uma instância do Discourse instalada usando o discourse/docs/INSTALL.md at main · discourse/discourse · GitHub (também conhecido como “As únicas instalações oficialmente suportadas do Discourse”).

Configurei um banco de dados MariaDB dentro do contêiner Docker, importei meu dump do fórum lá, etc., porque qualquer outra abordagem é muito difícil de configurar. Tudo o que fiz foi dentro do shell cd /var/discourse/ && ./launcher enter app.

Executar bundle exec ruby script/import_scripts/fluxbb.rb bbcode-to-md falha com:

/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activerecord-7.0.4.3/lib/active_record/connection_adapters/postgresql_adapter.rb:81:in `rescue in new_client
': Não conseguimos encontrar seu banco de dados: discourse. Que pode ser encontrado no arquivo de configuração do banco de dados localizado em config/database.yml. (ActiveRecord::NoDatabaseError)

Executar sudo -u postgres psql discourse no mesmo shell me conecta ao banco de dados “discourse” sem problemas.

Desculpe pela suposição negativa, foi simples:

O script deve ser executado com o usuário discourse, não como root no contêiner, que foi o que eu fiz.

Além de alguns códigos BB não serem convertidos, isso parece ter funcionado bem. Obrigado!

Tests, fixes, and a small (optional) feature to allow a FluxBB config to work by harry-wood · Pull Request #6 · nlalonde/ruby-bbcode-to-md · GitHub parece ser um bom PR com correções para a conversão de código BB.

Aviso enorme:

As permissões são ignoradas por este importador.

Todos os seus fóruns serão postados como públicos.

Se você tinha fóruns configurados para serem lidos apenas por moderadores, eles poderão ser lidos por qualquer pessoa após o uso deste importador.

1 curtida

Você pode modificar as permissões das categorias manualmente após a importação. Provavelmente não será um trabalho muito grande para corrigi-las manualmente.

Adicionar suporte para importar as permissões é provavelmente um trabalho maior do que fazê-lo manualmente.

1 curtida

Obrigado por relatar isso, adicionei um aviso sobre isso no guia.

2 curtidas