8. fejezet · 8.1
Biztonsági mentés a restic segítségével egy másik helyre
A WebOké napi biztonsági mentése (lásd A WebOké biztonsági mentéseinek visszaállítása) mindig a teljes VPS-t állítja vissza, és ugyanannál a szolgáltatónál található. A restic segítségével emellett saját biztonsági mentést is készíthet: titkosítva, egy másik helyen, és abból egyes fájlokat is visszaállíthat.
Mire van szüksége?
- Egy VPS-en kívüli helyre, amelyet SFTP-n keresztül elér, például egy tárhelyszolgáltatásra vagy egy második szerverre. A példákban ez a
backup.example.net, abackupfelhasználóval. - Egy erős jelszóra a biztonsági mentéshez. Ha ezt elveszíti, a biztonsági mentése használhatatlanná válik. Tárolja a szerveren kívül is, a jelszókezelőjében.
Telepítés és előkészítés
A biztonsági mentés root felhasználóként fut, hogy mindent el tudjon olvasni.
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
Állítsa be a /root/.ssh/config fájlban, hogy a root ezt a kulcsot használja a mentési szerverhez:
Host backup.example.net
User backup
IdentityFile /root/.ssh/id_backup
Ezután hozza létre a repositoryt (azt a helyet, ahol a restic mindent tárol):
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
A mentési szkript
Helyezze ezt a /usr/local/sbin/backup.sh fájlba, és tegye futtathatóvá a chmod 700 /usr/local/sbin/backup.sh paranccsal:
#!/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
A stop és a start sorban csak azokat az alkalmazásokat adja meg, amelyek valóban megvannak Önnél. Azt, hogy miért kell őket rövid időre leállítani, a(z) Adatbázisok és Docker-kötetek helyes mentése cikk ismerteti. Ugyanott olvashatja azt is, mi található a voor-backup.sh fájlban. Az alkalmazások mindig újraindulnak, akkor is, ha a biztonsági mentés sikertelen. A forget és a --prune beállítással 7 napi, 4 heti és 6 havi biztonsági mentést őriz meg; a többit a rendszer törli.
Automatikusan minden éjjel
Hozza létre a /etc/systemd/system/backup.service fájlt:
[Unit]
Description=restic back-up
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/backup.sh
és a /etc/systemd/system/backup.timer fájlt:
[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
Ellenőrzés és visszaállítás
root@web1:~# restic snapshots
root@web1:~# restic check
root@web1:~# restic restore latest --target /tmp/terug --include /srv/diensten/vw-data
A visszaállítást egy külön mappába végezze, például a /tmp/terug mappába, majd onnan másolja át, amire szüksége van. Gyakorolja ezt negyedévente egyszer: az a biztonsági mentés, amelyet még soha nem állított vissza, csak remény, nem biztonsági mentés.
Tipp: Kérjen figyelmeztetést, ha a biztonsági mentés nem fut le. Hozzon létre egy Push-monitort az Uptime Kumában (lásd Uptime Kuma: a webhelyek és a szerver felügyelete), és helyezze el ezt a két sort a backup.sh fájl végén. Ha a jelzés elmarad, értesítést kap.
sleep 30
curl -fsS -m 10 "https://status.example.com/api/push/JOUWCODE?status=up&msg=OK" >/dev/null