Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Automatizar upload do backup do banco de dados para o google drive #101

Open
guites opened this issue Oct 15, 2024 · 6 comments
Open

Automatizar upload do backup do banco de dados para o google drive #101

guites opened this issue Oct 15, 2024 · 6 comments
Labels
devops Issues relacionadas a infra estrutura e automações do projeto help wanted Extra attention is needed

Comments

@guites
Copy link
Collaborator

guites commented Oct 15, 2024

Abrindo esse issue estilo tiro no escuro, pq não sei se tem como fazer isso.

No servidor do hetzner eu tenho um cronjob que faz um backup do banco todo dia à meia noite.

A pasta de backups fica assim:

guites@debian-2gb-ash-1:~$ ls -la backups/
total 744
drwxr-xr-x 2 guites guites  4096 Oct 15 00:00 .
drwx------ 7 guites guites  4096 Oct 15 08:33 ..
-rw-r--r-- 1 guites guites 14742 Sep 24 22:05 2024-09-25T01:05:38+00:00.zip
-rw-r--r-- 1 guites guites 14742 Sep 24 22:06 2024-09-25T01:06:35+00:00.zip
-rw-r--r-- 1 guites guites 18880 Sep 26 00:00 2024-09-26T00:00:01-03:00.zip
-rw-r--r-- 1 guites guites 22334 Sep 27 00:00 2024-09-27T00:00:01-03:00.zip
-rw-r--r-- 1 guites guites 24205 Sep 28 00:00 2024-09-28T00:00:01-03:00.zip
-rw-r--r-- 1 guites guites 25706 Sep 29 00:00 2024-09-29T00:00:01-03:00.zip
-rw-r--r-- 1 guites guites 26365 Sep 30 00:00 2024-09-30T00:00:01-03:00.zip
-rw-r--r-- 1 guites guites 26365 Oct  1 00:00 2024-10-01T00:00:01-03:00.zip
-rw-r--r-- 1 guites guites 28283 Oct  2 00:00 2024-10-02T00:00:01-03:00.zip
-rw-r--r-- 1 guites guites 29084 Oct  3 00:00 2024-10-03T00:00:01-03:00.zip
-rw-r--r-- 1 guites guites 31112 Oct  4 00:00 2024-10-04T00:00:01-03:00.zip
-rw-r--r-- 1 guites guites 34826 Oct  5 00:00 2024-10-05T00:00:01-03:00.zip
-rw-r--r-- 1 guites guites 36643 Oct  6 00:00 2024-10-06T00:00:01-03:00.zip
-rw-r--r-- 1 guites guites 36878 Oct  7 00:00 2024-10-07T00:00:01-03:00.zip
-rw-r--r-- 1 guites guites 37405 Oct  8 00:00 2024-10-08T00:00:01-03:00.zip
-rw-r--r-- 1 guites guites 38340 Oct  9 00:00 2024-10-09T00:00:01-03:00.zip
-rw-r--r-- 1 guites guites 38973 Oct 10 00:00 2024-10-10T00:00:01-03:00.zip
-rw-r--r-- 1 guites guites 42751 Oct 11 00:00 2024-10-11T00:00:01-03:00.zip
-rw-r--r-- 1 guites guites 44374 Oct 12 00:00 2024-10-12T00:00:01-03:00.zip
-rw-r--r-- 1 guites guites 44955 Oct 13 00:00 2024-10-13T00:00:01-03:00.zip
-rw-r--r-- 1 guites guites 45796 Oct 14 00:00 2024-10-14T00:00:01-03:00.zip
-rw-r--r-- 1 guites guites 46793 Oct 15 00:00 2024-10-15T00:00:01-03:00.zip

Será que tem uma forma de automaticamente enviar o último backup pra esse diretório do google drive https://drive.google.com/drive/folders/1c57i0LdFqWWt7QwdI7cLFQhgpMjuiqUE ?

Assim poderíamos colocar no README esse link, pra novos devs conseguirem uma versão atualizada do banco.

ps. tem uma questão de segurança que é referente à tabela users, pq a gente taria compartilhando a versão criptografada da senha. Não sei se isso é um grande problema, mas daria pra sobrescrever a coluna password.

@guites guites added help wanted Extra attention is needed devops Issues relacionadas a infra estrutura e automações do projeto labels Oct 15, 2024
@guites
Copy link
Collaborator Author

guites commented Oct 15, 2024

@camilamaia 👀 @vianaz 👀 (sorrateiramente marcando quem eu sei que manja de devops)

@jbonadiman
Copy link

Olá! Acabei de chegar aqui e depois de dar uma passeada pelas issues, resolvi ajudar nessa que tá na mão 👋

Dá pra fazer isso tranquilo com o rclone. Na máquina do Hetzner você teria que instalar o rclone e depois usar o rclone config pra adicionar a configuração do Google Drive (a autenticação é interativa e tranquila, talvez haja maior dificuldade se não tiver um browser na máquina, mas ainda dá pra fazer).
Depois de ter a configuração você pode fazer o backup efetivamente usando o rclone copy ou rclone sync, dependendo de como você prefere deixar o setup. No cenário que você descreveu de simplesmente passar o banco mais recente pro Drive, acho que o rclone copy atende bem.
Você também pode fazer o backup dessa configuração do rclone se quiser, ela fica no diretório apontado por rclone config paths.

@guites
Copy link
Collaborator Author

guites commented Oct 21, 2024 via email

@jbonadiman
Copy link

Opa! Muito obrigado pela indicação. Vou ler a documentação com calma de noite, mas parece promissor. Realmente não tem browser na máquina pois eu acesso via ssh. Talvez tenha como gerar um token do Google ou algo assim

O rclone tem o comando rclone authorize em que você consegue autorizar no browser da sua máquina local e passar o token pro servidor, mas eu só fiz isso uma vez então não sei o passo-a-passo de cabeça 🤔. Mas lembro que não era muito complicado, só foge da configuração "next>next>next" habitual.

@guites
Copy link
Collaborator Author

guites commented Oct 21, 2024

O rclone tem o comando rclone authorize em que você consegue autorizar no browser da sua máquina local e passar o token pro servidor, mas eu só fiz isso uma vez então não sei o passo-a-passo de cabeça 🤔. Mas lembro que não era muito complicado, só foge da configuração "next>next>next" habitual.

Acho que deu bom! Usei o rclone config e segui esses passos aqui: https://rclone.org/drive/#making-your-own-client-id .

Configurei um remote chamado "cinemaempoa_backups" e consegui enviar um arquivo lá pro meu drive: https://drive.google.com/drive/u/0/folders/1f9qFHb2Fxdg_EGg3Vq4W-leDaGed9kXk

rclone sync test-rclone.txt cinemaempoa_backups:/cinemaempoa_backups

@guites
Copy link
Collaborator Author

guites commented Oct 21, 2024

Acho que pra conseguir finalizar essa tarefa ainda tem alguns passos:

  • Ajustar o arquivo Dockerfile.prod pra rodar com um usuário não-root (pq atualmente o arquivo flask_backend.sqlite tá sendo criado como root)
  • Achar uma forma de anonimizar os campos username/password da tabela users de forma programática (deve ter alguma forma de usar o cli do sqlite3 pra isso)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
devops Issues relacionadas a infra estrutura e automações do projeto help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

2 participants