Poglavlje 8 · 8.1
Sigurnosne kopije s alatom restic na drugo mjesto
Dnevna sigurnosna kopija tvrtke WebOké (pogledajte Vraćanje sigurnosnih kopija tvrtke WebOké) uvijek vraća cijeli Vaš VPS i nalazi se kod istog pružatelja usluge. Uz nju s alatom restic izrađujete vlastitu sigurnosnu kopiju: šifriranu, na drugom mjestu, iz koje možete vratiti i pojedinačne datoteke.
Što Vam je potrebno?
- Mjesto izvan Vašeg VPS-a kojem možete pristupiti putem SFTP-a, na primjer usluga za pohranu ili drugi poslužitelj. U primjerima je to
backup.example.nets korisnikombackup. - Jaka lozinka za sigurnosnu kopiju. Ako je izgubite, Vaša sigurnosna kopija postaje neupotrebljiva. Spremite je i izvan poslužitelja, u svoj upravitelj lozinki.
Instalacija i priprema
Sigurnosna kopija pokreće se kao root kako bi mogla čitati sve.
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
U /root/.ssh/config navedite da root koristi ovaj ključ za poslužitelj za sigurnosne kopije:
Host backup.example.net
User backup
IdentityFile /root/.ssh/id_backup
Zatim izradite repozitorij (mjesto na kojem restic sprema sve):
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
Skripta za sigurnosnu kopiju
Spremite ovo u /usr/local/sbin/backup.sh i učinite datoteku izvršnom pomoću 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
Kod stop i start navedite samo aplikacije koje stvarno imate; zašto ih treba nakratko zaustaviti, objašnjeno je u Ispravna izrada sigurnosnih kopija baza podataka i Docker volumena. Ondje možete pročitati i što se nalazi u voor-backup.sh. Aplikacije se uvijek ponovno pokreću, čak i ako izrada sigurnosne kopije ne uspije. S forget i --prune čuvate 7 dnevnih, 4 tjedne i 6 mjesečnih sigurnosnih kopija; ostale se brišu.
Automatski svake noći
Izradite /etc/systemd/system/backup.service:
[Unit]
Description=restic back-up
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/backup.sh
i /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
Provjera i vraćanje
root@web1:~# restic snapshots
root@web1:~# restic check
root@web1:~# restic restore latest --target /tmp/terug --include /srv/diensten/vw-data
Vratite podatke u zasebnu mapu kao što je /tmp/terug, a zatim kopirajte ono što Vam je potrebno. Vježbajte to jednom u tromjesečju: sigurnosna kopija koju nikada niste vratili samo je nada, a ne sigurnosna kopija.
Savjet: Neka Vas sustav upozori ako se sigurnosna kopija ne izvrši. U Uptime Kumi izradite Push-monitor (pogledajte Uptime Kuma: nadzor Vaših stranica i poslužitelja) i na kraj datoteke backup.sh dodajte ova dva retka. Ako signal izostane, primit ćete obavijest.
sleep 30
curl -fsS -m 10 "https://status.example.com/api/push/JOUWCODE?status=up&msg=OK" >/dev/null