Como fazer backup do Discourse para o S3 | Discourse como fazer backup para S3

Discourse e S3 são grandes amigos, se você já está familiarizado com S3, isso será de grande ajuda.

Muitas pessoas têm espaço limitado em seus hosts virtuais e recursos limitados.

Usar S3 para backups pode otimizar o uso do espaço.

Você pode seguir as etapas abaixo para configurar:

Definir a frequência de backup

Acesse admin > backup e defina backup_frequency para 1. Este parâmetro indica a frequência de backup, o padrão é 7.
1 significa que o backup será feito uma vez por dia.
7 significa que o backup será feito uma vez a cada 7 dias.

Para a maioria dos sites, se você estiver usando S3 para armazenar backups, é melhor fazer backup todos os dias.

Definir o Bucket e o caminho de backup.

Este Bucket pode ser privado e não público. Aqui, é importante notar que se você também estiver usando S3 para armazenar imagens e anexos, o Bucket precisará ser definido como public ao configurar.

Para facilitar, você pode criar um bucket separado aqui. Tente não misturá-lo com o armazenamento de anexos e imagens.

Sugerimos que você defina um caminho de diretório adicional aqui, pois o Discourse criará várias pastas necessárias dentro desta pasta.

Para que seu armazenamento seja mais claro e explícito.

Definir s3_access_key_id e s3_secret_access_key

Na próxima etapa, você precisará definir s3_access_key_id, s3_secret_access_key e s3_region para os dados de backup que você armazenará. Estes 3 parâmetros são muito importantes, e a region não pode ser escolhida errada. Se o seu backup não for carregado, na maioria das vezes o problema será de permissão.

Para obter instruções detalhadas de configuração, consulte: Setting up file and image uploads to S3 - sysadmin - Discourse Meta

É importante notar que você precisa conceder permissões suficientes para seu key ID, caso contrário, você não poderá fazer o upload.

Definir o backup para armazenamento S3

Defina o método de backup para armazenamento S3.

Você precisa alterar o armazenamento Local para armazenamento S3 na opção de parâmetro.

Testar o backup

Quando tudo estiver configurado, você pode testar o backup.

Clique no botão de backup para testar. No menu de backup, clique em Backup diretamente.


Na interface que aparece, ele perguntará se você deseja incluir imagens e anexos carregados.

Geralmente, você seleciona Yes aqui. Em seguida, a interface será redirecionada para a interface de log, e as informações de backup serão exibidas através do log. Você pode verificar se o log exibe Finished para determinar se o backup foi concluído.

Mais importante ainda, você pode fazer login em sua conta S3 para confirmar se há um backup recente.


Você precisa verificar o tempo, tamanho e nome do arquivo para confirmação.


Ao configurar o backup S3, podemos expandir o espaço de armazenamento do Discourse, obtendo espaço de backup e armazenamento quase ilimitados. Para a operação do site, o backup automático e o upload são funções muito práticas.

Ao mesmo tempo, você terá vários backups armazenados, facilitando a restauração para diferentes pontos de backup ao restaurar o site.

Como você separou os arquivos de backup do Docker, isso é muito útil para seus backups diários. Pode reduzir significativamente o uso de espaço de armazenamento.

Também recomendamos armazenar imagens e anexos no S3, o que trará grandes vantagens para sua migração e restauração de backup.

Consulte o artigo original em iSharkFly - 飞鲨 para mais informações.

2 curtidas

Gostaria de perguntar se, ao montar S3 de backup e anexos em S3 diferentes, o conteúdo do S3 de anexos também será copiado durante o backup? Se a opção de incluir imagens e anexos enviados não for selecionada, o conteúdo do S3 usado para anexos ainda poderá ser exibido normalmente no fórum durante a restauração do backup?

Nunca examinei detalhadamente o conteúdo de backup do Discourse.

Depois de verificar nossos backups, entendi:

Se seus anexos usam armazenamento em nuvem da AWS, mesmo que você selecione Incluir anexos no backup durante o backup,


os anexos carregados na AWS não serão incluídos em seu arquivo de backup.

Os anexos incluídos são apenas aqueles armazenados em seu computador local, mas não na AWS.

Isso pode ser visto pelo tamanho do backup do nosso site. Se os anexos fossem incluídos, o tamanho do backup não seria de apenas 80 MB.


Isso indica que o backup contém apenas o banco de dados e os anexos locais.

