Kapitel 8 · 8.1
Backup med restic til et andet sted
Den daglige backup fra WebOké (se Gendan backup fra WebOké) gendanner altid hele din VPS og ligger hos den samme udbyder. Med restic laver du derudover din egen backup: krypteret, et andet sted, og du kan hente enkelte filer tilbage fra den.
Hvad har du brug for?
- Et sted uden for din VPS, som du kan nå via SFTP, for eksempel en lagringstjeneste eller en ekstra server. I eksemplerne er det
backup.example.netmed brugerenbackup. - En stærk adgangskode til backuppen. Mister du den, kan din backup ikke bruges. Gem den også uden for serveren, i din adgangskodeadministrator.
Installér og gør klar
Backuppen kører som root, så den kan læse 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
Angiv i /root/.ssh/config, at root bruger denne nøgle til backupserveren:
Host backup.example.net
User backup
IdentityFile /root/.ssh/id_backup
Opret derefter repositoriet (stedet, hvor restic gemmer 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
Backupscriptet
Læg dette i /usr/local/sbin/backup.sh, og gør det eksekverbart 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
Angiv kun de apps, du faktisk har, ved stop og start. Hvorfor de skal stoppes et øjeblik, kan du læse i Sådan tager du databaser og Docker-volumes korrekt med i backuppen. Der står også, hvad der ligger i voor-backup.sh. Apps starter altid igen, også hvis backuppen mislykkes. Med forget og --prune beholder du 7 daglige, 4 ugentlige og 6 månedlige backups. Resten bliver ryddet op.
Automatisk hver nat
Opret /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
Kontrollér og gendan
root@web1:~# restic snapshots
root@web1:~# restic check
root@web1:~# restic restore latest --target /tmp/terug --include /srv/diensten/vw-data
Gendan til en separat mappe som /tmp/terug, og kopiér derefter det, du har brug for. Øv det en gang i kvartalet: En backup, du aldrig har gendannet, er et håb, ikke en backup.
Tip: Få besked, hvis backuppen ikke kører. Opret en Push-monitor i Uptime Kuma (se Uptime Kuma: overvåg dine sites og din server), og tilføj disse to linjer nederst i backup.sh. Udebliver signalet, får du en besked.
sleep 30
curl -fsS -m 10 "https://status.example.com/api/push/JOUWCODE?status=up&msg=OK" >/dev/null