Backups met Restic
Goed, nu de webstek enige vorm heeft gekregen wordt het tijd om hetgeen ik vast wilde leggen eindelijk van me af te schrijven.
Scenario: ik heb dus een aantal (virtuele) machines waarvan ik graag de data wil backuppen. Met een collega heb ik een uitwisseling van backup-space ingeregeld; ik lever hem 2TB en hij mij. Daarvoor heb ik de beschikking gekregen over een openssh docker container. Daar zijn niet heel veel tools geinstalleerd, dus geen rsync of iets dergelijks. Navraag via IRC heeft me geleerd dat ik eens naar Restic moest kijken. Het is gewoon een repository waar je snapshots in opslaat.
Restic kan zijn data wegschrijven via bijvoorbeeld SFTP, maar helaas ging daar iets mis met mijn target... Ik zou moeten opzoeken wat dat ook al weer was; het was een of ander subcommando wat restic wilde gebruiken. Restic kan ook gebruik maken van rclone als backend en die heeft op zijn beurt weer ondersteuning voor SFTP zonder dat subcommando. En vervolgens gebruik ik Runrestic om niet zelf het wiel uit te vinden; het is een wrapper om restic heen. Runrestic verzorgt oa de prune van backups voor me.
Backups zijn dus als volgt geregeld: runrestic > restic > rclone > sftp > target
Rclone
apt-get install rclone
en dan de config-file /root/.config/rclone/rclone.conf
:
[backuprob]
type = sftp
host = ergensophetinternet.nl
user = tj
port = 2222
key_file = /root/.ssh/id_rsa
Runrestic
pip3 install --upgrade runrestic
Configuratie in /etc/runrestic/main.toml
:
name = "backuprob"
repositories = [
"rclone:backuprob:backups/decramy",
]
[execution]
parallel = true
[environment]
RESTIC_PASSWORD = "secret"
[backup]
sources = [
"/etc",
"/home",
"/root",
"/usr/local/bin",
"/usr/local/sbin",
"/var/lib/dpkg/status",
"/var/spool/cron/crontabs",
]
[prune]
keep-last = 7
keep-weekly = 10
keep-monthly = 30
group-by = "host,paths"
En de boel nog even activeren via /etc/cron.d/runrestic
:
03 18 * * * root PATH=$PATH:/usr/local/bin /usr/local/bin/runrestic
Restic
apt-get install restic
Zoals aangegeven werkt restic met een repository; deze moet dan ook aangemaakt worden.
runrestic init