Objetivos de aprendizado
Depois de ler este artigo, você vai conseguir:
- Enviar um dump de banco e uma pasta de arquivos para um bucket compatível com S3
- Agendar o envio, nomear os arquivos por data e aplicar retenção automática
- Verificar a integridade e restaurar a partir do bucket
Nesta página
- O que você precisa antes de começar?
- Como configurar o rclone para um bucket S3?
- Como enviar o dump de um banco para o bucket?
- Como agendar o envio?
- Como aplicar retenção e apagar cópias antigas?
- Como restaurar e verificar que deu certo?
- Quais erros são comuns?
- Como fazer isso na Square Cloud
- Perguntas frequentes
Um backup que mora no mesmo servidor dos dados que protege falha junto com ele. Disco com defeito, conta suspensa, um rm -rf no diretório errado ou um ransomware levam os dois de uma vez. Por isso o destino clássico de uma cópia de segurança é um lugar separado, e o object storage é um dos mais práticos: barato por GB, acessível por HTTP de qualquer lugar e com API padronizada.
O fluxo completo é gerar o arquivo, enviar para um bucket compatível com S3, nomear por data, apagar o que ficou velho e testar a restauração. Os exemplos usam PostgreSQL e rclone, e as ideias valem para qualquer banco ou pasta. Confira as opções de cada ferramenta na documentação oficial, citada nas fontes.
O que você precisa antes de começar?#
- Um bucket em um serviço de object storage compatível com S3, com o endpoint, a chave de acesso e a chave secreta (veja o que é armazenamento compatível com S3 e o que é um bucket).
- O rclone instalado na máquina que roda o backup. O
aws-clitambém serve; os comandos são parecidos. - As ferramentas do banco:
pg_dumpepg_restorepara PostgreSQL (para MySQL e MongoDB, veja como fazer backup do banco de dados). - Uma chave dedicada ao backup, separada da chave que sua aplicação usa. Se o provedor permitir, limite-a a esse bucket.
Nunca coloque chaves no script nem no repositório. Use variáveis de ambiente ou um arquivo de configuração com permissão restrita (chmod 600).
Como configurar o rclone para um bucket S3?#
O rclone aceita a configuração por variáveis de ambiente, no formato RCLONE_CONFIG_<NOME>_<OPÇÃO>. Assim você não precisa de arquivo de configuração. Para um serviço compatível com S3 que não é a Amazon, use provider=Other:
export RCLONE_CONFIG_BACKUP_TYPE=s3
export RCLONE_CONFIG_BACKUP_PROVIDER=Other
export RCLONE_CONFIG_BACKUP_ENDPOINT="https://seu-endpoint.exemplo.com"
export RCLONE_CONFIG_BACKUP_ACCESS_KEY_ID="sua-chave"
export RCLONE_CONFIG_BACKUP_SECRET_ACCESS_KEY="seu-segredo"Os valores acima são exemplos: troque pelos do seu provedor. Teste a conexão listando o bucket:
rclone lsd backup:
rclone ls backup:meu-bucketSe o provedor reclamar de permissão ao criar o bucket e ele já existe, adicione --s3-no-check-bucket aos comandos de envio: o rclone deixa de checar (e tentar criar) o bucket.
Como enviar o dump de um banco para o bucket?#
Crie um script que gera o dump, calcula o hash, envia os dois arquivos e apaga o temporário. O nome carrega a data em UTC, o que ordena os arquivos e evita sobrescrever o de ontem.
#!/usr/bin/env bash
set -euo pipefail
: "${DATABASE_URL:?defina DATABASE_URL}"
: "${BUCKET:?defina BUCKET}"
STAMP="$(date -u +%Y-%m-%dT%H%M%SZ)"
DIR="$(mktemp -d)"
FILE="app-$STAMP.dump"
trap 'rm -rf "$DIR"' EXIT
# -Fc: formato custom, compactado e restaurável com pg_restore
pg_dump "$DATABASE_URL" -Fc -f "$DIR/$FILE"
(cd "$DIR" && sha256sum "$FILE" > "$FILE.sha256")
rclone copyto "$DIR/$FILE" "backup:$BUCKET/db/$FILE"
rclone copyto "$DIR/$FILE.sha256" "backup:$BUCKET/db/$FILE.sha256"
echo "enviado: db/$FILE"Pontos que importam:
set -euo pipefailfaz o script parar no primeiro erro. Sem isso, umpg_dumpque falhou pela metade seria enviado como se estivesse bom.- O
-Fcdopg_dumpgera um arquivo compactado que opg_restoresabe restaurar, inclusive parcialmente. - O
rclone copytocopia um arquivo para um caminho de destino exato. - Rode com
DATABASE_URLeBUCKETdefinidos no ambiente, nunca escritos no script.
E para uma pasta de arquivos?#
Para uploads de usuários ou configurações, compacte a pasta e envie como um arquivo só:
tar -czf "$DIR/files-$STAMP.tar.gz" -C /caminho/da/pasta .
rclone copyto "$DIR/files-$STAMP.tar.gz" "backup:$BUCKET/files/files-$STAMP.tar.gz"Se a pasta é grande e muda pouco, rclone copy /caminho/da/pasta backup:$BUCKET/files-atual envia só o que mudou. Evite rclone sync em backup: ele apaga no destino o que não existe mais na origem, e um erro na origem apagaria também a cópia.
Como agendar o envio?#
Use o cron do sistema. Para rodar todo dia às 3h, com as variáveis em um arquivo que só o seu usuário lê:
0 3 * * * set -a && . /etc/backup.env && /opt/scripts/backup-db.sh >> /var/log/backup-db.log 2>&1O set -a exporta todas as variáveis definidas no arquivo, para que o script e o rclone as enxerguem. O log guarda a saída para você investigar falhas. Como o cron não avisa quando algo quebra, vale um passo extra: no fim do script, chame uma URL de um monitor externo (um serviço de "heartbeat") e configure um alerta para quando a chamada deixar de chegar. O silêncio é o sintoma de um backup que parou.
Como aplicar retenção e apagar cópias antigas?#
Sem retenção, o bucket cresce para sempre e a conta também. Você tem duas opções:
- Regra de ciclo de vida no bucket, quando o provedor suporta: apaga os objetos de uma pasta depois de N dias, sem script. Veja regras de ciclo de vida.
- Limpeza pelo próprio script, que funciona em qualquer serviço:
rclone delete "backup:$BUCKET/db" --min-age 30dO --min-age 30d limita o comando a objetos com mais de 30 dias. Antes de agendar, rode com --dry-run para ver o que seria apagado.
A regra de ciclo de vida é preferível, porque continua valendo mesmo se o servidor de origem estiver fora do ar. Mantenha cópias de épocas diferentes (por exemplo, diárias de 7 dias e uma mensal): se um dado corrompido entrar no backup de hoje, você ainda precisa de uma versão anterior. O raciocínio completo está em a regra 3-2-1.
Como restaurar e verificar que deu certo?#
Um backup que nunca foi restaurado é só uma esperança. Teste o caminho de volta em uma máquina ou banco de teste:
# descobre o arquivo mais recente
rclone lsf "backup:$BUCKET/db" | grep '\.dump$' | sort | tail -n 1
# baixa o dump e o hash, mantendo o nome original
N=app-2026-10-13T030000Z.dump
rclone copyto "backup:$BUCKET/db/$N" "./$N"
rclone copyto "backup:$BUCKET/db/$N.sha256" "./$N.sha256"
# confere a integridade
sha256sum -c "$N.sha256"
# restaura em um banco novo
createdb teste_restore
pg_restore -d teste_restore --no-owner "$N"Baixar com o mesmo nome é necessário porque o arquivo .sha256 guarda o nome original do dump. Depois compare contagens (SELECT COUNT(*) nas tabelas principais) com o banco original e anote quanto tempo a restauração levou. Esse é o tempo real que você teria numa emergência.
Quais erros são comuns?#
- Dump parcial enviado como bom: falta
set -e/pipefailou ninguém olha o código de saída. - Chaves com poder demais: se a chave do backup também apaga o bucket inteiro e vazar, o atacante apaga as cópias. Use chave separada e, se o serviço oferecer, versionamento ou bloqueio de objetos.
- Cópia sem criptografia com dados pessoais: criptografe com
gpgouageantes dorclone, e guarde a chave fora do bucket. rclone syncno lugar decopy: apaga o destino junto com a origem.- Arquivos grandes falhando: confira o limite de tamanho do provedor e o suporte a upload multipart. Veja como enviar arquivos grandes.
- Nunca testar a restauração: o problema só aparece quando você mais precisa.
Como fazer isso na Square Cloud#
O Blob Storage da Square Cloud é um object storage com API compatível com S3, então os comandos deste guia funcionam trocando o endpoint e as chaves: no rclone, defina RCLONE_CONFIG_BACKUP_ENDPOINT="https://s3-blob.squarecloud.app", RCLONE_CONFIG_BACKUP_REGION=auto e as chaves S3 geradas na aba "Acesso S3" do painel. O aws-cli e o boto3 seguem a mesma ideia. Cada conta tem três buckets fixos (public, private e legacy, este só leitura), e as pastas são prefixos de chave: mande os dumps para o private, numa pasta como db/.
Não há taxa de entrada nem de saída (egress), e todo plano já inclui uma cota de 5 GB a 250 GB. Para a retenção, a regra de pasta "apagar após N dias" substitui o rclone delete --min-age: a contagem parte da última escrita de cada arquivo, e prazos abaixo de 7 dias só existem no Enterprise. Arquivos de até 10 GB são aceitos, o multipart só é obrigatório acima de 100 MB, e a durabilidade é de 99,999999999% com replicação tripla.
Os snapshots da Square Cloud (manuais em todo plano; diários e automáticos para bancos em todo plano com bancos e para aplicações a partir do Pro) complementam esse fluxo. Eles cobrem a recuperação rápida, inclusive restaurar o snapshot de uma aplicação numa aplicação nova em um clique. Já os dumps que você envia ao Blob com rclone são uma cópia que você controla e leva para onde quiser.
Veja cotas e detalhes na página do Blob Storage.
Blob Storage
Object storage compatível com S3, sem taxa de saída
Perguntas frequentes
Por que não guardar o backup no mesmo servidor do banco?
Porque o servidor e a cópia compartilham os mesmos riscos: disco com falha, conta suspensa, exclusão por engano ou ransomware. Se os dois somem juntos, não existe backup. Uma cópia em outro serviço elimina esse ponto único de falha.
Qual ferramenta uso para enviar: rclone ou aws-cli?
Os dois falam a API S3. O rclone é mais confortável para copiar pastas e aplicar filtros de idade; o aws-cli é a escolha natural se você já o usa. Para um serviço compatível com S3, ambos só precisam do endpoint e das chaves.
Quantas cópias devo manter no bucket?
Depende de quanto tempo atrás você pode precisar voltar. Um padrão comum é guardar diárias por 7 a 30 dias e, se fizer sentido, uma por mês por mais tempo. Defina o prazo e deixe uma regra de expiração apagar o resto.
Preciso criptografar o backup antes de enviar?
Se o arquivo tem dados pessoais ou segredos, vale criptografar antes do envio, com gpg ou age, para que ninguém com acesso ao bucket consiga lê-lo. A chave de descriptografia deve ficar guardada separadamente do bucket.
Como sei que o backup do bucket realmente restaura?
Só restaurando. Baixe o arquivo mais recente, restaure em um banco de teste e compare contagens de linhas. Faça isso periodicamente e anote quanto tempo levou.
Mais em Storage
Ver todos os 15 artigos- O que é uma URL assinada (pre-signed URL) e quando usarUma URL assinada (pre-signed URL) é um link temporário para um arquivo privado. Veja como funciona, o que ela não faz e quando usar.
- O que é armazenamento de objetos (object storage)Armazenamento de objetos guarda arquivos como objetos com chave e metadados, acessados por API HTTP. Veja como funciona, para que serve e seus limites.
- O que é S3 e armazenamento compatível com S3S3 é o armazenamento de objetos da Amazon e virou a API padrão do setor. Veja o que significa ser compatível com S3, o que muda e como conectar via boto3.
- Upload de arquivos grandes: multipart e upload retomávelO upload multipart divide um arquivo grande em partes enviadas em paralelo e reenviadas uma a uma. Veja o passo a passo em Python, como retomar e os erros comuns.