O Dropbox tem uma vantagem: ele sincroniza um novo backup assim que ele aparece no sistema. A ideia é colocar o novo backup na sua pasta local do Dropbox (com um script cron fornecido).
Antes de prosseguir, você precisa saber:
- Você pode usar o Dropbox para armazenar arquivos até o limite do seu plano.
- Você pode conectar até 3 dispositivos ao Dropbox no plano gratuito (para dispositivos Android, essa limitação pode ser contornada, aliás).
- Ao executar o Dropbox no seu servidor Linux, você precisa sincronizar apenas uma pasta. Como o Dropbox é uma solução de duas vias, ele pode preencher seu servidor com todos os dados da nuvem. Isso pode consumir espaço no seu servidor.
- Você precisa criar um script rsync adicional para sincronizar entre a pasta de backup do Discourse e a pasta local de backup do Dropbox. Isso requer espaço duplo para backups. Anteriormente, o Dropbox permitia links simbólicos, mas atualmente esse recurso não está disponível.
- Para acessar seus backups, você não precisa de permissões de root, mas neste guia executo o daemon do Dropbox como root (provavelmente inseguro, sinta-se à vontade para melhorar).
Primeiro, você precisa configurar os backups no Discourse em /admin/site_settings/category/backups (meus valores personalizados entre parênteses):
número máximo de backups (3) - isso gerencia quantos arquivos serão mantidos no Dropbox
frequência de backup (1) - diariamente
horário do backup (3:30 UTC) - padrão
nível de compressão gzip do backup (6) - escolha entre velocidade de compressão (1) ou menor tamanho (9), mas no caso de VPS, seu provedor de hospedagem pode reiniciar seu servidor em caso de alta utilização prolongada da CPU
Segundo, conecte seu servidor ao Dropbox com comandos de shell (importante: como executo o serviço como root, estou logado como root nesta etapa - então você pode tentar com seu usuário regular):
cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
# a diretório .dropbox-dist será criado
# execute o daemon do Dropbox
sh ~/.dropbox-dist/dropboxd
Quando você usar o Dropbox pela primeira vez no seu servidor, verá um link único. Você precisa copiá-lo e colá-lo no navegador da web e seguir as instruções. Após isso, um diretório Dropbox será criado na sua pasta pessoal. O Dropbox oficial recomenda baixar o script Python para gerenciar seu daemon. Eu não o utilizo.
Comandos para gerenciar o daemon:
dropbox status
dropbox start
dropbox stop
Verifique se o script de inicialização automática foi criado (clique para expandir o texto oculto):
#cat /etc/systemd/system/dropbox.service
[Unit]
Description=Dropbox Service
After=network.target
[Service]
ExecStart=/bin/sh -c '/usr/local/bin/dropbox start'
ExecStop=/bin/sh -c '/usr/local/bin/dropbox stop'
PIDFile=/root/.dropbox/dropbox.pid
User=root
Group=root
Type=forking
Restart=on-failure
RestartSec=5
StartLimitInterval=60s
StartLimitBurst=3
[Install]
WantedBy=multi-user.target
O Discourse fornece arquivos de backup e gerencia sua quantidade e frequência.
A tarefa Crontab rsync copia o novo backup para a pasta local do Dropbox.
Após isso, o Dropbox envia o novo arquivo para a nuvem.
Na próxima noite, quando o Discourse remove o arquivo de backup antigo, o rsync também o remove do Dropbox.
Terceiro, crie a pasta do Dropbox para cópias de backup:
mkdir ~/Dropbox/backups
Quarto, prepare a pasta para sincronização reversa (desincronize pastas desnecessárias)
Por exemplo, sua pasta do Dropbox tem subpastas e um arquivo:
backups
books
stuff
logo.png
Você precisa excluir tudo, exceto backups. Na verdade, o comando adiciona itens à lista de exclusão:
dropbox exclude add "Dropbox/books/"
dropbox exclude add "Dropbox/stuff/"
dropbox exclude add "Dropbox/logo.png"
Se por acaso você adicionou backups à lista de exclusão, pode devolvê-lo à sincronização, removendo o item da lista:
dropbox exclude remove "Dropbox/backups/"
O status atual de um backup específico pode ser verificado com o comando:
dropbox filestatus Dropbox/backups/niti-2021-01-21-033726-v20201218000001.tar.gz
Quinto, prepare o script para sincronização local e limpeza do cache /root/rsync.dropbox:
#!/bin/sh
rsync -avh --stats --progress --delete /var/discourse/shared/standalone/backups/default/ /root/Dropbox/backups/
rm -rf /root/Dropbox/.dropbox.cache/
Sexto, adicione o comando ao crontab às 8h no horário local: crontab -e
0 8 * * * /bin/bash /root/rsync.dropbox
Existe uma janela de tempo entre as 3h UTC e minhas 8h locais - isso deve ser suficiente para a conclusão do backup antes que ele comece a sincronizar com o Dropbox.
P.S.
Não verifiquei essa configuração há meio ano ou até mais. Agora percebi que o comando dropbox status retornou:
Você está usando uma versão antiga do Dropbox. Atualize para a versão mais recente para continuar usando o Dropbox.
A sincronização ainda funciona, portanto não vou atualizá-la. A última vez que o suporte a links simbólicos foi perdido.
