Rozdział 8 · 8.1
Back-ups met restic naar een andere plek
Ten artykuł nie został jeszcze przetłumaczony. Czytają Państwo wersję niderlandzką.
De dagelijkse backup van WebOké (zie Przywracanie kopii zapasowych WebOké) zet altijd je hele VPS terug en staat bij dezelfde aanbieder. Met restic maak je daarnaast je eigen back-up: versleuteld, op een andere plek, en je haalt er losse bestanden uit terug.
Wat heb je nodig?
- Een plek buiten je VPS waar je via SFTP bij kunt, bijvoorbeeld een opslagdienst of een tweede server. In de voorbeelden is dat
backup.example.netmet de gebruikerbackup. - Een sterk wachtwoord voor de back-up. Ben je dat kwijt, dan is je back-up onbruikbaar. Bewaar het ook buiten de server, in je wachtwoordmanager.
Installeren en klaarzetten
De back-up draait als root, zodat hij alles kan lezen.
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
Zet in /root/.ssh/config dat root deze sleutel gebruikt voor de back-upserver:
Host backup.example.net
User backup
IdentityFile /root/.ssh/id_backup
Maak dan de repository (de plek waar restic alles bewaart):
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
Het back-upscript
Zet dit in /usr/local/sbin/backup.sh en maak het uitvoerbaar met 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
Noem bij stop en start alleen de apps die je echt hebt; waarom ze even stil moeten, staat in Databases en Docker-volumes goed meenemen. Wat er in voor-backup.sh staat, lees je daar ook. De apps starten altijd weer, ook als de back-up mislukt. Met forget en --prune bewaar je 7 dagelijkse, 4 wekelijkse en 6 maandelijkse back-ups; de rest wordt opgeruimd.
Elke nacht automatisch
Maak /etc/systemd/system/backup.service:
[Unit]
Description=restic back-up
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/backup.sh
en /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
Controleren en terugzetten
root@web1:~# restic snapshots
root@web1:~# restic check
root@web1:~# restic restore latest --target /tmp/terug --include /srv/diensten/vw-data
Zet terug naar een aparte map zoals /tmp/terug en kopieer daarna wat je nodig hebt. Oefen dat een keer per kwartaal: een back-up die je nooit hebt teruggezet, is een hoop, geen back-up.
Tip: Laat je waarschuwen als de back-up niet draait. Maak in Uptime Kuma een Push-monitor (zie Uptime Kuma: monitorowanie stron i serwera) en zet onderaan backup.sh deze twee regels. Blijft het seintje uit, dan krijg je een melding.
sleep 30
curl -fsS -m 10 "https://status.example.com/api/push/JOUWCODE?status=up&msg=OK" >/dev/null