Sari la conținut
servervps.roPanou client

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
  1. 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
  2. 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 init

    AtențieSalvează parola în managerul tău de parole ACUM. E singurul lucru din tot procesul care nu se poate reconstrui.

  3. 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%
  4. 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
  5. 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.