Mover tópicos de uma instância do Discourse para outra

Precisa mover alguns itens de uma instância do Discourse para outra?

Existe uma ferramenta de linha de comando para exportar um tópico, um conjunto de tópicos ou uma categoria inteira, e outra para importá-los na outra ponta.

Exportação/Importação de Tópico

  • um ou mais tópicos e suas respostas
  • os usuários que postaram no tópico

Exportação/Importação de Categoria

  • a categoria e todas as suas subcategorias
  • suas configurações de segurança
  • grupos personalizados mencionados nas configurações de segurança
    • :warning: se algum dos grupos tiver solicitações de associação ativadas, ele travará. Desative isso antes da exportação
  • todos os tópicos e posts na categoria e subcategorias
  • todos os usuários que postaram, e os atribui aos grupos

Começando: Identifique os IDs

Primeiro, identifique o(s) ID(s) da =Exportação= que você deseja exportar. Você encontrará isso no final do URL usado para acessá-lo.

  • https://meta.discourse.org/t/how-to-contribute-to-discourse/53797

  • https://meta.discourse.org/t/how-to-contribute-to-discourse/53797/12
    (neste caso, você está no meio de um tópico - pegue o primeiro número)

  • https://meta.discourse.org/c/howto/faq/4

ID(s) da Categoria ou Tópico

Múltiplos tópicos

Você pode selecionar mais de um tópico adicionando IDs separados por um espaço; isso funciona no campo acima (acho que isso não funciona para categorias, no entanto):

  • 53797 200943 124096

Execute o Script de Exportação

A ferramenta pode ser executada como usuário root dentro do contêiner:

cd /var/discourse
./launcher enter app

Execute este comando:

discourse export_=Export= =ID=

A saída deve ser algo como isto:

> Iniciando a exportação de =Export=…
>
> De onde vêm todos os novos usuários?
> Exportação salva em =Export=-export-2021-08-27-015437.json
>
> Pronto

Mova o Arquivo Exportado

O arquivo .json exportado precisa ser movido de dentro do contêiner do aplicativo onde você fez a exportação para dentro do contêiner da instância de recebimento. Isso requer algumas etapas.

Copie para o ‘exterior’

Saia do contêiner se ainda não o fez

exit

Você deve ter um prompt como este:
> root@seuservidor:/var/discourse

Use o docker para copiar o arquivo para fora do contêiner (acho que você não consegue movê-lo)

docker cp app:/var/www/discourse/=FileName= .

Mova para a outra instância

Isso está além do escopo deste guia, mas isto pode ajudar você a chegar lá:

Copie para o contêiner na instância de recebimento

Faça SSH na sua instância de recebimento como root e acesse o diretório Discourse:

cd /var/discourse

Use o docker mais uma vez para copiar o arquivo para o outro contêiner

docker cp =FileName= app:/var/www/discourse

Importe o Conteúdo

Entre no contêiner na instância de recebimento:

./launcher enter app

Execute o script de importação

discourse import_=Export= =FileName=

:cake: Pronto!

Você pode precisar organizar algumas pontas soltas, mas, com sorte, tudo estará feito.

Dicas Avançadas

Gem Ruby Faltando

Ao fazer uma importação de categoria complexa, minha instância estava sem o Ruby ‘Listen’.
Isso foi resolvido fazendo o seguinte: (usando o usuário Discourse dentro do contêiner)

./launcher enter app
su discourse
bundle config --delete without
bundle config --delete with
bundle install
exit
exit

Isso quebrou o console rails, necessitando de uma reconstrução depois

./launcher rebuild app

Múltiplos Sites

Em um ambiente de múltiplos sites, use a variável de ambiente RAILS_DB.

RAILS_DB=xxxmoves discourse export_=Export= =ID=
RAILS_DB=dancerehab discourse import_=Export= =FileName=

Por favor, relate bugs na categoria bug, e solicite melhorias na categoria #feature.


Tópicos Relacionados


Última Revisão por @SaraDev em 2022-07-13T00:00:00Z

