Глава 8 · 8.1
Архивиране с restic на друго място
Ежедневното архивно копие на WebOké (вижте Възстановяване на резервни копия от WebOké) винаги възстановява целия Ви VPS и се съхранява при същия доставчик. С restic можете да направите и собствено архивно копие: криптирано, на друго място, от което възстановявате отделни файлове.
Какво Ви е необходимо?
- Място извън Вашия VPS, до което имате достъп чрез SFTP, например услуга за съхранение или втори сървър. В примерите това е
backup.example.netс потребителяbackup. - Силна парола за архивното копие. Ако я загубите, архивното Ви копие става неизползваемо. Съхранявайте я и извън сървъра, във Вашия мениджър на пароли.
Инсталиране и подготовка
Архивирането се изпълнява като 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 използва този ключ за архивния сървър:
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
Скриптът за архивиране
Поставете това в /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 (вижте Uptime Kuma: наблюдение на Вашите сайтове и сървър) и добавете най-долу в backup.sh тези два реда. Ако сигналът не пристигне, ще получите известие.
sleep 30
curl -fsS -m 10 "https://status.example.com/api/push/JOUWCODE?status=up&msg=OK" >/dev/null