Backups · S3 · VPS

Como fazer backup de um VPS para um S3 balde com Cipi

Por · Última atualização: · grátis para ler, sem acesso pago

Um dump que reside no mesmo disco que o aplicativo é um instantâneo, não um backup. Este guia percorre todo o ciclo externo comCipi: crie um bucket, armazene credenciais uma vez, execute o primeiro upload, agende-o, remova os antigos e restaure em um VPS limpo para saber que o plano funciona.

Neste guia
  1. Por que o dump do mesmo disco não é um backup
  2. O que Cipi realmente carrega
  3. O que você precisa
  4. Crie o bucket
  5. Configure Cipi uma vez
  6. Primeiro faça backup e verifique
  7. Cron, retenção e poda
  8. Exercício de restore
  9. Backup antes de cada lançamento
  10. Erros que tornam os backups inúteis
  11. Perguntas frequentes

Por que o dump do mesmo disco não é um backup

Instantâneos do provedor, um .sql.gz em /var/log, um tarball ao lado storage/ - todos morrem com a máquina. Disco cheio, ransomware, dedos gordos rm -rf, uma interrupção na região, um VPS roubado: a cópia que você precisa é aquela que já estava em outro lugar.

A regra que ainda vale é 3-2-1: três cópias, duas mídias, uma externa. Cipi cobre o último salto. cipi db backup oferece uma reversão local rápida; cipi backup run envia o banco de dados e o shared/ pasta para Amazon S3 ou qualquer bucket compatível com S3. Essa é a cópia que você restaura quando o VPS desaparece.

Um backup que você nunca restaurou é uma esperança, não um plano. Faça o orçamento 20 minutos após o primeiro upload bem-sucedido e faça o detalhamento Restaurar. Repita a cada trimestre.

O que Cipi realmente carrega

Cada execução cria um prefixo com carimbo de data/hora no bucket:

s3://your-bucket/cipi/myapp/2026-08-22_020015/

Dentro dessa pasta você obtém dois arquivos:

O código não está no arquivo. Os lançamentos vivem no Git; se você precisar da última árvore boa, clone o repositório. O que você não pode clonar é o banco de dados e os arquivos carregados pelos usuários após a ativação – esses dois arquivos são o ponto de restauração.

Desde v4.7.14 o teste acontece no disco em /var/tmp, não em um suporte de RAM /tmp. Aplicativos grandes não morrem mais no meio porque os tmpfs ficam cheios. Substituir por tmpdir em backup.json ou o CIPI_BACKUP_TMPDIR variável de ambiente.

O que você precisa

Crie o bucket

Escolha um provedor, crie um bucket privado em uma região que seja não no mesmo datacenter que VPS e crie um par de chaves com escopo apenas para esse bucket. Habilite a criptografia do lado do servidor se o provedor oferecer. O controle de versão é um seguro opcional, mas barato contra substituição acidental.

Ações mínimas do IAM nesse bucket: s3:PutObject, s3:GetObject, s3:ListBucket, s3:DeleteObject. O último só é necessário se você quiser cipi backup prune para limpar prefixos antigos.

ProvedorURL do terminal
AWS S3deixe vazio
Armazenamento de objetos Hetznerhttps://<datacenter>.your-objectstorage.com
Espaços DigitalOceanhttps://<region>.digitaloceanspaces.com
Contra-chama B2https://s3.<region>.backblazeb2.com
MinIOhttps://your-minio-host
Johnny (self-hosted S3)seu URL público do Johnny

Qualquer loja compatível com S3 funciona. Se você quiser a cópia externa em uma segunda VPS sua — e não em outra fatura de SaaS — Johnny é a opção open-source já mencionada no self-hosted pilha de desenvolvedores.

Configure Cipi uma vez

Faça login como usuário administrador, torne-se root e execute o assistente. Ele escreve /etc/cipi/backup.conf e você não deverá tocá-lo novamente, a menos que a chave ou o balde mudem.

# as root on the VPS $ cipi backup configure # → AWS Access Key ID # → AWS Secret Access Key # → Bucket name # → Region # → Endpoint URL (empty for AWS; required for everyone else)

Mantenha /etc/cipi/backup.conf modo 600 e de propriedade do root. Essas chaves abrem todos os backups que você fará. Se uma chave vazar, gire-a no provedor e execute cipi backup configure novamente – objetos antigos permanecem no balde; apenas novos uploads usam a nova chave.

cipi db backup funciona sem configuração. cipi backup run não. Se o comando S3 falhar com um erro de credenciais, você pulou esta etapa.

Primeiro faça backup e verifique

Não coloque nada em cron até que uma corrida manual caia no balde. Comece com um único aplicativo:

$ cipi backup run myapp # → s3://your-bucket/cipi/myapp/2026-08-22_143015/db.sql.gz # → s3://your-bucket/cipi/myapp/2026-08-22_143015/shared.tar.gz $ cipi backup list myapp $ cipi backup run # no app name = every app on the server

Em seguida, confirme no console do provedor — ou com o AWS CLI, que também se comunica com endpoints compatíveis se você passar --endpoint-url:

$ aws s3 ls s3://your-bucket/cipi/myapp/ $ aws s3 ls s3://your-bucket/cipi/myapp/2026-08-22_143015/

Você deverá ver os dois objetos, com tamanhos que correspondem a um dump compactado mais o shared/ árvore. Um objeto de 200 bytes geralmente significa um despejo vazio ou uma falha no upload – corrija isso antes de agendar qualquer coisa.

Cron, retenção e poda

