Backup do discourse a partir da linha de comando

:bookmark: This guide covers how to back up and restore your Discourse site using command line tools, specifically designed for self-hosted environments.

:person_raising_hand: Required user level: Administrator

:information_source: You can use the below placeholders to automatically fill out the command line prompts in this guide:

Backing up

To create a backup of your Discourse site, follow these steps:

  1. Enter the container:
./launcher enter app
  1. Run the backup:
discourse backup
exit

This will print out the final filename of your backup. Download the backup and container configuration (if needed) to your local machine:

scp =USER=@=HOST=:/var/discourse/shared/standalone/backups/default/=FILENAME= .
scp =USER=@=HOST=:/var/discourse/containers/app.yml .

Restoring

To restore a Discourse backup, follow these steps:

  1. Install a Discourse site on the server you are restoring to.

If you’re testing this procedure multiple times, you can wipe the data on your test server.

Wipe Discourse data (optional)
./launcher stop app
./launcher destroy app
rm -r /var/discourse/shared/standalone/
mkdir -p /var/discourse/shared/standalone/backups/default/

  1. Upload the backup file:
scp =FILENAME= =USER=@=HOST=:/var/discourse/shared/standalone/backups/default/
  1. Enter the container and start the restore:
./launcher enter app
discourse enable_restore
discourse restore =FILENAME=

If you happen to forget what the filename was, run the “discourse restore” command by itself to get a list of available backup files.

:information_source: For a two-container setup, use ./launcher enter web_only and replace standalone with web-only in the path to backups.

For additional information about restoring Discourse backups, see Restore a backup from the command line.

Last edited by @SaraDev 2024-08-23T20:50:17Z

Check documentPerform check on document:
40 curtidas

onde devo executar este comando? no terminal do meu servidor na nuvem ou na minha máquina local?
embora ambos me deem um erro de permissão negada

Na sua máquina local.

Você está usando uma chave SSH para se conectar? O erro está relacionado.

O comando deve ser então:

scp -i /path_to_your_key/your_key.pem root@147.43.15.199:/var/discourse/shared/standalone/backups/default/discourse-2024-12-25-033740-v20241211222608.tar.gz .

Tenho um cenário em que quero migrar a instalação do Discourse para um servidor totalmente novo.
Meu plano era:

  1. criar uma nova instalação em branco do Discourse
  2. fazer backup do Discourse antigo, scp o backup para o novo servidor e restaurar
  3. Copiar tudo do S3 (imagens, etc.) para o novo S3 em uma conta diferente

O processo de restauração corre bem até começar a procurar o S3 e falhar por falta de acesso. Acho que está tentando acessar o mesmo nome de bucket S3 do Discourse antigo, mas este não existe no novo e não consigo criá-lo.

Existe uma solução recomendada?

Pensei em tentar mudar o nome do bucket S3 no Discourse antigo (antes de realizar o backup) e, em seguida, quando restaurar, ele esperaria ter o novo bucket S3. Mas tenho receio do que acontecerá com o Discourse antigo se eu simplesmente o mudar para um bucket inexistente.

Existe uma configuração oculta que fará o download dos arquivos s3 e os colocará no backup.

Você precisa configurar o s3 no arquivo yml como em Configurar um provedor de armazenamento de objetos compatível com S3 para uploads

Em seguida, ao restaurar o backup, ele enviará os uploads para o novo bucket.

1 curtida

Você conseguiu resolver isso?

Você precisa configurar o s3 nas variáveis de ambiente, conforme descrito em Configurar um provedor de armazenamento de objetos compatível com S3 para uploads

Isso é especialmente verdade se as configurações do s3 forem diferentes no novo servidor. Colocar os valores do s3 no banco de dados pode causar muitos problemas.

Mas existe uma opção para o comando de restauração que faz com que ele pause entre as várias partes. Isso pode ajudar.

Posso confirmar se o arquivo que você obtém aqui é o mesmo que você obtém ao fazer backup no site do fórum?

Eu sempre reconstruo na linha de comando, mas primeiro faço o backup usando o site. Desta vez, esqueci de fazer o backup! Acredito que usar a linha de comando para ambos pode me ajudar :slight_smile: Torça por mim.

O script de backup indicou:

Concluído!
[SUCESSO]
Backup realizado.
O arquivo de saída está em: /var/www/discourse/public/backups/default/NOME_ARQUIVO.tar.gz

Para começar, tentei baixar isso, que continha o caminho errado. Encontrei o arquivo em outro lugar e só então percebi que os comandos neste tópico estão corretos…

Olá! Só quero destacar que, para fazer um backup sem uploads, use o seguinte comando:

discourse backup --sql-only

1 curtida

Boa observação — devemos adicionar isso (e alguns outros detalhes) ao post original.

2 curtidas

Olá, @supermathie! Que bom “te ver”. Não sei se você se lembra de mim? Fizemos uma entrevista há algum tempo.

