Kapittel 8 · 8.1
Sikkerhetskopier med restic til et annet sted
Den daglige sikkerhetskopien fra WebOké (se Gjenopprett backuper fra WebOké) gjenoppretter alltid hele VPS-en din og ligger hos samme leverandør. Med restic lager du i tillegg din egen sikkerhetskopi: kryptert, på et annet sted, og du kan hente tilbake enkeltfiler fra den.
Hva trenger du?
- Et sted utenfor VPS-en som du kommer til via SFTP, for eksempel en lagringstjeneste eller en server nummer to. I eksemplene er det
backup.example.netmed brukerenbackup. - Et sterkt passord for sikkerhetskopien. Mister du det, er sikkerhetskopien ubrukelig. Ta også vare på det utenfor serveren, i passordbehandleren din.
Installere og gjøre klart
Sikkerhetskopien kjører som root, slik at den kan lese alt.
anna@web1:~$ sudo apt install restic
anna@web1:~$ sudo -i
root@web1:~# ssh-keygen -t ed25519 -C "restic web1" -N "" -f /root/.ssh/id_backup
root@web1:~# ssh-copy-id -i /root/.ssh/id_backup.pub backup@backup.example.net
root@web1:~# install -m 600 /dev/null /root/.restic-wachtwoord
root@web1:~# nano /root/.restic-wachtwoord
Legg inn i /root/.ssh/config at root skal bruke denne nøkkelen for sikkerhetskopiserveren:
Host backup.example.net
User backup
IdentityFile /root/.ssh/id_backup
Lag deretter repositoryet (stedet der restic lagrer alt):
root@web1:~# export RESTIC_REPOSITORY=sftp:backup@backup.example.net:/restic/web1
root@web1:~# export RESTIC_PASSWORD_FILE=/root/.restic-wachtwoord
root@web1:~# restic init
created restic repository 3c9a1e5b2d at sftp:backup@backup.example.net:/restic/web1
Skriptet for sikkerhetskopi
Legg dette i /usr/local/sbin/backup.sh og gjør det kjørbart med chmod 700 /usr/local/sbin/backup.sh:
#!/bin/sh
export RESTIC_REPOSITORY=sftp:backup@backup.example.net:/restic/web1
export RESTIC_PASSWORD_FILE=/root/.restic-wachtwoord
# 1. Databases dumpen (zie 8.2)
/usr/local/sbin/voor-backup.sh || exit 1
# 2. Apps met SQLite even stilzetten, back-up maken, weer starten
cd /srv/diensten
docker compose stop vaultwarden uptime-kuma n8n
restic backup /etc /home /root /srv /var/backups/db /var/lib/docker/volumes --exclude /var/lib/docker/volumes/diensten_wp-db
RESULTAAT=$?
docker compose start vaultwarden uptime-kuma n8n
[ "$RESULTAAT" -eq 0 ] || exit 1
# 3. Oude back-ups opruimen
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune || exit 1
Ta bare med de appene du faktisk har ved stop og start. Hvorfor de må stoppes en liten stund, står i Ta med databaser og Docker-volumer på riktig måte. Hva som står i voor-backup.sh, kan du også lese der. Appene starter alltid igjen, også hvis sikkerhetskopien mislykkes. Med forget og --prune beholder du 7 daglige, 4 ukentlige og 6 månedlige sikkerhetskopier. Resten ryddes bort.
Automatisk hver natt
Lag /etc/systemd/system/backup.service:
[Unit]
Description=restic back-up
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/backup.sh
og /etc/systemd/system/backup.timer:
[Unit]
Description=restic back-up elke nacht
[Timer]
OnCalendar=*-*-* 03:15
Persistent=true
[Install]
WantedBy=timers.target
root@web1:~# systemctl daemon-reload
root@web1:~# systemctl enable --now backup.timer
root@web1:~# systemctl start backup.service
root@web1:~# journalctl -u backup.service -e
Kontrollere og gjenopprette
root@web1:~# restic snapshots
root@web1:~# restic check
root@web1:~# restic restore latest --target /tmp/terug --include /srv/diensten/vw-data
Gjenopprett til en egen mappe, for eksempel /tmp/terug, og kopier deretter det du trenger. Øv på dette én gang i kvartalet: en sikkerhetskopi du aldri har gjenopprettet, er et håp, ikke en sikkerhetskopi.
Tips: Få beskjed hvis sikkerhetskopien ikke kjører. Lag en Push-monitor i Uptime Kuma (se Uptime Kuma: overvåk nettstedene og serveren din) og legg disse to linjene nederst i backup.sh. Uteblir signalet, får du et varsel.
sleep 30
curl -fsS -m 10 "https://status.example.com/api/push/JOUWCODE?status=up&msg=OK" >/dev/null