Kapitel 8 · 8.1
Säkerhetskopior med restic till en annan plats
WebOkés dagliga säkerhetskopia (se Återställ backuper från WebOké) återställer alltid hela din VPS och finns hos samma leverantör. Med restic gör du dessutom en egen säkerhetskopia: krypterad, på en annan plats, och du kan återställa enskilda filer från den.
Vad behöver du?
- En plats utanför din VPS som du når via SFTP, till exempel en lagringstjänst eller en andra server. I exemplen är det
backup.example.netmed användarenbackup. - Ett starkt lösenord för säkerhetskopian. Om du tappar bort det går säkerhetskopian inte att använda. Spara det även utanför servern, i din lösenordshanterare.
Installera och förbered
Säkerhetskopieringen körs som root, så att den kan läsa allt.
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
Ange i /root/.ssh/config att root ska använda den här nyckeln för säkerhetskopieringsservern:
Host backup.example.net
User backup
IdentityFile /root/.ssh/id_backup
Skapa sedan repositoryt (platsen där restic sparar allt):
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 för säkerhetskopiering
Lägg det här i /usr/local/sbin/backup.sh och gör det kö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
Ange vid stop och start bara de appar som du faktiskt har; varför de behöver stoppas en stund står i Säkerhetskopiera databaser och Docker-volymer på rätt sätt. Där kan du också läsa vad som finns i voor-backup.sh. Apparna startar alltid igen, även om säkerhetskopieringen misslyckas. Med forget och --prune behåller du 7 dagliga, 4 veckovisa och 6 månatliga säkerhetskopior; resten rensas bort.
Automatiskt varje natt
Skapa /etc/systemd/system/backup.service:
[Unit]
Description=restic back-up
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/backup.sh
och /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
Kontrollera och återställ
root@web1:~# restic snapshots
root@web1:~# restic check
root@web1:~# restic restore latest --target /tmp/terug --include /srv/diensten/vw-data
Återställ till en separat mapp som /tmp/terug och kopiera sedan det du behöver. Öva på det en gång per kvartal: en säkerhetskopia som du aldrig har återställt är ett hopp, inte en säkerhetskopia.
Tips: Se till att du får en varning om säkerhetskopieringen inte körs. Skapa en Push-monitor i Uptime Kuma (se Uptime Kuma: övervaka dina webbplatser och din server) och lägg till de här två raderna längst ned i backup.sh. Om signalen uteblir får du ett meddelande.
sleep 30
curl -fsS -m 10 "https://status.example.com/api/push/JOUWCODE?status=up&msg=OK" >/dev/null