Ghid · 20 de minute · Debian · Ubuntu · AlmaLinux
Backup automat de VPS cu restic
Backup-ul nu e inclus în planurile noastre și preferăm să spunem asta răspicat. Restic rezolvă problema în câteva minute: criptează local, trimite doar diferențele și verifică integritatea arhivei.
Ai nevoie de
- O destinație externă: alt server cu SFTP, un bucket S3 sau spațiu de backup din panou
- Acces root pe serverul de salvat
- 01
Instalează restic
Există în depozitele obișnuite. Verifică versiunea după instalare, fiindcă unele distribuții rămân în urmă.
apt install restic # AlmaLinux: dnf install restic restic version - 02
Pregătește depozitul și parola
Parola depozitului criptează totul. Fără ea, arhiva e un morman de octeți fără sens, inclusiv pentru tine.
Ține fișierul cu permisiuni restrânse și salvează parola și în afara serverului.
install -d -m 700 /etc/restic openssl rand -base64 32 > /etc/restic/parola chmod 600 /etc/restic/parola cat > /etc/restic/env <<'CONF' export RESTIC_REPOSITORY="sftp:user@backup.exemplu.ro:/backup/vps1" export RESTIC_PASSWORD_FILE="/etc/restic/parola" CONF chmod 600 /etc/restic/env set -a; . /etc/restic/env; set +a restic initAtențieSalvează parola în managerul tău de parole ACUM. E singurul lucru din tot procesul care nu se poate reconstrui.
- 03
Scrie scriptul de backup
Salvează configurația din /etc, datele din /home și /srv, plus dump-urile bazelor de date. Un fișier de bază de date copiat cât timp serverul scrie în el nu e recuperabil, deci fă întâi dump.
Politica de păstrare taie arhivele vechi automat. Cea de mai jos ține șapte zilnice, patru săptămânale și șase lunare.
/usr/local/bin/backup.sh #!/usr/bin/env bash set -euo pipefail set -a; . /etc/restic/env; set +a # Dump-urile întâi: un fișier de bază de date copiat la cald nu se restaurează. install -d -m 700 /var/backups/db if command -v mysqldump >/dev/null; then mysqldump --all-databases --single-transaction | gzip > /var/backups/db/mysql.sql.gz fi restic backup /etc /home /srv /var/backups/db \ --exclude-caches \ --exclude '/home/*/.cache' restic forget --prune --keep-daily 7 --keep-weekly 4 --keep-monthly 6 restic check --read-data-subset=5% - 04
Programează rularea zilnică
Un timer systemd în locul unui cron: primești stare, jurnal și RandomizedDelaySec, care evită ca toate serverele tale să pornească backup-ul în aceeași secundă.
/etc/systemd/system/backup.service și backup.timer # backup.service [Unit] Description=Backup restic [Service] Type=oneshot ExecStart=/usr/local/bin/backup.sh # backup.timer [Unit] Description=Backup restic zilnic [Timer] OnCalendar=*-*-* 03:30:00 RandomizedDelaySec=1800 Persistent=true [Install] WantedBy=timers.target - 05
Testează restaurarea. Chiar acum.
Un backup netestat e o presupunere, nu o copie de siguranță. Restaurează câteva fișiere într-un director temporar și compară-le cu originalele.
Pune-ți în calendar să repeți testul o dată pe trimestru. Momentul în care afli că backup-ul nu merge nu trebuie să fie momentul în care ai nevoie de el.
chmod +x /usr/local/bin/backup.sh systemctl daemon-reload systemctl enable --now backup.timer systemctl start backup.service && journalctl -u backup.service -n 30 set -a; . /etc/restic/env; set +a restic snapshots restic restore latest --target /tmp/test-restaurare --include /etc/hostname diff /etc/hostname /tmp/test-restaurare/etc/hostname && echo "restaurare OK"
Întrebări frecvente
+De ce nu e backup-ul inclus în preț?
Pentru că ar însemna un preț mai mare pentru toată lumea, inclusiv pentru cine are deja o soluție proprie sau pentru cine rulează un mediu de test fără date importante. Spațiul de backup extern se poate adăuga separat din panoul client.
+Un snapshot al mașinii virtuale înlocuiește backup-ul?
Nu. Un snapshot stă pe aceeași infrastructură și acoperă un singur tip de incident. Un backup extern, criptat, te acoperă și când problema e ștergerea din greșeală, un ransomware sau o eroare de configurare pe care ai replicat-o.
+Cât spațiu ocupă?
Restic deduplică și trimite doar blocurile noi, deci creșterea după prima rulare e mult mai mică decât dimensiunea datelor. Consumul real depinde de cât de mult se schimbă fișierele între rulări.