Nodaļa 8 · 8.1
Rezerves kopijas ar restic uz citu vietu
WebOké ikdienas rezerves kopija (skatiet WebOké rezerves kopiju atjaunošana) vienmēr atjauno visu Jūsu VPS un tiek glabāta pie tā paša pakalpojumu sniedzēja. Ar restic Jūs papildus varat izveidot savu rezerves kopiju: šifrētu, citā vietā, un no tās varat atjaunot atsevišķus failus.
Kas Jums nepieciešams?
- Vieta ārpus Jūsu VPS, kurai varat piekļūt ar SFTP, piemēram, krātuves pakalpojums vai otrs serveris. Piemēros tā ir
backup.example.netar lietotājubackup. - Stipra parole rezerves kopijai. Ja to pazaudēsiet, Jūsu rezerves kopija būs nelietojama. Glabājiet to arī ārpus servera, savā paroļu pārvaldniekā.
Instalēšana un sagatavošana
Rezerves kopēšana darbojas kā root, lai tā varētu nolasīt visu.
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
Norādiet failā /root/.ssh/config, ka root izmanto šo atslēgu rezerves kopiju serverim:
Host backup.example.net
User backup
IdentityFile /root/.ssh/id_backup
Pēc tam izveidojiet repozitoriju (vietu, kur restic glabā visu):
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
Rezerves kopēšanas skripts
Ievietojiet šo failā /usr/local/sbin/backup.sh un padariet to izpildāmu ar 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
Pie stop un start norādiet tikai tās lietotnes, kas Jums patiešām ir; kāpēc tās uz brīdi jāaptur, skaidrots rakstā Pareizi iekļaut datubāzes un Docker sējumus dublējumā. Tur varat arī izlasīt, kas atrodas voor-backup.sh. Lietotnes vienmēr tiek palaistas no jauna, arī tad, ja rezerves kopēšana neizdodas. Ar forget un --prune Jūs saglabājat 7 ikdienas, 4 iknedēļas un 6 ikmēneša rezerves kopijas; pārējās tiek dzēstas.
Automātiski katru nakti
Izveidojiet /etc/systemd/system/backup.service:
[Unit]
Description=restic back-up
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/backup.sh
un /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
Pārbaude un atjaunošana
root@web1:~# restic snapshots
root@web1:~# restic check
root@web1:~# restic restore latest --target /tmp/terug --include /srv/diensten/vw-data
Atjaunojiet datus atsevišķā mapē, piemēram, /tmp/terug, un pēc tam nokopējiet to, kas Jums nepieciešams. Izmēģiniet to reizi ceturksnī: rezerves kopija, kas nekad nav atjaunota, ir tikai cerība, nevis rezerves kopija.
Padoms: Saņemiet brīdinājumu, ja rezerves kopēšana nav notikusi. Izveidojiet Uptime Kuma Push monitoru (skatiet Uptime Kuma: Jūsu vietņu un servera uzraudzība) un faila backup.sh beigās pievienojiet šīs divas rindas. Ja signāls nepienāk, Jūs saņemsiet paziņojumu.
sleep 30
curl -fsS -m 10 "https://status.example.com/api/push/JOUWCODE?status=up&msg=OK" >/dev/null