Każdy ma kopie zapasowe, dopóki nie spróbuje którejś przywrócić. Folder okazuje się pusty, cron padł w marcu albo archiwum leży na tym samym dysku, który właśnie się zepsuł. restic naprawia większość z tego: szyfruje po twojej stronie, każdy kawałek danych zapisuje raz, a przywrócenie jednego pliku jest tak proste jak kopia całego serwera.
Oto konfiguracja, której naprawdę byśmy zaufali, na Ubuntu lub Debianie.
1. Zainstaluj restic
apt update && apt install -y restic
restic self-update
Pakiety z dystrybucji są w tyle; self-update pobiera aktualne wydanie.
2. Wybierz miejsce na repozytorium
Repozytorium nie może leżeć na serwerze, który chronisz. Dwa typowe wybory:
- Inny serwer przez SFTP:
sftp:backup@203.0.113.20:/srv/restic/web1 - Storage obiektowy zgodny z S3:
s3:https://s3.example.com/my-bucket/web1
3. Zapisz dane dostępowe
Trzymaj wszystko w jednym pliku dostępnym tylko dla roota, żeby timer i twoja powłoka używały tych samych ustawień:
cat > /root/.restic-env <<'EOF'
export RESTIC_REPOSITORY="s3:https://s3.example.com/my-bucket/web1"
export RESTIC_PASSWORD_FILE="/root/.restic-pass"
export AWS_ACCESS_KEY_ID="your-key-id"
export AWS_SECRET_ACCESS_KEY="your-secret"
EOF
openssl rand -base64 32 > /root/.restic-pass
chmod 600 /root/.restic-env /root/.restic-pass
Teraz skopiuj zawartość /root/.restic-pass do menedżera haseł. Bez niej kopii nie da się odszyfrować — ani tobie, ani nikomu innemu.
4. Zainicjuj repozytorium i zrób pierwszą kopię
source /root/.restic-env
restic init
restic backup /etc /home /root /srv /var/www \
--exclude-caches --exclude '/root/.cache'
restic snapshots
Dopasuj ścieżki do miejsc, gdzie naprawdę są twoje dane. Wolumeny Dockera leżą w /var/lib/docker/volumes; dane aplikacji często w /srv lub /opt.
5. Bazy danych: najpierw zrzut, potem kopia
Nie kopiuj surowych plików działającej bazy. Zrób zrzut tuż przed kopią:
mkdir -p /var/backups/db
sudo -u postgres pg_dump -Fc mydb > /var/backups/db/mydb.dump
Dodaj /var/backups/db do ścieżek kopii. Więcej o zrzutach jest w naszym poradniku PostgreSQL.
6. Zaplanuj to w systemd
Timer jest tu lepszy od crona: loguje do journala i nadrabia uruchomienie, jeśli serwer był wtedy wyłączony.
# /etc/systemd/system/restic-backup.service
[Unit]
Description=restic backup
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'source /root/.restic-env && restic backup /etc /home /root /srv /var/www /var/backups/db --exclude-caches && restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune'
# /etc/systemd/system/restic-backup.timer
[Unit]
Description=Daily restic backup
[Timer]
OnCalendar=*-*-* 03:30:00
Persistent=true
[Install]
WantedBy=timers.target
systemctl daemon-reload
systemctl enable --now restic-backup.timer
systemctl list-timers restic-backup.timer
forget --prune zostawia 7 dziennych, 4 tygodniowe i 6 miesięcznych snapshotów, a resztę kasuje. Jeśli masz krok zrzutu bazy, wstaw go w linię ExecStartPre=.
7. Naprawdę coś przywróć
To krok, który zamienia "mamy kopie" w fakt. Wyciągnij jeden katalog do folderu tymczasowego i obejrzyj go:
source /root/.restic-env
restic restore latest --target /tmp/restore-test --include /etc/nginx
ls -la /tmp/restore-test/etc/nginx
restic check
Zrób to raz teraz i potem co kilka miesięcy. restic check weryfikuje strukturę repozytorium; przywrócenie dowodzi, że dane naprawdę tam są.
restic a Managed Backups
Nie konkurują ze sobą. Managed Backups codziennie tworzą punkt przywracania całego serwera, który przywracasz z panelu — szybki ratunek po nieudanej aktualizacji. Kosztują $2 miesięcznie i są gratis w każdym planie rocznym. restic daje kopie na poziomie plików, poza serwerem, w storage, który kontrolujesz — to ważne, gdy problemem jest plik skasowany w zeszły wtorek albo gdy chcesz mieć kopię całkowicie poza naszą infrastrukturą.
Jeśli przechowujesz wrażliwe dane, połącz to z pełnym szyfrowaniem dysku albo zobacz zastosowanie szyfrowanego magazynu, żeby postawić własne miejsce docelowe kopii. Plan Micro wystarczy dla większości małych serwerów razem z ich kopiami.
Komentarze
Brak komentarzy. Bądź pierwszy.