Backup-ul este una dintre cele mai prost înțelese părți ale infrastructurii unei firme mici. Toată lumea știe ca "ar trebui" sa aibă backup, dar in practica vad acelasi tipar la audit: copia se face automat undeva, nimeni nu testează restore-ul, si in ziua in care este nevoie, fie nu există, fie este corupt, fie nu poate fi restaurat.
In termeni simpli: backup-ul nu este un fisier, este un proces. Articolul iti arata cum sa setezi acel proces minim viable pentru un IMM, fara enterprise backup software de 500 EUR/luna.
Daca nu ai inca decis hostingul, citeste cum alegi gazduire web pentru magazin online si cum alegi hosting pentru site mic. Pentru securitatea transportului datelor, vezi SSL pentru site mic - ghid.
Regula 3-2-1 explicata pentru IMM
Trei cifre, trei reguli:
- 3 copii ale datelor (1 originala + 2 backup-uri)
- 2 medii diferite (ex: disk local + object storage cloud)
- 1 copie offsite (alt centru de date sau locatie fizica diferita)
In practica pentru un magazin WooCommerce pe VPS: original pe NVMe-ul serverului + copie zilnica DB pe object storage BackBlaze + copie saptamanala completa pe NAS-ul din birou. Trei copii, doua medii (cloud + disk fizic), una offsite (NAS-ul nu este la furnizorul de hosting).
Variantele moderne: 3-2-1-1-0 si 4-3-2
Veeam si Backblaze au adaugat reguli noi dupa ce ransomware a inceput sa cripteze inclusiv backup-urile:
- 3-2-1-1-0: 3 copii, 2 medii, 1 offsite, 1 immutable (write-once-read-many), 0 erori la verificare integritate
- 4-3-2: 4 copii, 3 medii, 2 offsite (pretentii compliance ridicate, ex: PCI-DSS Level 1)
Pentru IMM tipic, 3-2-1-1-0 este sweet spot-ul. Object storage providers (BackBlaze B2, Wasabi, AWS S3) ofera Object Lock - flag care impiedica stergerea pana la o data anume (~0,005 USD/GB/luna extra). Un atacator cu API key furat nu poate face damage retrospectiv in fereastra de lock.
De ce backup-ul de la furnizor NU este de ajuns
Aproape orice furnizor de hosting decent (Hostico, THC, cyberfolks, SiteGround) face backup-uri zilnice incluse. Multi IMM se opresc aici si bifeaza "backup - done". Greseala.
Backup-ul host-level este fragil prin design, din 4 motive:
- Provider failure: furnizorul intra in faliment, este cumparat sau migreaza infrastructura si pierde date (ex: Code Spaces, decedat in 12 ore dupa AWS account compromise).
- Account compromise: cineva intra in cPanel si sterge atat site-ul cat si backup-urile (sunt in acelasi panou).
- Ransomware: malware cripteaza live data si backup-urile montate (snapshot pe acelasi disk, NFS share, samba mount). Ransomware moderne ataca backup-urile direct.
- Accidental delete propagated: stergi o tabela in WP-admin si backup-ul next-day suprascrie copia buna. Daca retention este 7 zile si descoperi problema dupa 10, ai pierdut totul.
Battle-tested: un magazin Magento pierdut complet in 2024 - atacator intrat prin plugin vulnerabil, sters DB, dupa 7 zile backup-urile host au expirat. Singura copie: export manual pe laptop-ul devului. Restore: 2 saptamani, ~40.000 EUR vanzari pierdute.
Concluzia: backup-ul host-level este Layer 1. Ai nevoie de Layer 2 (external) si Layer 3 (offsite).
Ce trebuie sa salvezi (lista completa)
Multi IMM salveaza doar "site-ul" si uita componente critice:
- Fisiere aplicatie:
wp-content/uploads/, teme custom, plugin-uri custom, cod sursa - Baza de date: MySQL/PostgreSQL/MariaDB dump complet
- Configurari:
wp-config.php,.env,nginx.conf,php.ini,.htaccess, certificate SSL - Email: mailboxurile IMAP (uitate constant)
- DNS zone export: zona completa cu MX, TXT, SPF, DKIM, DMARC, CNAME
- Logs: minim 30 zile access + error log
- Code repository: remote-ul Git nu trebuie sa fie pe acelasi server
Dependency: daca DNS-ul este pe nameservers-urile providerului si providerul moare, reconstructia zonei din memorie inseamna 24-48h downtime garantat. Pro tip dev: dig +noall +answer yourdomain.ro ANY pe toate subdomeniile critice, salvat lunar - 50 KB text care iti salveaza zile.
Frecventa si retention - tiered approach
Setup minim pentru un IMM cu magazin WooCommerce activ:
| Component | Frecventa | Retention | Storage |
|---|---|---|---|
| Baza de date | Zilnic | 30 zile zilnice + 12 saptamanale + 12 lunare | Object storage |
| Fisiere uploads | Saptamanal | 12 saptamanale + 6 lunare | Object storage |
| Full server | Lunar | 12 luni | Cold storage / HDD extern |
| Config files | La modificare (git) | Forever | Repository privat |
| Saptamanal | 6 luni | Object storage | |
| DNS zone | Lunar | 12 luni | Encrypted text file |
Schema se numeste GFS (Grandfather-Father-Son): zilnice "son" inlocuite frecvent, saptamanale "father" pastrate mai mult, lunare "grandfather" pe termen lung.
Trade-off: cu cat retention mai lung, cost mai mare. 30 zile DB zilnice = ~30x dimensiunea unei copii. Pentru o baza WooCommerce de 500 MB = ~15 GB pe BackBlaze (~0,08 EUR/luna). Pentru 5 GB = 150 GB (~0,80 EUR/luna). Infim fata de valoarea datelor.
RPO si RTO realist
RPO (Recovery Point Objective) = cat date ai pierde. RTO (Recovery Time Objective) = cat dureaza sa fii operational.
| Profil | RPO | RTO | Strategie |
|---|---|---|---|
| Blog WordPress simplu | 24h | 4h | DB daily, files weekly |
| Site firma static | 7 zile | 8h | Full weekly, restore manual |
| WooCommerce activ | 1h | 4h | DB hourly + binlog, files daily |
| WooCommerce mare | 15 min | 1h | Continuous replication, hot standby |
| SaaS B2B | 5 min | 30 min | Multi-region replica, automated failover |
Pentru majoritatea IMM, RPO 24h + RTO 4h este realist cu unelte free/cheap.
Unde stochezi - 3 layere
Layer 1: Hosting native
cPanel JetBackup, Plesk Backup Manager, snapshot-uri VPS de la furnizor. Avantaj: zero setup, vine inclus in plan. Dezavantaj: vulnerabil la toate scenariile de mai sus (provider failure, account compromise).
Foloseste Layer 1 ca safety net pentru restore rapid din eroare umana (sterg accidental o pagina, restore din panou in 2 minute). NU te baza doar pe el.
Layer 2: Object storage extern
Aici stau backup-urile "serioase" - copia care iti salveaza viata cand restul cade. Object storage S3-compatible este standardul de facto.
💡 Pro tip dev: cauta provideri "S3-compatible" - inseamna ca poti folosi orice tool care suporta AWS SDK (rclone, restic, duplicati, borgmatic, Velero) fara vendor lock-in. Schimbi providerul mutand un endpoint URL in config, fara sa rescrii scripturile.
Comparativ cost real pentru 50 GB stocați 12 luni (preturi de referinta):
| Provider | Cost lunar 50GB | Cost anual 50GB | Cost pe 5 ani | Egress (download) | Note |
|---|---|---|---|---|---|
| BackBlaze B2 | ~0,30 EUR | ~3,60 EUR | ~18 EUR | 3x free, apoi 0,01 USD/GB | Cel mai ieftin pay-per-use |
| Wasabi | ~0,30 EUR | ~3,60 EUR | ~18 EUR | Free egress | Minim 1 TB facturat la planul business |
| Hetzner Storage Box | ~0,29 EUR (BX11 100GB) | ~3,50 EUR | ~17,40 EUR | Inclus | SFTP/Samba/WebDAV, nu S3 |
| AWS S3 Standard | ~1,15 EUR | ~13,80 EUR | ~69 EUR | 0,09 USD/GB | Scump, dar enterprise-grade |
| AWS S3 Glacier Deep | ~0,05 EUR | ~0,60 EUR | ~3 EUR | Cost ridicat la restore | Pentru arhive rare |
| Google Drive 100GB | ~2,00 EUR | ~24 EUR | ~120 EUR | Inclus | Convenabil dar scump pentru backup |
| Dropbox Plus | ~10 EUR (2TB) | ~120 EUR | ~600 EUR | Inclus | Nu este facut pentru backup automat |
Aici este partea importantă: egress cost (cost de download) poate distruge bugetul daca restorezi des. AWS S3 Standard pare comparabil pana cand restorezi 50 GB si platesti 4,5 USD extra. BackBlaze B2 da 3x stocare free egress lunar (deci pana la 150 GB download/luna pentru 50 GB stored), ceea ce acopera majoritatea cazurilor IMM.
Recomandarea mea: BackBlaze B2 pentru backup-uri generale + Hetzner Storage Box ca mirror secundar daca vrei provider EU dedicat (GDPR-friendly fara DPA negotiation cu provider US).
Layer 3: Cold/offsite fizic
A treia copie. Optiuni:
- HDD extern la birou (~80 EUR pentru 4TB Seagate), rotated lunar
- NAS Synology/QNAP in casa (DS220+ ~300 EUR + 2x HDD)
- Alt cloud provider (ex: B2 + Wasabi - dublu cloud diversification)
- AWS Glacier Deep Archive pentru backup-uri lunare rare-restore (0,00099 USD/GB/luna)
Battle-tested: pentru un IMM cu 100k-500k EUR/an, HDD extern rotated lunar (80 EUR/4 ani = 20 EUR/an) bate al treilea layer cloud (~50-100 EUR/an).
WordPress specifics
Pentru WordPress simplu, pluginuri free + paid acopera 95% din cazuri:
- UpdraftPlus (free DB + files; Premium 70 USD/an incremental, multi-site) - destinatii: Google Drive, Dropbox, S3, B2, FTP. Standard pentru IMM mici.
- BlogVault (89 USD/site/an, cloud propriu) - best for managed restore + staging gratis.
- WP STAGING (free staging; 89 USD/an backup + migration) - bun pentru staging integrat.
- Duplicator (free archive; 99 USD/an) - best pentru migration unica.
Setup minim WordPress: UpdraftPlus free + BackBlaze B2 via S3-compatible config.
Trade-off: pluginurile fac backup la nivel aplicatie (DB + uploads), NU salveaza configurarea serverului (nginx.conf, certificate, cron). Pentru VPS, completeaza cu backup la nivel sistem.
VPS si server specifics
Pentru VPS auto-gestionat, sculele de productie sunt:
- restic (Go binary, encryption nativa AES-256, deduplication, S3/B2/SFTP backends) - recomandarea mea principala
- borgbackup (Python, deduplication chunking, encryption, repository local sau SSH) - alternativa cu istorie mai lunga
- rsync + cron (simplu, dar fara deduplication sau incremental real)
- ZFS snapshots (daca rulezi ZFS pe filesystem) + zfs send la alt server
- Btrfs snapshots + btrfs send (similar cu ZFS)
Exemplu restic backup automat la BackBlaze B2
#!/bin/bash
# /usr/local/bin/backup-restic.sh
export RESTIC_REPOSITORY="b2:my-backup-bucket:webghid-vps"
export RESTIC_PASSWORD_FILE="/root/.restic-password"
export B2_ACCOUNT_ID="your_b2_key_id"
export B2_ACCOUNT_KEY="your_b2_application_key"
# Backup with exclude patterns
restic backup \
/var/www \
/etc \
/home \
--exclude="*.log" \
--exclude="cache/*" \
--tag "daily-$(date +%Y%m%d)"
# Retention: 7 daily, 4 weekly, 12 monthly
restic forget \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 12 \
--prune
# Verify integrity (10% random sample)
restic check --read-data-subset=10%
Cron entry: 0 3 * * * /usr/local/bin/backup-restic.sh >> /var/log/restic.log 2>&1
Database dump cu mysqldump
#!/bin/bash
# /usr/local/bin/backup-mysql.sh
BACKUP_DIR="/var/backups/mysql"
DATE=$(date +%Y%m%d-%H%M%S)
mkdir -p $BACKUP_DIR
# Dump all databases with single transaction (no table lock)
mysqldump \
--all-databases \
--single-transaction \
--quick \
--routines \
--triggers \
--events \
| gzip > "$BACKUP_DIR/all-databases-$DATE.sql.gz"
# Upload to B2 immediately
rclone copy "$BACKUP_DIR/all-databases-$DATE.sql.gz" \
b2:my-backup-bucket/mysql/
# Local retention: keep 7 days
find $BACKUP_DIR -name "all-databases-*.sql.gz" -mtime +7 -delete
Pentru PostgreSQL, schimbi cu pg_dumpall -c -U postgres | gzip > ....
Cron entry: 0 2 * * * /usr/local/bin/backup-mysql.sh
Encryption pentru offsite - obligatoriu GDPR
Aici este partea importantă: orice backup care paraseste infrastructura ta (Layer 2 si 3) trebuie criptat client-side - cheia este la tine, nu la provider.
GDPR Art. 32 cere "pseudonimizare si criptare a datelor personale". Daca ai date clienti (nume, email, comenzi, IP), backup-urile in cloud trebuie criptate. Restic cripteaza by default. Pentru rsync sau mysqldump simplu, foloseste age:
# Encrypt
age -r age1xxxxxxxxxxxxxxxxxxxxxxxx backup.sql.gz > backup.sql.gz.age
# Decrypt
age -d -i ~/.age/key.txt backup.sql.gz.age > backup.sql.gz
Trade-off: cheia trebuie sa stea in afara backup-ului. Daca pierzi cheia, pierzi datele. Salveaz-o pe HDD extern + cu documentele firmei + in password manager (Bitwarden, 1Password).
Restore drill - critical step
⚠️ Backup-ul netestat = NO backup. Daca nu ai facut restore in ultimele 3 luni, nu ai backup - ai un fisier de care speri ca functioneaza.
Setup restore drill trimestrial:
- Provisioneaza un VPS Hetzner CX11 (~4 EUR/luna, sters dupa drill)
- Restoreaza ultimul backup full (fisiere + DB)
- Porneste cronometrul
- Verifica: site se incarca? login admin merge? data integrity check?
- Opreste cronometrul = RTO real
- Documenteaza in runbook
Battle-tested: prima drill la un client a descoperit ca mysqldump-ul automatic exclusese tabela wp_users (greseala in script). Backup-urile aratau OK dimensional dar login era imposibil dupa restore.
Pro tip dev: scrie restore-test.sh care face restore + curl la /wp-login.php + verifica HTTP 200 + curl pagina produs + verifica continut. Cron lunar pe VPS staging. Daca failure, primesti email.
FAQ
Cat costa un backup setup decent pentru IMM?
Pentru magazin WooCommerce cu 5 GB date: BackBlaze B2 ~3,60 EUR/an + HDD extern 4TB 80 EUR cost unic + UpdraftPlus Premium optional 70 USD/an. Total ~75-95 EUR/an (80 EUR hardware unic). Cost mediu disaster (recovery + downtime + revenue lost): 5.000-50.000 EUR. ROI absurd.
Ce restorez prima data?
Ordine prioritizata: 1) DNS (daca nu rezolva, nimic nu conteaza) - ai zone export salvat? 2) Email MX (clientii sa poata scrie) 3) Site landing page (chiar placeholder) 4) Database principal 5) Files si uploads 6) Pluginuri si configurari. Pentru magazin cu plati: checkout > catalog > account features.
Cat retention este suficient?
Standard minim: 30 zile zilnice + 90 zile saptamanale + 365 zile lunare. ANAF cere pastrare facturi 5 ani in RO, dar nu obliga backup imutabil. Pentru PCI-DSS verifica retention legal cerut.
Encryption este obligatoriu legal?
Da, in practica. GDPR Art. 32 cere "masuri tehnice adecvate", criptarea este standardul interpretat de DPA-uri. ANSPDCP romana a aplicat amenzi pentru backup-uri necryptate accesibile prin breach. Cost extra: zero (restic cripteaza default, age este free).
Trebuie immutability (Object Lock)?
Pentru IMM < 500k EUR/an: nu obligatoriu, dar recomandat (~5-10% extra peste storage normal). Pentru eCommerce, fintech, sanatate: obligatoriu. Object Lock previne stergerea retrospectiva chiar daca atacatorul compromite credentialele cloud.
Backup pe alt disk din acelasi server conteaza ca "2 medii"?
Nu strict. Snapshot ZFS pe acelasi disk = 1 mediu. Snapshot pe alt disk din acelasi server = 1.5 medii (rezista la disk failure, nu la server failure). Real 2 medii = hosting + cloud storage extern.
Cat de des restore drill?
Minimum trimestrial. Ideal lunar pentru WooCommerce activ. Drill = restore complet pe staging + verificare functionalitate + cronometru RTO. Daca nu poti restora in sub 4 ore, ai o problema operationala de rezolvat inainte de disaster.
Concluzie
Backup-ul este disciplina, nu unealta. Poti avea cel mai scump enterprise backup software si sa pierzi datele daca nu testezi restore-ul. Sau poti avea un setup de 4 EUR/luna pe BackBlaze + HDD extern + un script de 50 de linii si sa supravietuiesti orice disaster.
Setup minim recomandat pentru IMM tipic:
- Layer 1: backup-uri zilnice host (already done)
- Layer 2: restic la BackBlaze B2 cu retention GFS (~4 EUR/luna)
- Layer 3: HDD extern rotated lunar (80 EUR cost unic)
- Restore drill trimestrial pe VPS Hetzner CX11
Aici este partea importantă: niciun backup nu este perfect. RPO/RTO definite, restore drill regulat, documentation in runbook. Asta este diferenta intre "am backup" si "am business continuity".
Pe scurt: regula 3-2-1 functioneaza. Restic + B2 + HDD extern + cron + restore drill = battle-tested pentru 95% din cazuri IMM.
Surse
- https://www.backblaze.com/blog/the-3-2-1-backup-strategy/
- https://www.veeam.com/blog/321-backup-rule.html
- https://restic.readthedocs.io/
- https://www.borgbackup.org/
- https://age-encryption.org/
- https://www.hetzner.com/storage/storage-box
- https://updraftplus.com/
- https://gdpr-info.eu/art-32-gdpr/