Estou compartilhando minhas descobertas enquanto faço uma migração do phpBB3 para o discourse.
soluções incluem:
banco de dados de origem postgres
emoji
ajustes no importador (correção de bug de citação, suporte aprimorado a bbcode (incluindo youtube), comentários de anexos)
posts excluídos logicamente sendo importados como posts normais
sou muito exigente, então se você me acompanhar, poderá obter um resultado muito bom.
Estou considerando migrar do phpbb para o discourse (histórico de versões instaladas: 3.2.1 - 3.2.8).
o problema é que uso postgresql para o banco de dados. sugestões? ainda não tentei, mas presumo que ainda não seja suportado com base no OP.
o novo script de importação foi lançado? vejo que isso foi há pouco mais de um ano.
Eu não lidei com a questão do postgresql para mysql pessoalmente, mas puramente da perspectiva de migrar de phpBB para Discourse, minha opinião é: faça o que for preciso para realizar a migração.
Migrei dois fóruns phpBB para Discourse, e embora houvesse as habituais reclamações de um pequeno número de usuários que se obtém com qualquer mudança, os benefícios do Discourse valem muito a pena! Não só o Discourse é mais fácil de manter e administrar, mas o engajamento de usuários integrado, o manuseio de imagens, a personalização de usuários e a legibilidade do Discourse são apenas algumas das funcionalidades que estão tão à frente do phpBB que não há comparação. Você também obtém um suporte muito melhor com o Discourse.
Não sou um especialista, mas uma pesquisa rápida sugere que você poderia migrar do postgresql para o mysql fazendo um dump do esquema, alterando os tipos de dados nas declarações do esquema para corresponder aos usados pelo mysql, usando o esquema modificado para criar as tabelas em um banco de dados mysql e, em seguida, fazendo uma exportação e importação CSV tabela por tabela.
Depois de ter o banco de dados mysql, você poderia usar o script de migração phpBB regular e ter todos os seus anexos.
Eu não quis implicar que seria fácil, apenas que vale a pena o esforço, e é até possível fazer manualmente, e parece haver muitos recursos disponíveis para isso, tanto com ferramentas automatizadas quanto manualmente.
Dado que odeio Ruby, e o importador existente será descontinuado em favor do importador em massa (que ainda não é bom o suficiente para meus propósitos), estou prosseguindo com a estratégia de migração postgres → mysql.
Estou progredindo com o assistente de migração do MySQL Workbench. Escreverei um pequeno guia se for bem-sucedido, mas parece promissor até agora.
basicamente, o mysql workbench falha ao importar unicode. tentarei com o mariadb amanhã e verei se consigo definir a codificação padrão do banco de dados ou algo assim antes de importar.
Teria sido ótimo se o MySQL Workbench funcionasse. Vi vários relatórios de erro com ele quando olhei as opções, então não o recomendei.
Mencionei o método de exportação/importação de schema dump e CSV uma vez antes, e só vou mencioná-lo mais uma vez com uma pequena modificação para torná-lo muito mais fácil e depois me calar.
Se você quiser seguir um caminho GUI:
Obtenha uma exportação apenas de estrutura de todas as tabelas de uma cópia funcional da mesma versão do phpBB3 que você está usando, que esteja rodando MySQL/MariaDB. Levaria literalmente dois minutos para alguém criar uma a partir do phpMyAdmin, que está disponível na maioria dos provedores de hospedagem web que rodam MySQL/MariaDB. (Alternativamente, você pode conseguir as instruções CREATE TABLE que precisa dos scripts de instalação do phpBB3 se não conseguir que alguém faça a exportação apenas de estrutura para você, ou até mesmo usar uma conta de hospedagem web barata para fazer uma instalação limpa da sua versão do phpBB3 em um ambiente MySQL/MariaDB e depois excluir os dados nas tabelas que ele cria para criar um banco de dados MySQL/MariaDB vazio.)
Encontre acesso a um provedor de hospedagem web com MySQL/MariaDB e phpMyAdmin, crie o banco de dados, importe a estrutura da exportação apenas de estrutura que você criou no passo 1 usando o phpMyAdmin.
Crie uma exportação CSV para cada tabela do seu banco de dados postgresql e faça uma importação CSV para a tabela correspondente usando o phpMyAdmin no seu novo banco de dados MySQL/MariaDB.
Acho que isso evitará quaisquer problemas com conjunto de caracteres e codificação, e você não terá que descobrir todos os tipos de dados e tamanhos de campo correspondentes que seriam necessários se você tentasse converter manualmente o schema dump do postgre.
Posso fornecer uma instrução SQL apenas de estrutura, mas o único DB que ainda tenho é do phpBB3 3.3.8, então pode adicionar mais problemas se você estiver usando a v. 3.2.x.
haha. sim, foram necessárias algumas artimanhas não óbvias para fazê-lo funcionar até onde eu consegui. acho que ainda pode funcionar, mas obrigado por me dar outra via para explorar.
Ok, ufa. Aqui está minha solução para importação do PostgreSQL.
Isso levará você de um dump do PostgreSQL para um servidor MariaDB funcional no qual você pode conectar o importador. Requer Docker Compose.
Funciona para phpBB 3.2. Não sei sobre 3.3. Se você está desesperado por suporte ao 3.3, posso tentar consertar se você me der um dump pg_dumpall do phpBB 3.3.
phpbb_smilies
├── phpbb_smilies.xlsx # referência principal para te ajudar a decidir
├── import.yml # arquivo de configuração com ambas as opções
├── orig_phpbb_smilies.csv # dados originais do phpbb
├── orig_files # arquivos de emoji originais do phpbb
│ ├── icon_arrow.gif
│ └── ...
└── new_files # arquivos de emoji renomeados para corresponder à coluna `new_shortcode` na planilha
├── phpbb_arrow.gif
└── ...
aqui está a postagem bruta migrada para o discourse:
[quote=", post:37, topic:1893"]
foo
[/quote]
bar
o postid e topicid migrados estão corretos, mas o nome de usuário está faltando. isso faz com que não seja interativo. quando o nome de usuário é uma string vazia, a citação não se expande e você não pode clicar nela para seguir a referência à postagem original.
posso esperar uma experiência melhor sem fazer melhorias no importador? ou seja, estou apenas fazendo algo errado?
Ainda não resolvi o último problema, mas aqui está outra pergunta.
Percebi que, após a importação terminar e você iniciar o contêiner do aplicativo, meu servidor phpBB ainda existente é muito exigido. Acho que isso acontece durante a fase de pós-processamento do Sidekiq.
O phpBB ainda existe em www.example.com, e o Discourse está em dc.example.com.
Estou tentando entender o que realmente está acontecendo, quais configurações fazem sentido durante esta migração de teste e quais configurações farão sentido para a migração final. E se preciso ter o phpBB em execução para esse pós-processamento do Sidekiq. Estou perguntando porque não tenho ideia do que acontece no pós-processamento.
Algumas configurações possivelmente relevantes no meu settings.yml atual:
import:
# Defina isso se você importar vários fóruns phpBB em um único fórum Discourse.
site_name:
site_prefix:
# isso é necessário para reescrever links internos em posts
original: example.com # sem http(s)://
new: https://dc.example.com # com http:// ou https://
Se houver mais alguma coisa que você precise verificar, por favor me avise.
Outra coisa que não está clara para mim é o subdomínio www. Atualmente, redireciono para www com nginx para o phpBB. Então, no exemplo acima, faz diferença se eu coloco original: example.com vs original: www.example.com? Pergunta semelhante para new quando eu fizer a migração final. Meus usuários realmente acessarão o Discourse de www.example.com, mas não sei qual é a melhor prática.
Sou bastante exigente com a migração do meu fórum, então continuo a melhorar o importador. Não sei se vou me dar ao trabalho de fazer PRs, já que o importador está obsoleto e algumas das minhas correções são semi-específicas para o meu fórum, mas este branch terá todas as minhas correções combinadas caso seja útil para alguém:
Corrigi o problema das citações, adicionei suporte para alguns BBCodes comumente adicionados, tornei o parsing de links do YouTube menos quebrado e suportei a extensão mentions/simplementions. Ainda tenho mais coisas para melhorar, como adicionar suporte para múltiplos prefixos de site (o principal caso de uso é quando você tem links no seu fórum para example.com e www.example.com).
Mesmo que eu esteja suportando algumas coisas não padrão, não deve ser um problema executá-lo em um fórum phpBB padrão sem extensões. Eu recomendo apenas usar o meu em qualquer caso.
A maneira mais fácil de usá-lo é baixar meu branch em algum lugar e sobrescrever o diretório do script de importação dentro do contêiner com um bind mount.
Ou seja, baixe minhas alterações em algum lugar:
git clone --filter=blob:none --no-checkout https://github.com/ftc2/discourse.git discourse_dev
cd discourse_dev
git sparse-checkout set --cone
git switch phpbb_import
git sparse-checkout set script/import_scripts
Em seguida, adicione isso à configuração do seu contêiner import.yml:
Em seguida, reconstrua o contêiner de importação. Após reconstruir, você provavelmente vai querer fazer um reset onde baixou meu repositório, porque o processo de build sobrescreverá meus arquivos, lol.
cd /path/to/discourse_dev
git reset --hard HEAD
chown -R 1000:1000 .