Pular para o conteúdo

Backup e restauração

Um backup é um arquivo .tar.gz com o banco de dados, as mídias e o slash.lock do projeto. Os backups ficam em storage/backups/, no servidor.

O painel faz o backup sozinho. Uma tarefa roda a cada hora e cria o backup do dia quando o automático mais novo tem 24 horas ou mais. O painel também faz essa checagem ao subir, depois que o servidor já está no ar. Assim, um projeto reiniciado com frequência também ganha o seu backup diário.

O painel guarda 7 backups automáticos, e apaga os mais antigos ao criar um novo. Os backups de segurança feitos antes de uma restauração têm a própria regra: guardam-se 3 backups. Os manuais nunca são apagados pelo painel. Eles ficam em storage/backups/ até você apagá-los no servidor.

Cada arquivo tem o nome backup-<instante UTC>-<tipo>.tar.gz. O tipo é auto, manual ou pre-restore. Dentro do arquivo ficam três itens:

  • db.bak: a cópia do banco de dados.
  • slash.lock: a versão do painel e dos módulos.
  • media/: os arquivos de mídia do projeto.

A pasta storage/backups/ fica acessível só para o usuário do serviço, e cada arquivo de backup também. Um backup tem os hashes das senhas e os e-mails dos usuários. Trate as cópias que você tirar dele com o mesmo cuidado.

Para fazer um backup agora, rode slash backup como o usuário do serviço, na pasta do projeto. Com o servidor no ar, o comando funciona: os dois revezam o acesso ao banco.

sudo -u slash-<projeto> -H sh -c 'cd /srv/<projeto> && /home/slash-<projeto>/.bun/bin/bun /opt/slash-kit/cli/bin.ts backup'

A saída de uma execução é esta:

Backup criado: storage/backups/backup-<data>-manual.tar.gz
[saída: 0]

Para ver o uso, rode slash backup --help:

uso: slash backup [--restore <arquivo>] [--dir <pasta>]
[saída: 0]

Dois erros do slash backup merecem atenção. Banco de dados não encontrado em <arquivo>. O servidor já rodou neste projeto? aparece quando o banco ainda não existe, ou seja, antes da primeira subida; nesse caso, suba o serviço antes. Arquivo de backup não encontrado: <arquivo> aparece no --restore quando o caminho e o nome dentro de storage/backups/ não batem com nenhum arquivo.

O botão Gerar backup agora, na tela Backup do painel, faz o mesmo.

Copie o backup para fora da VPS por sua conta. O projeto não faz cópia externa.

Restaure com o serviço parado. Os passos são estes:

  1. Pare o serviço: sudo systemctl stop slash-<projeto>.
  2. Rode slash backup --restore <arquivo> como o usuário do serviço. O <arquivo> pode ser o caminho do arquivo ou só o nome de um backup de storage/backups/.
  3. Responda s à pergunta. O comando mostra Restaurar … substitui o banco de dados e as imagens atuais. Um backup do estado atual é feito antes. Continuar? [s/N]. São aceitos como sim s, sim, y e yes, em qualquer caixa. Qualquer outra resposta cancela, com a mensagem Restauração cancelada: nada foi alterado.
  4. Suba o serviço de novo: sudo systemctl start slash-<projeto>.
  5. Publique o site de novo, na tela Publicação do painel. A linha de comando não publica o site.

Depois de restaurar, o comando informa três coisas. Todos saem do painel, e os links de convite e de recuperação de senha deixam de valer. O backup do estado anterior fica em storage/backups/, com o nome que o comando mostra. O site publicado só muda quando você pedir a publicação.

Antes de substituir o banco, a restauração guarda o estado atual como um backup pre-restore. Se a restauração não era a que você queria, restaure esse arquivo do mesmo jeito.

A restauração confere a versão do painel. Um backup feito por uma versão mais nova do painel é recusado, com a mensagem Este backup é de uma versão mais nova do painel (<versão do backup>) do que a instalada (<versão instalada>). Atualize o painel antes de restaurar. Esse backup só entra num projeto de painel igual ou mais novo. A 1.1.0 não traz comando de atualização (veja Atualização de versão).

Um backup de versão mais antiga pode ser restaurado pela linha de comando, com o serviço parado. Depois da restauração, o comando prepara o banco para a versão instalada. A tela de Backup do painel só restaura backups da mesma versão.

A exclusão de dados de um titular pela tela de Privacidade não atinge os backups. O titular excluído continua nos backups até eles expirarem:

  • Os automáticos expiram quando saem dos 7 backups mais recentes.
  • Os de segurança, quando saem dos 3 backups mais recentes.
  • Os manuais ficam até você apagá-los no servidor.

Ao restaurar um backup antigo, o titular volta junto com o restante do banco. Nesse caso, repita a exclusão dele na tela Privacidade.

Os limites de retenção estão na tabela de Vários projetos, mídia e atualização.