Backup do Discourse no droplet DO para dispositivo NAS

Olá, estou procurando uma maneira de fazer backups automatizados do meu novo fórum Discourse (configurado em um droplet da Digital Ocean) para o dispositivo NAS na minha rede doméstica. Como isso pode ser feito?

Não sou programador e não saberia por onde começar para criar um plugin para esse fim.

A maneira mais fácil é executar algum tipo de tarefa automatizada (cron job). Dependendo do NAS que você possui, é possível executar comandos básicos do Linux, como rsync.

Você precisa de uma forma de conectar o NAS e o Droplet. Uma vez encontrada essa forma, acredito que um plugin seria exagero, por exemplo. Você só precisa de algo como o código abaixo, para ser executado no seu NAS em um cron job

rsync -avz --progress -e "ssh -i ~/.ssh/id-rsa" example.com:/var/discourse/shared/standalone/backups /folder/in/the/nas

A capacidade de executar algo assim, como dito acima, dependerá de qual NAS você possui.

Obrigado, Mario. Tenho um Netgear ReadyNAS Ultra 6 antigo rodando o OS6, que acredito que possa suportar essa abordagem (vou investigar).

Acho que parte do problema para mim está em identificar quais arquivos/pastas fazer backup — presumo que seja apenas o banco de dados? (e presumo que todas as imagens/anexos postados etc estejam incorporados dentro dele?)

Qual caminho eu usaria para encontrar o banco de dados? O banco de dados é mesmo armazenado como um arquivo dentro do diretório do Discourse? Eu explorei o /var/discourse e não vi nada que parecesse um arquivo de banco de dados, aos olhos de um leigo.

Você deseja ativar backups diários e obter

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

Obrigado, Jay — parece que é isso mesmo!
É correto assumir que, se eu tiver ativado a opção ‘incluir uploads nos backups’, não há mais nada que precise ser mantido em backup, caso eu precise começar do zero em outro servidor?

(assumindo que plugins de terceiros que tenho usado não ficarão repentinamente indisponíveis para download novamente)

Além disso, existe alguma maneira de limpar automaticamente o diretório de backups diários, de modo que, por exemplo, sejam mantidos no servidor apenas os últimos 7 dias de backups diários?

Sim, existem configurações no Painel de Administração, mas não me lembro dos nomes agora. O script que enviei anteriormente já usa o caminho padrão onde os backups são armazenados.

No entanto, com o rsync no NAS e aquele comando, você pode ajustá-lo para que ele também apague os backups antigos do NAS. Assim, tudo está configurado.

Obrigado, Mariano.
No fórum do ReadyNAS, houve uma sugestão de que o uso do cron no ReadyNAS é possível, mas não ideal, e que os ‘timers do systemd’ integrados seriam melhores. Não tenho certeza se isso permite algo tão avançado quanto limpezas de diretórios remotos, porém.

Estou atualmente enfrentando erros de ‘Permission denied (publickey)’ sempre que tento conectar do ReadyNAS ao meu servidor Discourse — mesmo tendo adicionado a chave pública do ReadyNAS à lista de usuários SSH no Digital Ocean.

Vou retornar aqui com novidades se fizer algum progresso, para quem mais estiver tentando isso.

A limpeza é feita diretamente pelo Discourse no droplet, mas o rsync tem um milhão de opções, então você pode personalizar o processo de cópia dos backups como preferir.

Certifique-se de reiniciar o servidor SSH; às vezes, isso resolve alguns problemas relacionados a chaves públicas.

Obrigado, Mariano.
Apenas reiniciei o servidor e ainda estou recebendo:

Permission denied (publickey).
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: unexplained error (code 255) at io.c(235) [Receiver=3.1.3]

Sem dúvida, o problema é comigo, tentando fazer login como o usuário errado ou algo assim — embora eu tenha tentado fazer login a partir do ReadyNAS usando o nome que dei à chave pública ao adicioná-la ao Digital Ocean, bem como ‘root’. Nenhum dos dois parece funcionar.

Você já fez login no servidor com uma chave? Como quando instalou o Discourse ou recriou o aplicativo?

Pode ser que (embora não devesse ser) a autenticação pública do SSH no servidor esteja desabilitada, ou talvez o NAS esteja usando a chave errada para fazer login.

Lembre-se de alterar para o nome e o caminho corretos da chave nesta parte do comando "ssh -i ~/.ssh/id-rsa".

*** EDIÇÃO ***
Obrigado, Mariano. Conseguimos fazer funcionar no final.

Em resumo, para qualquer outra pessoa tentando isso:

  1. Ative o SSH no ReadyNAS ReadyNAS OS 6: SSH access support and configuration guides - NETGEAR Support

  2. Use o PuTTY para acessar o servidor Digital Ocean e digite

nano /root/.ssh/authorized_keys

  1. No editor, copie e cole o texto da chave pública usado pelo ReadyNAS, anexando-o ao final do arquivo /root/.ssh/authorized_keys (cuidado para não sobrescrever nenhuma chave já presente).

  2. Nas configurações da caixa de diálogo de backup do ReadyNAS, usei:

Nome: Backup via Rsync sobre SSH remoto (seleção no menu suspenso)
Host: mydomain.com (ou o endereço IP do servidor)
Porta: 22
Caminho: /var/discourse/shared/standalone/backups/default
Login: root

(Nota: se você seguiu corretamente as instruções para configurar o ReadyNAS para acesso SSH, nenhuma frase de senha SSH estará associada ao par de chaves pública/privada do SSH. Isso é bastante importante, pois a caixa de diálogo de backup do ReadyNAS não prevê o uso de frase de senha)

No início, esse processo não funcionou completamente para mim — ao usar o botão ‘Testar’ na caixa de diálogo de backup do ReadyNAS com essas configurações, a conexão foi bem-sucedida, mas ao iniciar um backup, gerou o erro ‘Cota de disco excedida (122)’.
Mas então, algumas horas depois, sem nenhuma intervenção óbvia adicional da minha parte, quando o processo de backup foi iniciado novamente automaticamente na hora designada, desta vez funcionou como deveria.

Possivelmente, meus esforços anteriores para estabelecer uma conexão e testar usando configurações diferentes estavam tendo algum efeito residual que impedia o funcionamento, ou talvez ter feito login simultaneamente no servidor a partir do meu PC como root via PuTTY ao mesmo tempo que como root via FileZilla (ambos usando a chave padrão para root) e, em seguida, tentar fazer login como root via utilitário de backup do dispositivo ReadyNAS (usando a chave pública do ReadyNAS que havia sido adicionada ao root) foi problemático.