Bekap (eng. backup) je kopija svih važnih podataka sa tvog sajta ili servera. U slučaju da nešto pođe po zlu (hakovanje, greška, kvar hardvera), bekap ti omogućava da povratiš sve za nekoliko minuta.
U ovom članku ćemo proći kroz sve: od toga šta sve treba bekupovati, preko cron job-ova, bash skripti, Python botova, pa sve do cloud backup rešenja.
1. Šta bi sve trebalo bekupovati?
Kada pričamo o bekapu sajta, moraš da obuhvatiš sve što čini tvoj sajt:
- 🗄️ Baza podataka - MySQL, PostgreSQL, MongoDB... svi podaci, korisnici, postovi, komentari
- 📁 Fajlovi - ceo public_html ili root direktorijum (WordPress, Laravel, static HTML...)
- ⚙️ Konfiguracije - .env, wp-config.php, nginx/apache konfiguracije
- 🖼️ Mediji - slike, video, PDF, svi upload-ovani fajlovi
- 🔐 SSL sertifikati - da ne moraš ponovo da ih generišeš
2. Cron job - automatizacija bekapa
Cron je Unix/Linux alat koji omogućava zakazivanje zadataka. Koristi se za automatsko pokretanje bekap skripti u određeno vreme.
Osnovna sintaksa cron-a:
# minut sat dan mesec dan_u_nedelji komanda 0 2 * * * /usr/bin/backup-script.sh
Ovo pokreće backup svakog dana u 02:00.
Primeri cron schedule-a:
0 2 * * *- svaki dan u 2h0 3 * * 0- svake nedelje u 3h0 4 1 * *- prvog u mesecu u 4h*/15 * * * *- svakih 15 minuta
Da bi dodao 'cron job', ukucaj u terminalu:
crontab -e
/usr/bin/php umesto samo php.
3. Bash skripta za bekap
Bash skripta je najjednostavniji i najčešći način za bekap na Linux serverima. Evo jedne kompletne skripte koja radi sve:
#!/bin/bash
# Konfiguracija
BACKUP_DIR="/backup"
DB_NAME="ime_baze"
DB_USER="korisnik"
DB_PASS="lozinka"
SITE_DIR="/var/www/html"
DATE=$(date +%Y-%m-%d_%H-%M)
# Kreiraj folder za backup
mkdir -p $BACKUP_DIR/$DATE
# Backup baze
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/$DATE/database.sql
# Backup fajlova (tar.gz)
tar -czf $BACKUP_DIR/$DATE/files.tar.gz $SITE_DIR
# Izbriši backup starije od 30 dana
find $BACKUP_DIR -type d -mtime +30 -exec rm -rf {} \;
# Log
echo "$DATE - Backup završen" >> $BACKUP_DIR/backup.log
Kako da koristite:
- Sačuvaj skriptu kao
/usr/local/bin/backup.sh - Daj joj dozvolu za izvršavanje:
chmod +x /usr/local/bin/backup.sh - Dodaj u cron:
0 2 * * * /usr/local/bin/backup.sh
4. Python backup bot
Ako želiš napredniji i fleksibilniji sistem, Python bot je odličan izbor. Može da:
- Šalje imejl notifikacije o statusu bekapa
- Aplouduje bekap na 'cloud' (Google Drive, AWS, Dropbox)
- Prati da li je bekap uspešno završen
- Radi na Windows, Linux i macOS
Primer Python backup bota:
#!/usr/bin/env python3
import os
import subprocess
import datetime
import shutil
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
# Konfiguracija
DB_NAME = "ime_baze"
DB_USER = "korisnik"
DB_PASS = "lozinka"
SITE_DIR = "/var/www/html"
BACKUP_DIR = "/backup"
EMAIL_TO = "tvoj@email.com"
def create_backup():
date = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M")
backup_path = f"{BACKUP_DIR}/{date}"
os.makedirs(backup_path, exist_ok=True)
# Backup baze
db_dump = f"{backup_path}/database.sql"
subprocess.run([
"mysqldump",
"-u", DB_USER,
f"-p{DB_PASS}",
DB_NAME,
"--result-file=" + db_dump
])
# Backup fajlova
shutil.make_archive(
f"{backup_path}/files",
'gztar',
SITE_DIR
)
# Briši stare backup-ove
for item in os.listdir(BACKUP_DIR):
item_path = os.path.join(BACKUP_DIR, item)
if os.path.isdir(item_path):
# Proveri starost
pass # Dodaj logiku za brisanje
return backup_path
def send_notification(backup_path, success=True):
# Šalji email obaveštenje
pass
if __name__ == "__main__":
try:
backup_path = create_backup()
send_notification(backup_path, True)
print(f"Backup uspešan: {backup_path}")
except Exception as e:
send_notification(str(e), False)
print(f"Greška: {e}")
5. Cloud backup - čuvaj podatke van servera
Lokalni backup nije dovoljan! Ako ti server izgori ili bude hakovan, lokalni backup je takođe izgubljen. Zato koristi cloud backup.
Najbolji cloud servisi za backup:
- ☁️ AWS S3 - najpouzdaniji, ali zahteva konfiguraciju
- ☁️ Google Cloud Storage - jednostavan i brz
- ☁️ Backblaze B2 - najjeftiniji (0.006$ po GB)
- ☁️ Dropbox / Google Drive - jednostavni, ali imaju limit
- ☁️ rsync.net - specijalizovani za backup
Slanje backup-a na AWS S3 (pomoću CLI):
aws s3 sync /backup s3://moj-bucket/backup/ --delete
Dodaj ovo na kraj bash skripte i tvoj backup će automatski ići u cloud.
6. Backup na laptopu - kada se računar uključi
Ako želiš da backup-uješ svoj lokalni projekat na laptopu, evo kako:
macOS / Linux (launchd / systemd):
#!/bin/bash # backup-laptop.sh SOURCE="/home/korisnik/projekat" DEST="/backup/projekat" DATE=$(date +%Y-%m-%d) rsync -av --delete $SOURCE $DEST/$DATE
Dodaj ovo u cron da se pokreće svaki put kada se laptop uključi:
@reboot /home/korisnik/backup-laptop.sh
Windows (Task Scheduler):
- Otvori Task Scheduler
- Kreiraj novi task
- Trigger: "At system startup"
- Action: pokreni Python skriptu ili batch fajl
7. Napredne tehnike i najbolje prakse
Inkrementalni backup
Umesto da svaki put kopiraš sve, kopiraj samo izmene. Alati poput rsync i duplicity ovo rade automatski.
rsync -av --delete --link-dest=/backup/prosli $SOURCE $DEST
Enkripcija backup-a
Backup u cloudu mora biti enkriptovan:
tar -czf - $SITE_DIR | openssl enc -aes-256-cbc -salt -pass pass:lozinka > backup.tar.gz.enc
Testiranje backup-a
- Jednom mesečno obnovi bekap na test serveru
- Proveri da li se baza podataka ispravno učitava
- Proveri da li su sve slike i fajlovi tu
Automatizacija preko GitHub Actions / GitLab CI
Ako koristiš Git, možeš bekapovati svaki put kada push-uješ kod:
name: Bekap
on: [push]
jobs:
backup:
runs-on: ubuntu-latest
steps:
- name: Bekap baze
run: |
mysqldump -u ${{ secrets.DB_USER }} ...
8. Poređenje metoda bekapa
| Metoda | Prednosti | Mane |
|---|---|---|
| Bash skripta + cron | Jednostavna, radi na svakom Linux-u | Nema notifikacije, osnovna |
| Python bot | Fleksibilan, notifikacije, cloud integracija | Zahteva Python i više konfiguracije |
| Cloud backup (AWS/Google) | Sigurno, skalabilno, off-site | Košta, zahteva podešavanje |
| Managed rešenje (UpdraftPlus, JetBackup) | Gotovo rešenje, ne treba kodiranje | Plaća se, manje kontrole |
Zaključak
Backup nije opcija - obaveza je. Bez njega, jedan hak, kvar ili ljudska greška može da uništi sate, dane ili godine rada.
Zlatna pravila:
- 📌 3-2-1 pravilo - 3 kopije, 2 različita medija, 1 van lokacije
- 🤖 Automatizuj - ljudi zaboravljaju, cron ne zaboravlja
- 🧪 Testiraj - redovno proveravaj da li backup radi
- 🔐 Enkriptuj - posebno ako ide u cloud
- 📊 Prati - gledaj logove, proveravaj da li je bekap uspešan
Najbolje rešenje? Kombinuj bash skriptu koja radi lokalni backup, Python bot za notifikacije i rsync ili AWS CLI za cloud. I ne zaboravi - kada ti zatreba, već je kasno da ga napraviš.