Além disso, seria legal se o parâmetro --help funcionasse depois de executar discourse backup. Em vez disso, o backup acaba se chamando “–helpXXX”. :lolsob:

Abraços!

Com a ajuda de alguma IA, aqui está uma lista abrangente de subcomandos para o comando discourse.
A CLI discourse (implementada via script/discourse usando a gem Thor) fornece 13 subcomandos principais categorizados em Backups & Restaurações, Gerenciamento de Site & Modos, Utilitários de Banco de Dados e Migração de Dados (Importação/Exportação).


Referência Rápida de Comandos

Categoria Subcomando Função Principal
Backup & Restauração backup Gera um arquivo de backup completo ou apenas do banco de dados.
restore Restaura um arquivo de backup .tar.gz na instância.
enable_restore Concede permissão para executar comandos de restauração.
disable_restore Revoga a permissão para realizar restaurações.
rollback Reverte o estado do banco de dados após uma falha na restauração.
Modos de Site enable_readonly Ativa o modo de somente leitura temporário em todo o site.
disable_readonly Remove o modo de somente leitura para restaurar as gravações normais do site.
request_refresh Aciona um prompt de atualização do navegador para todos os clientes conectados ativos.
Operações de Banco de Dados remap Executa busca e substituição global de texto nas tabelas do banco de dados.
Migração de Dados export_category Exporta uma única categoria, seus tópicos e usuários associados.
import_category Importa um arquivo de categoria no fórum atual.
export_topics Exporta tópicos específicos por ID e suas contas de autor/resposta.
import_topics Importa um arquivo de tópicos no fórum atual.

Documentação Detalhada dos Subcomandos

1. Comandos de Backup & Restauração

discourse backup [FILENAME]

  • Descrição: Cria um backup completo do banco de dados e dos ativos do fórum.

  • Flags:

  • --sql-only: (Booleano, Padrão: false) Faz dump apenas do banco de dados PostgreSQL, ignorando arquivos locais enviados.

  • --s3-uploads: (Booleano, Padrão: false) Força a inclusão de ativos armazenados no S3 no arquivo de backup (ignorado quando --sql-only está definido).

  • Exemplo:

discourse backup
discourse backup --sql-only

discourse restore [FILENAME]

  • Descrição: Restaura um backup de fórum de um arquivo .tar.gz local localizado em /var/www/discourse/public/backups/default.
  • Pré-requisito: Exige a execução de discourse enable_restore primeiro.
  • Exemplo:
discourse restore discourse-2026-07-22-120000-v2026xxxx.tar.gz

discourse enable_restore & discourse disable_restore

  • Descrição: Alterna a flag de aplicação que permite ou restringe tarefas de restauração via console/web.
  • Sequência de Uso:
discourse enable_restore
discourse restore <filename>
discourse disable_restore

discourse rollback

  • Descrição: Reverte o esquema e o estado do banco de dados para o ponto anterior a uma execução de restauração falha.

2. Controles de Estado do Site & Cliente

discourse enable_readonly & discourse disable_readonly

  • Descrição: Define ou limpa a READONLY_MODE_KEY no Redis.
  • Detalhes:
  • Congela gravações no banco de dados enquanto mantém o site legível para os usuários.
  • Usa um loop de tempo de vida curto (TTL) renovado enquanto ativo, impedindo que o site permaneça bloqueado permanentemente se a sessão do terminal falhar.

discourse request_refresh

  • Descrição: Envia uma mensagem de sistema via MessageBus instruindo todas as sessões web online a recarregar a página web. Útil após implantar atualizações de ativos ou mudanças globais de tema.

3. Remapeamento de Banco de Dados

discourse remap [OPTIONS] FROM TO

  • Descrição: Executa uma busca e substituição direta de string nas colunas de texto do banco de dados. Crucial ao atualizar nomes de domínio, caminhos de CDN ou prefixos de upload de imagens.

  • Flags:

  • --global: (Booleano) Varre e remapeia todas as tabelas, em vez das tabelas de conteúdo padrão.

  • --regex: (Booleano) Avalia o parâmetro FROM como uma expressão regular, em vez de uma string literal.

  • Exemplo:

discourse remap "old-domain.com" "new-domain.com"
discourse remap --global "/uploads/default/" "/cdn-uploads/"

4. Importação & Exportação Seletiva de Dados

discourse export_category [CATEGORY_ID]

  • Descrição: Serializa uma única categoria, incluindo todos os tópicos aninhados, posts e perfis de usuários participantes, em um arquivo de arquivo JSON.

discourse import_category [FILE_PATH]

  • Descrição: Lê um arquivo criado por export_category e mescla os dados da categoria na instância de destino.

discourse export_topics [TOPIC_IDS...]

  • Descrição: Pega um ou mais IDs de tópicos separados por espaço e exporta os tópicos, posts e contas de usuários relevantes.
  • Exemplo:
discourse export_topics 102 105 210

discourse import_topics [FILE_PATH]

  • Descrição: Importa um arquivo JSON criado por export_topics na instância Discourse de destino.
1 curtida