Este documento foi substituído por este outro guia do SMF2: Migrate an SMF2 forum to Discourse
Eu realmente queria migrar nosso antigo fórum SMF2 para o Discourse. Temos mais de 1000 membros e cerca de 20 mil posts em aproximadamente 2 mil tópicos.
No SMF2, não usávamos enquetes nem anexos — na verdade, nem todos tinham um avatar. Alguns posts dependiam fortemente de BBCode “avançado”, no entanto.
Veja como fizemos isso.
Pré-requisitos
Basta instalar o Discourse da maneira habitual.
Adicionei o plugin Discourse BBCode para lidar com listas, tamanhos, cores etc. diretamente.
Se você não conseguir abrir uma conexão remota com o banco de dados MySQL do seu SMF2, será necessário importar seus dados de um dump para um contêiner Docker temporário.
Se seu banco de dados aceitar conexões remotas — ou se estiver rodando na mesma máquina, você pode pular esta etapa.
Um contêiner MySQL Docker temporário
Faça o dump do seu banco de dados:
cd /tmp/
mysqldump –u[usuário] –p[senha] [nome do banco de dados] > sqldump.sql
Crie o contêiner MySQL Docker temporário:
cd /tmp/
docker run -d -e MYSQL_ROOT_PASSWORD=pass -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DATABASE=db -v "$PWD":/backup --name=mysql mysql
Em seguida, acesse-o:
docker exec -it mysql bash
Importe o dump do seu banco de dados:
mysql -uuser -ppass db < /backup/sqldump.sql
Se você receber o seguinte erro:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Apenas aguarde um minuto para que o contêiner seja totalmente inicializado.
Para compatibilidade de banco de dados, tive que alterar o plugin de autenticação do nosso banco de dados temporário, mas seu caso pode variar:
mysql -uuser -ppass db
Use esta consulta:
ALTER USER user
IDENTIFIED WITH mysql_native_password
BY 'pass';
Em seguida, saia e verifique o endereço IP da sua instância MySQL:
exit
docker inspect mysql | grep IPAddress
Agora você tem uma cópia funcional do seu banco de dados SMF2.
Um contêiner de importação Discourse temporário
Vamos criar um novo contêiner chamado “import”, baseado no contêiner app.yml padrão:
cd /var/discourse
cp containers/app.yml containers/import.yml
nano containers/import.yml
Adicione o template mysql-dep ao seu novo contêiner de importação:
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Descomente estas duas linhas se desejar adicionar o Lets Encrypt (https)
#- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"
- "templates/import/mysql-dep.template.yml"
Então basta:
/var/discourse/launcher stop app
/var/discourse/launcher rebuild import
Importando para o Discourse
Depois que o contêiner de importação for reconstruído, precisamos acessá-lo para nossa última ajuste:
/var/discourse/launcher enter import
cd /var/www/discourse/ # o script deve ser executado a partir deste diretório exato, mas você provavelmente já estará lá
su discourse -c "bundle exec ruby script/import_scripts/smf2.rb -h 172.17.0.3 -u user -p pass -d db -f smf_ -t Europe/Paris"
- -h: hostname do banco de dados MySQL do SMF2 (aqui, o IP de um contêiner Docker);
- -u: usuário MySQL do SMF2;
- -p: senha MySQL do SMF2;
- -d: banco de dados MySQL do SMF2;
- -f: prefixo das tabelas do SMF2;
- -t: fuso horário do SMF2.
Limpeza
Se você criou o contêiner MySQL Docker temporário, pare-o e remova-o:
docker stop mysql
docker rmi mysql
Pare o contêiner “import” do Discourse e use o launcher para fazer a limpeza:
/var/discourse/launcher destroy import
/var/discourse/launcher cleanup
Na verdade, consegui destruir meu contêiner principal
Sem problemas:
/var/discourse/launcher rebuild app
Configurações do Discourse após a importação
Algumas configurações padrão podem causar problemas com posts importados e permissões. Altere-as conforme necessário no painel de configurações do Discourse:
- comprimento mínimo do título do tópico: mudei para 3 — tópicos com títulos muito curtos provaram ser muito difíceis de trabalhar (não podiam ser movidos, etc.);
- title prettify: tive que desativar — tópicos cujo título não começava com letra maiúscula provaram ser muito difíceis de trabalhar (não podiam ser movidos, etc.).
Bibliografia
- Como usar o script de importação do bbpress - ou qualquer outro script de importação com dependência do mysql (lead4good, maio de 2017);
- “Authentication plugin ‘caching_sha2_password’ cannot be loaded” (meow, abril de 2018).