\u003cdiv data-theme-toc=“true”\u003e \u003c/div\u003e

44 curtidas
UI: Topic and Category Export/Import
CLI command to migrate a single category
Moving topics between sites?
Category/Topic export fails with error "database "discourse_development" does not exist"
Easiest way to export a single topic?
Saving a Conversation
Migrate user custom fields to another instance
How to export user data from a category on a hosted site
Error Importing Categories from a Discourse Instance to Another
Import CSV User Activity from one Discourse to Another
How use API to convert topic in discourse1.com to discourse2.com
Can sub-forums of the same instance split up and move to new independent servers (or discourse instances)?
Help migrating category from one instance to another without admin on the source instance
Adding default sets of topics, categories and users to a new Discourse
How to download Comments and Topics
Downloading Content
Can we combine 2 separate discourse sites?
Tracking and resolving a schema drift cause
Merge two Discourse forums into one
Moving topics from a forum on one website to a forum on another website
Transfer topics between forums?
Forum Aquisition
Transfering inbox group messages to another instance?
Imported categories are not in parent category
I wonder how to add hundreds of users into a group? Is there any api?
Selective backups skipping settings and config
Test driving admin/moderation features
Add backup to existing Discourse instance
Merging two Discourse forums
Migrating vBulletin onto existing and live Discourse instance
Migrate topics from one discourse instance to another?
A system where people have to start at lesson 1, and cannot see the other lessons?
How to divide my community into 2 parts

Vou tentar novamente.

Existe uma maneira fácil de migrar os uploads relevantes junto com os Tópicos?

Não exatamente. Uma coisa que funciona na maioria das vezes é se você pegar todos esses uploads e colar o URL do original em qualquer post no site para o qual você está migrando, então o que deve acontecer é que esses uploads serão criados com o mesmo SHA e funcionará.

Então você faria a coisa que converte as coisas no post para o URL para obter esses URLs. (Eu nunca me lembro como fazer isso, então tenho que descobrir toda vez).

Hmmm - ainda estou um pouco confuso com isso. Você está dizendo que isso funcionará?

  1. Pegar todos os arquivos de upload do primeiro site
    • como?
  2. Colocá-los em um único tópico
  3. Eles gerarão o mesmo link relativo que tinham no site antigo e pronto!

Ou você quis dizer isto?

  1. Pegar todos os URLs absolutos em suas categorias de interesse do site antigo
  2. Colar estes em um Tópico
  3. Todos serão baixados para o novo site com o mesmo SHA e os links existentes funcionarão como mágica

Ou algo totalmente diferente?

Acho que qualquer um dos dois deve funcionar. No entanto, você pode obter essas imagens para o novo site, elas devem gerar o mesmo sha, então isso fará com que os links existentes nos tópicos funcionem magicamente.

Talvez você possa fazer algo como

cat_id=123
Topic.where(category_id: cat_id).each do| t|
  Post.where(topic_id: t.id) do |p|
      p.cooked.match(image url)....
         puts(the match)

E acho que se você fizer isso e colar esses links em uma postagem em qualquer lugar do seu site, ele baixará todas essas imagens para o local e criará o mesmo sha, então esses links. Você pode tentar alguns manualmente para ver.

É o meio da noite. Sua quilometragem pode variar.

1 curtida

Olá, não tenho certeza se este tutorial é o que eu quero fazer, mas levanto a questão aqui.

Se eu instalar o Discourse em um servidor, mas devido ao crescimento eu precisar migrar para um mais poderoso, estes são os passos?

O que acontece, por exemplo, com a opção de backup? Não posso fazê-lo, instalar o Discourse em outro servidor e depois restaurar a cópia de backup da outra instância a partir dessa opção?

Aguardo seu esclarecimento, pois quero saber como migrar quando precisar e não perder o trabalho que venho fazendo recentemente.

Não. Para mover para um servidor maior, um backup e restauração simples são tudo o que é necessário. Você também pode Mover um site Discourse para outro VPS com rsync