Κεφάλαιο 8 · 8.1
Αντίγραφα ασφαλείας με restic σε άλλη τοποθεσία
Δείτε το σε ένα σύντομο βίντεο
Το καθημερινό backup της WebOké (δείτε Επαναφορά αντιγράφων ασφαλείας της WebOké) επαναφέρει πάντα ολόκληρο το VPS σας και βρίσκεται στον ίδιο πάροχο. Με το restic μπορείτε επιπλέον να δημιουργήσετε το δικό σας αντίγραφο ασφαλείας: κρυπτογραφημένο, σε άλλη τοποθεσία, και να επαναφέρετε από αυτό μεμονωμένα αρχεία.
Τι χρειάζεστε;
- Μια τοποθεσία εκτός του VPS σας στην οποία έχετε πρόσβαση μέσω SFTP, για παράδειγμα μια υπηρεσία αποθήκευσης ή έναν δεύτερο server. Στα παραδείγματα αυτή είναι η
backup.example.netμε τον χρήστηbackup. - Ένας ισχυρός κωδικός πρόσβασης για το αντίγραφο ασφαλείας. Αν τον χάσετε, το αντίγραφο ασφαλείας σας είναι άχρηστο. Φυλάξτε τον και εκτός του server, στον διαχειριστή κωδικών πρόσβασης που χρησιμοποιείτε.
Εγκατάσταση και προετοιμασία
Το αντίγραφο ασφαλείας εκτελείται ως root, ώστε να μπορεί να διαβάσει τα πάντα.
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
Ορίστε στο /root/.ssh/config ότι ο root χρησιμοποιεί αυτό το κλειδί για τον server αντιγράφων ασφαλείας:
Host backup.example.net
User backup
IdentityFile /root/.ssh/id_backup
Στη συνέχεια δημιουργήστε το repository (την τοποθεσία όπου το restic αποθηκεύει τα πάντα):
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
Το script αντιγράφων ασφαλείας
Τοποθετήστε τα παρακάτω στο /usr/local/sbin/backup.sh και κάντε το εκτελέσιμο με 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
Στα stop και start αναφέρετε μόνο τις εφαρμογές που πράγματι έχετε. Το γιατί πρέπει να σταματήσουν για λίγο εξηγείται στο Σωστή συμπερίληψη βάσεων δεδομένων και Docker volumes στα αντίγραφα ασφαλείας. Εκεί θα διαβάσετε επίσης τι περιέχει το voor-backup.sh. Οι εφαρμογές ξεκινούν πάντα ξανά, ακόμη και αν το αντίγραφο ασφαλείας αποτύχει. Με τα forget και --prune διατηρείτε 7 ημερήσια, 4 εβδομαδιαία και 6 μηνιαία αντίγραφα ασφαλείας. Τα υπόλοιπα διαγράφονται.
Αυτόματα κάθε νύχτα
Δημιουργήστε το /etc/systemd/system/backup.service:
[Unit]
Description=restic back-up
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/backup.sh
και το /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
Έλεγχος και επαναφορά
root@web1:~# restic snapshots
root@web1:~# restic check
root@web1:~# restic restore latest --target /tmp/terug --include /srv/diensten/vw-data
Κάντε την επαναφορά σε ξεχωριστό φάκελο, όπως το /tmp/terug, και στη συνέχεια αντιγράψτε ό,τι χρειάζεστε. Εξασκηθείτε σε αυτό μία φορά ανά τρίμηνο: ένα αντίγραφο ασφαλείας που δεν έχετε επαναφέρει ποτέ είναι μια ελπίδα, όχι ένα αντίγραφο ασφαλείας.
Συμβουλή: Φροντίστε να ειδοποιείστε όταν το αντίγραφο ασφαλείας δεν εκτελείται. Δημιουργήστε στο Uptime Kuma ένα Push monitor (δείτε Uptime Kuma: παρακολούθηση των ιστότοπων και του server σας) και προσθέστε στο τέλος του backup.sh αυτές τις δύο γραμμές. Αν το σήμα δεν φτάσει, θα λάβετε ειδοποίηση.
sleep 30
curl -fsS -m 10 "https://status.example.com/api/push/JOUWCODE?status=up&msg=OK" >/dev/null