Um backup que você consegue restaurar é a diferença entre uma tarde chata e a perda de um projeto. O guia básico de backup de VPS explica a ideia. Este vai além com o restic e o BorgBackup: duas ferramentas que fazem backups criptografados e deduplicados em um segundo servidor ou em armazenamento de objetos.
Por que restic ou borg em vez de cópias simples
- Deduplicação. Só os dados alterados são armazenados, então os snapshots diários ficam pequenos.
- Criptografia. Os dados são criptografados antes de saírem do seu servidor.
- Snapshots. Você pode restaurar o estado de qualquer dia passado.
- Verificação. As duas ferramentas podem verificar a integridade do repositório.
Escolha uma. O restic é simples e funciona com vários tipos de armazenamento, incluindo SFTP e armazenamento compatível com S3. O borg é muito eficiente e funciona por SSH com um servidor que tenha o borg instalado.
Para onde enviar os backups
Nunca guarde o único backup no mesmo servidor. Use um segundo VPS em outro local, um bucket compatível com S3 ou uma storage box. Um VPS pequeno com um disco grande é um destino de backup barato. Veja os planos de VPS.
Restic: configuração
sudo apt install -y restic
export RESTIC_REPOSITORY="sftp:backup@backup.example.com:/srv/restic/myserver"
export RESTIC_PASSWORD_FILE=/root/.restic-pass
restic init
Crie o arquivo de senha com uma senha longa e aleatória e guarde uma cópia offline. Sem essa senha, não é possível restaurar os backups.
restic backup /etc /home /var/www --exclude-caches
restic snapshots
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
restic check
Borg: configuração
sudo apt install -y borgbackup
export BORG_REPO="ssh://backup@backup.example.com/srv/borg/myserver"
borg init --encryption=repokey-blake2
borg create --stats --compression zstd ::'{hostname}-{now:%Y-%m-%d}' /etc /home /var/www
borg prune --keep-daily 7 --keep-weekly 4 --keep-monthly 6
borg check
Exporte e guarde a chave do repositório com borg key export.
Bancos de dados exigem cuidado
Não copie arquivos de banco de dados em uso. Faça o dump primeiro e faça backup do dump:
mysqldump --single-transaction --all-databases | gzip > /var/backups/db.sql.gz
sudo -u postgres pg_dumpall | gzip > /var/backups/pg.sql.gz
Agende
Execute o backup a partir de um timer do systemd ou do cron. Uma linha simples de cron:
15 3 * * * root /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Receba um alerta em caso de falha, por exemplo com um ping de monitoramento no fim do script.
Teste uma restauração
restic restore latest --target /tmp/restore-test --include /etc/nginx
ls /tmp/restore-test
Teste uma restauração de verdade em uma máquina reserva de vez em quando. Um backup que você nunca testou é apenas uma esperança.