Diariamente às 02:00 é o padrão chato. Poda às 03:00 para que a corrida de ontem nunca seja excluída por uma corrida. Quatro semanas de histórico são suficientes para a maioria dos Laravel aplicativos; diminua para dois se a conta do balde doer, aumente para oito se precisar resolver um bug de dados de gravação lenta.

# crontab -e as root 0 2 * * * /usr/local/bin/cipi backup run myapp >> /var/log/cipi/backup.log 2>&1 0 3 * * * /usr/local/bin/cipi backup prune myapp --weeks=4 >> /var/log/cipi/backup-prune.log 2>&1

Para fazer backup de todos os aplicativos da caixa, remova o nome do aplicativo de ambos os comandos. cipi backup prune lê o mesmo /etc/cipi/backup.conf e funciona com qualquer provedor compatível.

$ cipi backup prune myapp --weeks=4 $ cipi backup prune myapp --weeks=2

Assistir /var/log/cipi/backup.log por uma semana. Um cron silencioso que falhou no primeiro dia é como as pessoas descobrem que não têm backups na manhã seguinte à morte de um disco.

Exercício de restore

Faça isso em um aplicativo de teste ou em um VPS sobressalente, e não no tráfego ao vivo na primeira vez. O caminho feliz de um prefixo S3 de volta para um aplicativo em execução:

$ cipi backup list myapp $ aws s3 cp s3://your-bucket/cipi/myapp/2026-08-22_143015/db.sql.gz /tmp/db.sql.gz $ cipi db restore myapp /tmp/db.sql.gz $ aws s3 cp s3://your-bucket/cipi/myapp/2026-08-22_143015/shared.tar.gz /tmp/shared.tar.gz $ tar -xzf /tmp/shared.tar.gz -C /home/myapp/

Se o VPS sumir, a sequência é: instale Cipi em uma nova caixa Ubuntu, cipi app create com o mesmo controle remoto Git, então as duas restaurações acima, então cipi ssl install e um corte de DNS. O documentos de infraestrutura liste os mesmos comandos; este exercício é a parte que a maioria das pessoas pula.

Para uma reversão no mesmo servidor — migração incorreta, implantação incorreta — o dump local é mais rápido:

$ ls -lh /var/log/cipi/backups/myapp_*.sql.gz $ cipi db restore myapp /var/log/cipi/backups/myapp_20260822_143012.sql.gz $ cipi deploy myapp --rollback

Despejos locais em /var/log/cipi/backups/ nunca são excluídos automaticamente. Em uma agenda de implantação ocupada, eles preenchem o disco. Mantenha os últimos cinco e descarte o resto: ls -t /var/log/cipi/backups/myapp_*.sql.gz | tail -n +6 | xargs rm -f.

Backup antes de cada lançamento

Webhook a implantação automática não pode pausar para um backup — o push é acionado cipi deploy imediatamente. Para produção, coloque um estágio de backup no CI para que um despejo com falha bloqueie a liberação. As GitHub ações completas e os exemplos GitLab estão em Implantação segura – backup antes do lançamento. Os dois comandos que você precisa nesse estágio:

$ cipi db backup myapp # fast local rollback $ cipi backup run myapp # off-site copy of DB + shared/

Usados ​​em conjunto, você obtém uma restauração na mesma caixa que leva segundos e um prefixo S3 que você ainda pode abrir se a caixa desaparecer. Se algum dos comandos falhar, não implemente.

Erros que tornam os backups inúteis

Execute-o em um Cipi VPS

Cipi é o open-source Laravel implantação gratuita CLI usada neste guia. Um comando transforma um novo Ubuntu VPS em um servidor de produção reforçado – e cipi backup configure é a etapa que torna o servidor sobrevivente.

wget -O - https://cipi.sh/setup.sh | bash

Perguntas frequentes

Cipi funciona apenas com Amazon S3?

Não. cipi backup configure aceita qualquer endpoint compatível com S3: Hetzner Object Storage, DigitalOcean Spaces, Backblaze B2, MinIO ou um armazenamento self-hosted como Johnny. Deixe o endpoint vazio para AWS; preencha-o para todos os outros provedores.

Qual é a diferença entre cipi db backup e cipi backup run?

cipi db backup grava um dump SQL compactado no mesmo VPS em /var/log/cipi/backups/. Está sempre disponível e não precisa de configuração. cipi backup run despeja o banco de dados e o aplicativo shared/ pasta e, em seguida, carrega ambos os arquivos para o seu bucket S3. Use o dump local para uma reversão rápida; use a cópia S3 para uma restauração externa real.

Com que frequência devo fazer backup de um Laravel VPS?

Diariamente é o padrão sensato para produção. Adicionar cipi backup run para o crontab da raiz em um horário tranquilo e, em seguida, podar com mais de quatro semanas. Se o banco de dados mudar constantemente, execute-o duas vezes por dia. Sempre execute um backup antes de uma migração arriscada ou implantação de produção.

Posso restaurar um backup Cipi S3 para um novo VPS?

Sim - esse é o objetivo de uma cópia externa. Instale Cipi em um novo Ubuntu VPS, recrie o aplicativo, baixe db.sql.gz e shared.tar.gz do bucket, restaure o banco de dados comcipi db restoree extrair shared/ em /home/<app>/.

Onde Cipi armazena credenciais S3?

cipi backup configure escreve-los para /etc/cipi/backup.conf. Mantenha esse arquivo apenas como root. As mesmas credenciais são usadas por cipi backup run, list e prune. O teste de arquivos grandes é padronizado como /var/tmp então um pequeno backup de RAM /tmp não aborta o trabalho.

Continue lendo