Š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.yamli.envfajlovi, pravila firewall-a. - Sertifikati i ključevi —
/etc/letsencrypt, ključevi aplikacija, DKIM ključevi mejl servera. - Zakazani poslovi —
crontab -l > /root/crontab.txtpre 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.