Skip to content
VDS · Bekapi i disk

Šta tačno treba kopirati

Lista onoga što zaista treba bekapovati na VPS-u, šta je besmisleno kopirati i kako da izvezeš baze podataka da kopija zaista radi.

Ažurirano 23. avgust 2026.

Mi ne pravimo automatske rezervne kopije tvoje mašine: u panelu nema ni snimaka stanja, a ponovna instalacija OS-a briše disk u potpunosti. To znači da su rezervne kopije u potpunosti tvoja odgovornost i moraš da počneš prvog dana, a ne posle gubitka.

Šta moraš da sačuvaš

  • Podaci aplikacija — Docker volumeni, direktorijumi sajta, fajlovi koje su korisnici otpremili.
  • Dampovi baza podataka — baš dampovi, ne fajlovi baze koji su u radu (više o tome u nastavku).
  • Konfiguracija — /etc/nginx, /etc/caddy, systemd unit fajlovi, compose.yaml i .env fajlovi, pravila firewall-a.
  • Sertifikati i ključevi — /etc/letsencrypt, ključevi aplikacija, DKIM ključevi mejl servera.
  • Zakazani poslovi — crontab -l > /root/crontab.txt pre pravljenja rezervne kopije, inače ćeš vratiti sve osim rasporeda.
  • Spisak instaliranih paketa — dpkg --get-selections > /root/packages.txt. Zauzima kilobajte, štedi sate.

Šta ne moraš da čuvaš

OS, paketi i Docker slike se vraćaju ponovnom instalacijom i pokretanjem komandi — nisu vredni prostora i vremena. Ne pravi rezervnu kopiju /proc, /sys, /dev, /var/lib/docker u celosti, keš direktorijuma ni swap fajlova.

Razumna smernica: rezervna kopija treba da sadrži sve što nije na internetu i što ne možeš da ponovo napraviš po uputstvu.

Baze podataka

Ne možeš da kopiraš fajlove baze koja je u radu: dobićeš snimak nastao usred upisa koji možda neće moći da se otvori. Ispravan način je damp pomoću alata same baze.

docker compose exec -T db pg_dump -U postgres app | gzip > /backup/app-$(date +%F).sql.gz
docker compose exec -T db mysqldump -u root -p"$MYSQL_ROOT_PASSWORD" --single-transaction app | gzip > /backup/app-$(date +%F).sql.gz
sqlite3 /data/app.db ".backup '/backup/app-$(date +%F).db'"

Za PostgreSQL i MySQL ne moraš da zaustaviš servis. Za SQLite koristi .backup, ne cp: kopiranje fajla dok je u radu daje oštećenu bazu.

Rezervna kopija iz koje nikad nisi vraćao podatke ne računa se kao rezervna kopija. Testiraj je na praznoj mašini ili u odvojenom kontejneru — vidi proba vraćanja.

Primer kompletnog seta

#!/bin/bash
set -euo pipefail
DEST=/backup/$(date +%F)
mkdir -p "$DEST"

docker compose -f /opt/myapp/compose.yaml exec -T db pg_dump -U postgres app | gzip > "$DEST/db.sql.gz"
tar czf "$DEST/etc.tar.gz" /etc/nginx /etc/letsencrypt /opt/myapp/compose.yaml /opt/myapp/.env
tar czf "$DEST/uploads.tar.gz" /var/www/uploads
crontab -l > "$DEST/crontab.txt"
dpkg --get-selections > "$DEST/packages.txt"

Stavi skriptu u /usr/local/bin/backup.sh, daj joj chmod 700 dozvole i dodaj je u raspored. Zatim treba da pošalješ rezervnu kopiju na drugu lokaciju — fajl pored tvojih podataka ne štiti te ni od čega.

Koliko dugo da čuvaš

Pravilo „3-2-1” u pojednostavljenom obliku: najmanje dve kopije, najmanje jedna van ove mašine. Za čuvanje je dovoljno sedam dnevnih, četiri nedeljne i tri mesečne — to je dovoljno da se vratiš na stanje pre tihog kvara koji nisi odmah primetio.

Isplaniraj prostor unapred: VDS-1 ima disk od 40 GB i na njemu jednostavno nema mesta za istoriju rezervnih kopija — vidi prostor na disku.

Česte greške

  • Rezervna kopija je na istoj mašini. Ponovna instalacija, gubitak pristupa, greška sa rm -rf — i rezervna kopija nestaje zajedno sa podacima.
  • Zaboravio si .env. Imaš podatke, ali su lozinke i ključevi za njih izgubljeni.
  • Kopiranje volumena baze dok je u radu. Vraćanje pada na oštećenom fajlu. Samo dampovi.
  • Niko ne zna da je pravljenje rezervnih kopija prestalo. Podesi push proveru u Uptime Kuma: skripta pinguje adresu nakon uspeha, a dan tišine pokreće alarm.