Bekap - Kako, gde i zašto? Kompletan vodič

VAŽNO: Ako nemaš backup, tvoj sajt ne postoji. Jedan hak, greška ili kvar na serveru i sav tvoj rad nestaje zauvek.

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.

💾 Backup - 3-2-1 pravilo 3 kopije | 2 različita medija | 1 off-site 🖥️ Original Tvoj sajt / server 📀 Lokalni backup Drugi disk / server ☁️ Cloud backup AWS / Google / Dropbox
Slika 1: 3-2-1 pravilo - osnovna strategija sigurnog backup-a

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š
💡 Savet: Nikad ne bekupuj samo bazu, a zaboraviš fajlove. Kada se sajt obnovi, faliće ti slike i aploudovani sadržaj.

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 2h
  • 0 3 * * 0 - svake nedelje u 3h
  • 0 4 1 * * - prvog u mesecu u 4h
  • */15 * * * * - svakih 15 minuta

Da bi dodao 'cron job', ukucaj u terminalu:

crontab -e
📌 Napomena: Na serveru uvek koristi apsolutne putanje u cron skriptama. Npr. /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:

  1. Sačuvaj skriptu kao /usr/local/bin/backup.sh
  2. Daj joj dozvolu za izvršavanje: chmod +x /usr/local/bin/backup.sh
  3. 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}")
🐍 Python prednosti: Možeš dodati Slack/Telegram notifikacije, enkripciju, kompresiju, i integraciju sa skoro svim cloud servisima.

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):

  1. Otvori Task Scheduler
  2. Kreiraj novi task
  3. Trigger: "At system startup"
  4. 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

VAŽNO: Redovno testiraj backup! Najgora stvar je da misliš da imaš backup, a kada ti zatreba - ne radi.
  • 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š.

🚀 Počni odmah: Već danas napravi prvi backup. Bolje jedan nego nijedan. A sutra automatizuj. Tvoj budući ja će ti biti zahvalan.
Nazad na bazu znanja