Restaurar um backup pela linha de comando

:bookmark: Este guia explica como restaurar um backup do Discourse a partir da linha de comando sem usar a interface web do Discourse.
:person_raising_hand: Nível de utilizador exigido: Administrador
:wrench: Acesso ao console necessário

Veja como restaurar um backup do Discourse a partir da linha de comando, sem nunca iniciar a interface web do Discourse. Isso é útil quando você está mudando de servidor.

Pré-requisitos

Antes de começar, certifique-se de completar os seguintes passos:

  1. Baixe o arquivo de backup mais recente da instância do Discourse de origem.
  2. Inicialize a instância do Discourse de destino executando ./discourse-setup ou copiando seu app.yml existente.
  3. Certifique-se de que a instância do Discourse de destino esteja na versão mais recente. Atualize-a, se necessário.

Transferir o backup

  1. Conecte-se via SSH ao servidor de destino, ou crie a pasta de backup lá de outra forma:

mkdir -p /var/discourse/shared/standalone/backups/default

  1. Carregue seu arquivo de backup para o servidor de destino.

scp /path/to/backup/backup.tar.gz root@192.168.1.1:/var/discourse/shared/standalone/backups/default

Certifique-se de substituir os caminhos, nomes de arquivos e nomes de servidor pelos que você está usando – mas você quer que o arquivo de backup termine em:

/var/discourse/shared/standalone/backups/default

:mega: Você também pode carregar e baixar seu arquivo de backup do Discourse de sites populares de armazenamento na web, como Google Drive, Dropbox, OneDrive, etc. – você precisará procurar as instruções de linha de comando específicas com base no seu provedor de armazenamento na web preferido.

:warning: NÃO ALTERE O NOME DO ARQUIVO DE BACKUP! O Discourse trata o nome do arquivo de backup como metadados, portanto, se você alterar o nome do arquivo, a restauração não funcionará. Mantenha o nome de arquivo original.

Substitua /path/to/backup/discourse-xyz.tar.gz pelo caminho local do seu arquivo de backup e substitua \u003cserver_ip_address\u003e pelo endereço IP do servidor de destino.

:bulb: Se o Nginx for usado como proxy reverso certifique-se de que todos os caminhos para o backup sejam legíveis pelo contêiner e que o Nginx possa ler o arquivo .sock.

Restaurar o backup

  1. Acesse seu servidor de destino e navegue até a pasta do Discourse:
cd /var/discourse
  1. Entre no contêiner do aplicativo Docker do Discourse:
./launcher enter app
  1. Habilite a funcionalidade de restauração:
discourse enable_restore
  1. Restaure o arquivo de backup:
discourse restore sitename-2019-02-03-042252-v20190130013015.tar.gz

:bulb: Dica: Se você executar discourse restore sem um nome de arquivo, ele listará todos os arquivos de backup disponíveis.

:warning: Se a configuração backup_location do seu site estiver configurada para usar S3, mas você carregou manualmente o arquivo de backup para o sistema de arquivos local, você precisa especificar --location local:

discourse restore --location local sitename-2019-02-03-042252-v20190130013015.tar.gz

Da mesma forma, use --location s3 para restaurar diretamente de um backup S3 sem baixá-lo primeiro.

  1. Saia do contêiner do aplicativo Docker do Discourse:
exit

Reconstruir

Depois de restaurar o backup, você pode optar por reconstruir a instância de destino para garantir que todas as configurações e ajustes sejam aplicados corretamente.

:mega: Agora é um bom momento para atualizar /var/discourse/containers/app.yml com HTTPS completo, plugins adicionais ou configuração de CDN. Compare a configuração app.yml de ambas as instâncias para ter certeza!

cd /var/discourse
./launcher rebuild app

Habilitar E-mail