Ao abrir este arquivo de download, você verá apenas 2 pastas. Uma é dump, que é o arquivo de dump do banco de dados PGSQL.


A outra é a pasta de upload. Esta pasta contém apenas os anexos carregados localmente, não os que foram armazenados na AWS. Para nós, esta pasta é muito pequena, com poucos arquivos.

Isso ocorre porque carregamos todos os anexos para a AWS logo após o início da comunidade.


A imagem acima mostra o conteúdo do arquivo de dump PGSQL. Você pode ver a versão do PGSQL em execução no contêiner do banco de dados Discourse a partir do arquivo de dump.

Se você quiser visualizar o banco de dados localmente, este arquivo de dump também pode ser importado diretamente para o seu contêiner local.

Problema de recuperação da AWS

Se você usou anexos da AWS, mas não usou o CDN da AWS, o conteúdo do corpo principal será o endereço do caminho absoluto em sua AWS.

No arquivo MD do tópico, ele é exibido como:


No entanto, após a publicação do conteúdo, o código HTML real é substituído pelo endereço CDN absoluto do seu site pelo Discourse.


Portanto, com base na resposta acima, se você não selecionar o backup de anexos durante o backup, o conteúdo dos anexos não será afetado durante a restauração.

Exceção

Na verdade, os anexos também foram afetados, principalmente devido à troca de domínio.

Como tivemos uma troca de domínio anteriormente, mas o conteúdo dos anexos estava intacto, o corpo principal não pôde ser associado, e mesmo a reconstrução do HTML não pôde associá-lo.

Nesse momento, pode ser um pouco complicado, e talvez seja necessário alterá-lo diretamente no banco de dados.

Desde que você não troque de domínio aleatoriamente, isso geralmente não é um problema.

Para discussões mais detalhadas, visite: Discourse 备份和恢复中有关附件的问题 - Discourse - iSharkFly

Gostaria de aproveitar para perguntar outra questão, não estou usando o Amazon S3, mas sim o R2 do Cloudflare e já fiz o backup com sucesso para o R2. Posso ver os arquivos no Cloudflare, mas os arquivos de backup não aparecem no painel de administração do Discourse. Onde pode estar o problema?


Faça backup manualmente mais uma vez e verifique o log de backup.

Provavelmente, isso ocorre porque o Discourse tem um erro na parte da API que verifica o status após o armazenamento de backups no R2.

Verifique se o conteúdo do log está completo.

Esta é a captura de tela que acabei de gerar, parece que tudo está normal. Além disso, criei a API com a permissão mais alta no R2.

Executei meu processo de backup, e parece que nossos logs são os mesmos.

[2024-07-26 11:56:00] pg_dump: executando SEQUENCE SET category_custom_fields_id_seq
[2024-07-26 11:56:00] Finalizando backup...
[2024-07-26 11:56:00] Criando arquivo: isharkfly-2024-07-26-115540-v20240723030506.tar.gz
[2024-07-26 11:56:00] Verificando se o arquivo já existe...
[2024-07-26 11:56:00] Criando arquivo vazio...
[2024-07-26 11:56:00] Arquivando dump de dados...
[2024-07-26 11:56:00] Arquivando uploads...
[2024-07-26 11:56:00] Pulando uploads armazenados no S3.
[2024-07-26 11:56:00] Removendo o diretório temporário '/var/www/discourse/tmp/backups/default/2024-07-26-115540'...
[2024-07-26 11:56:00] Compactando o arquivo, isso pode levar algum tempo...
[2024-07-26 11:56:05] Enviando arquivo...
[2024-07-26 11:56:09] Executando o hook after_create para o backup...
[2024-07-26 11:56:09] Excluindo backups antigos...
[2024-07-26 11:56:10] Limpando...
[2024-07-26 11:56:10] Removendo o arquivo do armazenamento local...
[2024-07-26 11:56:10] Removendo sobras de '.tar'...
[2024-07-26 11:56:10] Marcando backup como finalizado...
[2024-07-26 11:56:10] Atualizando estatísticas do disco...
[2024-07-26 11:56:10] Notificando 'honeymoose' sobre o fim do backup...
[2024-07-26 11:56:18] Concluído!

Em seguida, vamos verificar se o problema é com os registros da tabela de backup do banco de dados.

Você também usa R2? Ele é exibido com sucesso?

Eu uso AWS.

Esta parte deve ser fácil de configurar.