Un backup che puoi ripristinare fa la differenza tra un pomeriggio fastidioso e la perdita di un progetto. La guida base al backup di un VPS spiega l’idea. Questa va oltre con restic e BorgBackup: due strumenti che creano backup cifrati e deduplicati su un secondo server o su un object storage.
Perché restic o borg invece di semplici copie
- Deduplicazione. Vengono salvati solo i dati modificati, quindi gli snapshot giornalieri restano piccoli.
- Cifratura. I dati vengono cifrati prima di lasciare il tuo server.
- Snapshot. Puoi ripristinare lo stato di qualsiasi giorno passato.
- Verifica. Entrambi gli strumenti possono controllare l’integrità del repository.
Scegline uno. Restic è semplice e funziona con molti tipi di storage, inclusi SFTP e storage compatibile S3. Borg è molto efficiente e funziona via SSH verso un server su cui sia installato borg.
Dove inviare i backup
Non conservare mai l’unico backup sullo stesso server. Usa un secondo VPS in un’altra sede, un bucket compatibile S3 o una storage box. Un piccolo VPS con un grande disco è un bersaglio di backup economico. Vedi i piani VPS.
Restic: configurazione
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
Crea il file della password con una password lunga e casuale e conserva una copia offline. Senza quella password i backup non si possono ripristinare.
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: configurazione
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
Esporta e conserva la chiave del repository con borg key export.
I database richiedono attenzione
Non copiare i file di un database in funzione. Fai prima un dump e salva il dump nel backup:
mysqldump --single-transaction --all-databases | gzip > /var/backups/db.sql.gz
sudo -u postgres pg_dumpall | gzip > /var/backups/pg.sql.gz
Pianificalo
Esegui il backup da un timer systemd o da cron. Una semplice riga cron:
15 3 * * * root /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
Fatti avvisare in caso di errore, per esempio con un ping di monitoraggio alla fine dello script.
Testa un ripristino
restic restore latest --target /tmp/restore-test --include /etc/nginx
ls /tmp/restore-test
Ogni tanto prova un ripristino reale su una macchina di riserva. Un backup mai testato è solo una speranza.