Quando um backup é restaurado, o envio de e-mails para não-membros da equipe é desabilitado. Você não quer que seu servidor de teste, novo servidor ou servidor para o qual você acabou de restaurar um backup por qualquer outro motivo comece a enviar e-mails aos seus usuários! Altere a configuração do site disable_emails para “no” para reativar o e-mail.

:tada: É isso. Seu servidor Discourse foi restaurado com sucesso.

78 curtidas
Move your Discourse Instance to a Different Server
Any other way to take backup and restore?
How easy is it to move to another server?
HELP! My Discourse just deleted everything?
Restore backup is broken
How to migrate Discourse from one server to another with the same DNS name
Best Practices for Backups
Problem upgrading Discourse
Upgrading v2.2.0.beta4 forum with unknown local changes
Set up file and image uploads to S3
Quick question about site backups
My install broke after updating, how can I fix it?
Is there any way to restore your site from backup in the terminal?
Migrating Discourse from one DigitalOcean droplet to another without downtime
Restore backup right away after installing Discourse
Unable to migrate to S3, therefore unable to restore from backup
Restore Failure - S3 (compatible) backup
"EXCEPTION: psql failed: DETAIL: Key (post_id)=(36946) is duplicated."
Migrate from another forum to Discourse
My install is 16,359 commits behind! Advice?
Trying to recover an installation
Migration failed: relation "user_required_fields_versions" already exists
How can I manually verify via the CLI and bypass the Congratulations, you installed Discourse! screen?
Configuring automatic backups
Migrating to a new server that has a new DB and new S3 buckets for backup and uploads
Intended path to migrate S3 to local
Problem when updating Discourse Forum
Failed to restore from the backup
Steps involved to downgrade from 2GB to 1GB on DO?
Forum offline: Restore is not working through web
Forum offline: Restore is not working through web
Testing Restore - not working
Entire site is a blank page after upgrade
"discourse: command not found" when trying to restore a backup from the command line
Stuck with 500 error after weird bugs and a rebuild
Plesk server migration
"Key is stored in legacy trusted.gpg keyring" warning
"Key is stored in legacy trusted.gpg keyring" warning
Discourse broken after moving servers
Stuck and lost updating forum, problems with PG migration
How to manually migrate s3 files to local?
Index_users_on_username_lower error during database restore: import failed
How can I get the current version information from my backup?
Backup Prod -> Snap -> Build Test -> Change Address
How to properly package discourse as an image
2FA with OTP broken after restoring from Backup
I'm trying to migrate an old discourse by creating a new discourse, but I'm having trouble
Recover from filesystem backup: can't rebuild nor start
Error: Can't notify admin while restoring backup during a migration to a fresh install
MKJ's Opinionated Discourse Deployment Configuration
Migrate from AWS to Digital Ocean with 2 containers, spaces and 2 CDNs
Cannot restore database: sql key is duplicated
Finding UI generated backup and restoring site
Backup discourse from the command line
Migration to a Self-Hosted solution from Kubernetes
How to download the backup file without SMTP function?
Redis Problems? (Forum broken after upgrade)
Can't upload backup
Can't upload backup
Can't upload backup
Rate limiter issues when uploading a backup file / can't disable rate limiter
Help restoring - system hung at midnight
Help restoring - system hung at midnight
Uploads missing after restore
My install is 16,359 commits behind! Advice?
Issues Rebuilding After Upgrade to Ubuntu 22.04

Estas instruções funcionaram para restaurarmos a partir do backup, mas tivemos que modificar o comando discourse restore para:

discourse restore --location local sitename-2019-02-03-042252-v20190130013015.tar.gz

(meu exemplo usa o nome do arquivo do exemplo acima) para que a restauração encontrasse os backups que colocamos no diretório /var/discourse/shared/standalone/backups/default (em oposição aos backups que estavam armazenados no s3).

2 curtidas

A reconstrução após a restauração é necessária?

Além disso, restaurei para um novo servidor onde há um proxy reverso NGINX que, em seguida, encaminha para o Discourse upstream. Portanto, desativei o SSL no Discourse, mas notei que durante a restauração:

Remapeando 'https://example.com' para 'http://example.com'

Isso está remapeando todos os links internos? É tão simples desfazer isso quanto discourse remap http://example.com https://example.com?

Não.

Parece que sim. Sim, você pode remapeá-los.

Você deve definir a variável force_https.

1 curtida

se o backup for de 15 GB, quanto espaço é necessário para restaurar?

1 curtida

Isso é apenas o banco de dados ou uploads também?

Provavelmente 3-5x mais.

1 curtida

é banco de dados + upload de 15 GB, tenho 20 GB de espaço em um HD de 60 GB, mas a restauração falha todas as vezes, preciso de pelo menos 50-60 GB de espaço para restaurar?

1 curtida

Você precisa de espaço suficiente para o backup, os uploads e o banco de dados descompactado.

Você pode tentar restaurar primeiro um backup somente do banco de dados e, em seguida, copiar os uploads manualmente com rsync.

2 curtidas

Verifiquei minha conta de administrador em auto-hospedagem e fiz o upload de um backup .sql.gz, não um .tar.gz.

Restaurar na interface do usuário não é útil, então realizei a partir de “Restaurar o backup” na linha de comando, obtendo [FAILED] no final do processo discourse restore. O arquivo de entrada de uma hospedagem oficial ser .tar.gz pode fazer o processo passar?

Minha hospedagem oficial tem alguns dias e minha auto-hospedagem começou a funcionar corretamente hoje após alterar os valores SMTP em container.yml.

1 curtida

Você precisará incluir qual erro obteve. O nome do arquivo tem informações de versão nele, então, se você renomeou o arquivo, provavelmente precisará renomeá-lo de volta, alterando apenas as palavras no início do nome do arquivo.

1 curtida

Existe alguma documentação para discourse restore em algum lugar? já que parece haver uma opção --location local, presumo que também haveria uma para S3?

Estou procurando restaurar backups localizados no S3 e evitar ter que baixá-los manualmente com antecedência.

EDIT: esquece. Acabei de descobrir que discourse restore --location s3 $filename funciona muito bem.

2 curtidas

Como habilitei o S3 em app.yml, um simples discourse restore <filename> funcionou perfeitamente.

Acho que se você pesquisar por backup restore s3, encontrará o post correto.

2 curtidas

Olá, concluí este processo usando s3(-cli) como meu scp e uma mudança no provedor de e-mail de saída de MailGun para Brevo

Desde a restauração, não consigo encontrar uma maneira de remover o banner?

A maneira mais fácil de remover o banner é habilitar os e-mails nas configurações do site

3 curtidas

Certo. Você também poderia escondê-lo com CSS! :joy:

1 curtida

Verdadeiro. Fiquei um pouco cauteloso ao recomendar isso porque tive que pensar em Air theme hides "outgoing email disabled" warning

1 curtida

Toda vez que você restaura um backup, o email é automaticamente desativado para não-funcionários. Imagino que isso foi adicionado ao código apenas algumas vezes após uma restauração ter sido feita em um servidor de teste que começou a inundar seus usuários com notificações para um servidor que eles não deveriam saber que existia.

Atualizei o OP de acordo:

2 curtidas

Nota para o guia de como fazer:

Se você restaura backups regularmente para fins de teste e seu servidor de teste está configurado corretamente, para enviar e-mails para um serviço de depuração de e-mail (como GitHub - maildev/maildev: 📫 SMTP Server + Web Interface for viewing and testing emails during development.), você pode querer habilitar e-mails via script:

docker exec -it app /bin/bash --login \
-c "rails runner 'SiteSetting.disable_emails=\"no\";'"

Nesse caso, você pode querer definir DISCOURSE_DISABLE_EMAILS como não no seu app.yml. (e também DISCOURSE_ENABLE_RESTORE para facilitar a restauração)

1 curtida