K čemu modul slouží
- Ochrana od první minuty. Instalace vytvoří profil „Denní plná záloha“: soubory a databáze každou noc ve 03:00, sedm nejnovějších záloh na serveru. Zálohy z harmonogramu potřebují spuštění cronu každých několik minut nebo spouštěč z administrace – panel zobrazuje hotovou adresu i příkaz.
- Záloha, která přežije havárii serveru. Záloha uložená pouze na stejném serveru jako obchod zmizí spolu s ním. Modul odesílá každou hotovou zálohu do vybraných umístění mimo server a upozorňuje na panelu, když žádné takové umístění není nastavené.
- Zabezpečení před aktualizací. Tlačítko „Rychlý snímek před aktualizací“ kopíruje databázi a také moduly, šablony, přepsání a konfiguraci – tedy to, co může aktualizace poškodit – bez množství fotografií, za zlomek času plné zálohy.
- Obnova po havárii, napadení nebo nepovedené změně. Obnovení celého obchodu nebo jen jeho části: databáze, souborů, jedné tabulky nebo jednoho adresáře, například šablony.
- Obnovení na novém serveru. Nouzový skript
pdrestore.phpobnoví obchod ze zálohy na prázdném serveru, bez nainstalovaného PrestaShopu – po ztrátě serveru nebo při změně hostingu pod stejnou adresou obchodu.
Co se ukládá do zálohy
Pět rozsahů zálohy
- Soubory a databáze – vše potřebné k obnovení obchodu (doporučeno).
- Pouze databáze – malá a rychlá záloha, vhodná pro časté zálohy mezi plnými.
- Pouze soubory – fotografie, moduly, šablony a ostatní soubory obchodu.
- Rychlý snímek – databáze a adresáře modules, themes, override, config, app/config, mails, translations, classes a controllers.
- Vlastní rozsah – databáze a vybrané adresáře nejvyšší úrovně; samostatné soubory v kořenovém adresáři (index.php, .htaccess a podobné) jsou přidávány vždy.
Databáze
- Dump v čistém PHP. Tabulky, pohledy, triggery, procedury, funkce a události, bez nástroje mysqldump a bez přístupu k shellu serveru.
- Tabulky obchodu nebo celá databáze. Ve výchozím nastavení se kopírují tabulky s prefixem obchodu; jedna volba přidá všechny tabulky databáze, například tabulky externí integrace.
- Tabulky bez řádků a vynechané tabulky. Statistiky návštěv, index vyhledávače, cache a logy se ukládají do zálohy pouze jako struktura. Vlastní seznamy umožňují přidat další tabulky kopírované bez řádků nebo tabulky úplně vynechat.
- Uzavření obchodu po dobu zálohování databáze. Volba profilu přepne obchod do režimu údržby pouze na minuty vytváření dumpu databáze, aby žádná objednávka nebyla zachycena uprostřed zápisu, a znovu jej otevře – i když se záloha nepovede.
Soubory a vyloučení
- Vždy vynecháno. Cache, logy, relace, dočasné obrázky, adresáře .git a node_modules, adresář záloh samotného modulu a adresáře záloh jiných zálohovacích modulů a modulu aktualizace.
- Vlastní vyloučení. Vynechané cesty se zástupným znakem (themes/*/cache, **/nazev), vynechané typy souborů (např. zip, mp4, psd) a limit velikosti jednotlivého souboru.
- Náhledy a fotografie produktů. Samostatné volby vynechají náhledy fotografií (lze je vygenerovat z originálů) nebo celý adresář fotografií produktů, když mají fotografie vlastní zálohu.
- Soubory měněné během zálohy. Soubor změněný, smazaný nebo nečitelný během kopírování je zaznamenán v protokolu a záloha pokračuje dál.
Komprese a rozdělení do souborů
- Čtyři úrovně komprese gzip – žádná, lehká, doporučená a nejsilnější. Data, která se nekomprimují (fotografie, archivy), modul sám ukládá bez komprese, čímž šetří čas.
- Záloha rozdělená do souborů o zvolené velikosti (výchozí 256 MB, od 16 do 4096 MB), díky čemuž lze odesílání obnovit a limity velikosti souboru na hostingu nepřekážejí. Podporovány jsou soubory obchodu větší než 2 GB.
Harmonogram a automatické zálohy
- Profily záloh. Každý profil má vlastní rozsah, harmonogram, cílová umístění, pravidla mazání starých záloh a šifrování – například plná záloha denně a navíc samotná databáze každých několik hodin.
- Harmonogram. Pouze ručně, každých několik hodin (od 1 do 24 hodin nebo každé 2–7 dnů), denně, ve vybrané dny v týdnu nebo jednou měsíčně (v kratším měsíci – poslední den), v určitou hodinu v časovém pásmu obchodu.
- Tři způsoby spuštění. Adresa cronu s tajným tokenem (volaná každých 5 minut, nová adresa jedním kliknutím), příkazový řádek
php modules/pdbackupandrestorepro/cli.phps příkazy cron, run a status – bez časového limitu – a spouštěč z administrace pro hostingy bez cronu, který spustí opožděnou zálohu při návštěvě zaměstnance v administraci. - Krátké, obnovitelné kroky. Čas jednoho kroku nastavíte od 5 do 120 sekund (doporučeno 20). Po každém kroku se průběh uloží a adresa cronu sama vyvolá další krok; když to server neumožní, záloha pokračuje při dalším spuštění cronu.
- Průběh živě. Ukazatel průběhu, aktuální fáze a poslední události. Zavření karty prohlížeče zálohu nepřeruší a tlačítko „Zastavit“ ji ukončí na nejbližším bezpečném místě.
- Vždy jen jedna úloha. Zámek v databázi a zámek souboru nedovolí, aby dva procesy (např. cron a karta prohlížeče) prováděly stejnou zálohu současně. Úloha, která třikrát po sobě neudělá žádný pokrok, skončí chybou s uvedeným důvodem.
Kde zálohy ukládat: disk, NAS, FTP, FTPS, SFTP, S3
- Jiný adresář na tomto serveru – druhý disk nebo připojený síťový disk (NAS), mimo adresář obchodu.
- FTP a FTPS. FTPS šifruje spojení a ověřuje certifikát serveru (ověřování lze vypnout pro vlastní server se samopodepsaným certifikátem); pasivní nebo aktivní režim.
- SFTP (SSH). Přihlášení heslem nebo soukromým klíčem (RSA ve formátu PEM nebo klíč OpenSSH, také chráněný heslem; klíče ed25519 tam, kde je podporuje cURL hostingu) a volitelný otisk klíče serveru, díky kterému modul komunikuje výhradně se správným serverem.
- Úložiště kompatibilní se S3. Amazon S3, Backblaze B2, Wasabi, Cloudflare R2, Hetzner, OVH, MinIO a další služby kompatibilní se S3: adresa služby, region, bucket, adresář v bucketu (několik obchodů v jednom bucketu) a adresování bucketu v cestě. Velké soubory se odesílají po částech a modul nikdy nemění nastavení samotného bucketu.
- Test připojení. Tlačítko „Testovat připojení“ zapíše, přečte a smaže testovací soubor a když to služba umožňuje – zobrazí volné místo. Výsledek posledního testu je vidět v seznamu cílových umístění.
- Obnovitelné odesílání. Záloha se odesílá do vybraných umístění postupně a po částech; přerušené odesílání se obnoví od místa, kde skončilo, a na serverech FTP, FTPS a SFTP se velikost odeslaného souboru porovnává s originálem. Zbytky zálohy, kterou se nepodařilo odeslat, se z cílového umístění odstraní.
- Skript pro obnovení spolu se zálohou. Ve výchozím nastavení se do každého umístění mimo server ukládá také
pdrestore.php, takže zálohu lze obnovit i tehdy, když už obchod a jeho administrace neexistují.
Mazání starých záloh (retence)
- V cílových umístěních. Počet nejnovějších záloh uchovávaných v každém umístění, mazání záloh starších než zvolený počet dní a dlouhá historie podle schématu den–týden–měsíc: navíc nejnovější záloha z každého z posledních dnů, týdnů nebo měsíců.
- Na tomto serveru. Samostatný počet nejnovějších záloh a samostatný limit stáří. Při nedostatku místa na disku může profil smazat zálohu ze serveru, jakmile dorazí alespoň do jednoho cílového umístění.
- Co pravidla nemažou. Nejnovější platnou zálohu, zálohy označené jako chráněné (v seznamu záloh nebo pro celý profil, např. snímky před aktualizací) a zálohu, ze které bylo připraveno obnovení. Staré zálohy se mažou teprve poté, co nová záloha dorazí na místo.
- Úklid zbytků. Když profil neuchovává zálohy na serveru, zálohy stažené k obnovení zmizí ze serveru po týdnu a ze záloh, které se nepodařilo odeslat, tam zůstanou dvě nejnovější. Mazání přerušené v polovině se opakuje. Ze záloh vytvořených z příkazového řádku bez profilu zůstává na serveru sedm nejnovějších.
Šifrování záloh a bezpečnost
- AES-256 s kontrolou integrity. Každý fragment zálohy je šifrován algoritmem AES-256 (režim CTR) a podepsán HMAC-SHA256; klíč vzniká z hesla pomocí PBKDF2-SHA256 (200 000 iterací). Zašifrován je také seznam souborů zálohy, takže názvy souborů nejsou viditelné.
- Detekce podvržení. Popis zálohy (manifest) je podepsán a každý fragment je svázán se zálohou, souborem a místem v souboru – podvržený, přemístěný nebo vložený fragment z jiné zálohy kontrolou neprojde.
- Heslo zálohy. Minimálně 12 znaků, zadávané dvakrát, uložené v zašifrované podobě a nikde jinde znovu nezobrazované. Bez hesla zašifrovanou zálohu neobnoví nikdo, ani autor modulu. Nové heslo platí pro budoucí zálohy.
- Zašifrované přihlašovací údaje. Hesla a klíče cílových umístění jsou v databázi uloženy v zašifrované podobě a nevracejí se do formuláře.
- Adresář záloh uzavřený pro internet. Při instalaci modul vybere adresář mimo veřejnou část webu, pokud to hosting umožňuje; jinak složku s náhodným názvem a ochrannými soubory. Tlačítko „Zkontrolovat z internetu“ na panelu ověřuje, zda lze soubory z adresáře stáhnout, a pro nginx uvádí hotové blokovací pravidlo.
- Upozornění v administraci. Seznam profilů upozorňuje, když nešifrované zálohy míří mimo server, a seznam cílových umístění – když umístění SFTP neověřuje klíč serveru.
- Bez spojení se servery autora. Modul neodesílá data autorovi a nespouští systémové příkazy; mimo vlastní obchod se připojuje výhradně k cílovým umístěním a monitorovací adrese, které si sami nastavíte.
Ověření zálohy a zkušební obnovení
- Kontrola každé zálohy. Po vytvoření se záloha znovu načte a SHA-256 součty všech jejích fragmentů se porovnají s uloženými. V seznamu pak má záloha stav „ověřena“.
- Zkušební obnovení. Úplné načtení zálohy – dešifrování, dekomprese, kontrola archivu a spočítání SQL instrukcí vůči popisu zálohy – bez jakýchkoli změn v obchodě. Záloha uložená pouze mimo server se pro tento účel stáhne.
- Připomenutí. Panel zvýrazní, když v posledním měsíci nebyla žádná záloha načtena celá.
Obnovení obchodu ze zálohy v administraci
- Průvodce ve třech krocích. Výběr zálohy, výběr toho, co se má vrátit, a potvrzení zadáním adresy obchodu. Do potvrzení se nic nemění.
- Pět rozsahů obnovení. Vše, co je v záloze; pouze databáze; pouze soubory; vybrané tabulky; vybrané adresáře (např. themes/classic nebo img/p).
- Nejprve současný stav. Doporučená volba před obnovením vytvoří chráněnou zálohu toho, co bude nahrazeno – u šifrovaných záloh zašifrovanou heslem profilu. Pokud se obnovení ukáže jako omyl, vrátíte se ke stavu před ním.
- Kontrola před spuštěním. Volné místo na disku, právo zápisu do adresáře obchodu, shoda prefixu tabulek, verze PrestaShopu, ze které záloha pochází, a heslo zašifrované zálohy. Upozornění se zobrazí před potvrzením.
- Bezpečné provedení. Po dobu obnovení je obchod uzavřen pro zákazníky a na konci znovu otevřen. Obnovení běží na samostatné stránce mimo administraci, protože samotná administrace je v té době nahrazována; po přerušení pokračuje od místa, kde skončilo, a stránka se po dokončení sama odstraní.
- Soubor nastavení a přihlášení. Soubor nastavení PrestaShopu pochází ze zálohy, ale zachovává připojení k databázi aktuálního serveru. Po obnovení databáze se zaměstnanci přihlašují účty ze dne vytvoření zálohy.
- Zálohy mimo server. Zálohu uloženou pouze v cílovém umístění tlačítko „Stáhnout a zkontrolovat“ stáhne a hned ji celou načte, než bude použita k obnovení.
- Zálohy z novějšího databázového serveru. Při obnovení zálohy vytvořené na novější verzi MySQL nebo MariaDB jsou neznámé kolace a odstraněné režimy SQL nahrazeny odpovídajícími ekvivalenty a ostatní chyby jsou hlášeny.
- Přerušené obnovení. Obnovení, které po 10 minut nedá žádnou známku života, lze z administrace opustit – obchod se znovu otevře a zálohy se opět začnou vytvářet.
Nouzové obnovení bez administrace: pdrestore.php
- Jeden soubor.
pdrestore.phpstáhnete ze záložky Obnovení; ve výchozím nastavení je také v každém cílovém umístění vedle zálohy. - Bez PrestaShopu. Nahrajete skript spolu se soubory zálohy (názvy začínající na pdbr-) do adresáře obchodu a otevřete jej v prohlížeči. Když na serveru obchod není, skript se zeptá na údaje databáze.
- Důkaz přístupu k serveru. Skript vedle sebe vytvoří soubor s kódem, který je třeba přepsat – nikdo cizí, kdo zná adresu skriptu, jej nepoužije.
- Obnovení a úklid. Po přerušení spojení obnovení pokračuje od posledního dokončeného kroku a na konci se skript odstraní ze serveru jedním tlačítkem. Rozhraní v češtině a angličtině.
Panel: je obchod chráněný?
- Hodnocení jednou větou. Například „Obchod je chráněný. Poslední záloha je z …, další je naplánovaná na …“ nebo konkrétní problém: chybí záloha, nepovedená záloha, příliš stará záloha, nefunkční cron, chybí umístění mimo server, adresář záloh otevřený z internetu.
- Kontrolní seznam. Poslední záloha, její stáří, harmonogram, cron, záloha mimo server, adresář záloh, upozornění a zkušební obnovení – každý bod s tlačítkem vedoucím na místo, kde jej opravíte.
- Dlaždice, graf a události. Poslední platná záloha, další záloha, počet záloh na serveru (s jejich velikostí) a v každém cílovém umístění, volné místo na disku, graf velikosti a času posledních záloh a poslední události z protokolu.
- Čtyři otázky na začátek. Co zálohovat, kde zálohy uchovávat, kdy a koho upozornit – odpovědi se uloží do profilu. Nové cílové umístění přidáte během toho a po úspěšném testu připojení se vrátíte k otázkám s tímto umístěním už označeným.
- Test prostředí. Verze PHP, rozšíření, časové a paměťové limity, adresář záloh a volné místo na disku – s vysvětlením, co každé omezení znamená.
- Záhlaví na každé záložce. Poslední platná záloha, nejbližší naplánovaná záloha a stav ochrany viditelné z každé stránky modulu.
E-mailová upozornění a monitoring
- Alarmy. E-mail, když se záloha nepovede; když záloha vznikla, ale nedorazila do všech cílových umístění; když profil nemá kam ji odeslat; když se záloha z harmonogramu nemohla spustit a také když po nastavenou dobu (výchozí 48 hodin) není žádná úspěšná záloha.
- Potvrzení. Volitelný e-mail po každé úspěšné záloze, s velikostí a počtem míst, kde je uložena.
- Příjemci a jazyk. Libovolný seznam adres (prázdné pole = e-mailová adresa obchodu); zprávy ve výchozím jazyce obchodu, v češtině nebo v angličtině.
- Monitorovací adresa (heartbeat). Volaná po každé úspěšné záloze, díky čemuž vás externí monitorovací služba upozorní, když se zálohy přestanou vytvářet. Nastavení ukazují, kdy se cron naposledy ozval, a panel upozorňuje, když cron přestal obchod volat.
Seznam záloh a protokol
- Seznam záloh. Profil, obsah, velikost, doba trvání, umístění uložení, výsledek ověření a ochrana. Podrobnosti zálohy: velikost před kompresí, počet souborů a tabulek, šifrování a verze PrestaShopu a modulu, které ji vytvořily.
- Akce se zálohou. Stažení souborů zálohy do vlastního počítače (s možností obnovení stahování), poznámka, ochrana před automatickým smazáním, zkušební obnovení, obnovení a smazání ze všech umístění najednou.
- Najít zálohy v adresáři. Zálohy uložené v adresáři záloh, ale chybějící v seznamu (např. přenesené z jiného serveru), se do seznamu přidají jedním tlačítkem.
- Protokol. Každý krok zálohy, odesílání a obnovení s čitelnou, přeloženou zprávou; filtrování a stažení protokolu jako textového souboru. Stažení záloh, obnovení a opuštění obnovení – se jménem zaměstnance – se uchovávají dva roky, ostatní záznamy šest měsíců.
Otevřený formát zálohy
- Běžné archivy .tar.gz. Nezašifrovanou zálohu otevře každý archivní program (7-Zip, WinRAR, tar) a databáze je uvnitř jako SQL soubory v adresáři db – záloha nevytváří závislost na modulu.
- Nezávislé fragmenty. Každý soubor zálohy se skládá z fragmentů komprimovaných a kontrolovaných samostatně, díky čemuž lze zálohování, ověření, odesílání i obnovení po přerušení znovu navázat.
Oprávnění, více obchodů a odinstalace
- Oprávnění zaměstnanců. Zaměstnanec s právem zobrazení vidí zálohy, průběh a protokol; spouštění záloh, stahování souborů záloh, obnovení a změna nastavení vyžadují právo úprav. Každá akce v administraci kontroluje bezpečnostní token a oprávnění.
- Více obchodů (multistore). Záloha zahrnuje celou instalaci PrestaShopu – všechny obchody najednou – a nastavení modulu jsou společná pro celou instalaci.
- Odinstalace. Odstraní nastavení modulu, harmonogramy a historii záloh. Soubory záloh na disku a v cílových umístěních zůstávají.
Požadavky a kompatibilita
- PrestaShop 1.7.0–9.x, PHP 7.0–8.5 (64bitové), MySQL 5.6+ nebo MariaDB 10+.
- Rozšíření PHP. zlib (komprese, povinné), OpenSSL (šifrování záloh a ochrana přihlašovacích údajů), cURL (FTP, FTPS, SFTP, S3, kontrola adresáře záloh z internetu a monitorovací adresa); SFTP vyžaduje cURL sestavené s podporou SFTP. Nastavení mbstring.func_overload musí být vypnuté.
- Malé nároky na paměť. Samotný zálohovací engine potřebuje přibližně 20 MB paměti; krátký časový limit požadavku nevadí.
- Bez závislostí. Bez Composeru, bez přiložených knihoven, bez exec a shellových příkazů.
- Jazyky. Rozhraní modulu, e-maily a skript pro obnovení v češtině a angličtině.
Důležité provozní limity (verze 1.0)
- Obnovení pod jinou adresou obchodu nebo do databáze s jiným prefixem tabulek není podporováno – modul to odmítne ještě před první změnou.
- Každá záloha je plnou zálohou svého rozsahu; přírůstkové zálohy nejsou k dispozici.
- Mezi cílovými umístěními nejsou Google Drive ani Dropbox.
- Obnovení nemaže soubory ani tabulky, které se v obchodě objevily po vytvoření zálohy.
- Pohledy, triggery a procedury se vracejí pouze při obnovení celé databáze.
- Záloha databáze vytvářená přes adresu cronu nebo prohlížeč vzniká v mnoha krátkých krocích; u vytíženého obchodu se doporučuje volba uzavření obchodu po dobu zálohování databáze nebo spouštění záloh z příkazového řádku.
- Zálohy z harmonogramu vyžadují cron; spouštěč z administrace je nouzové řešení závislé na návštěvách zaměstnanců.
- Nouzový skript potřebuje soubor s popisem zálohy (název končí na .manifest.json).
- Odinstalace ponechá v adresáři obchodu soubory zahájeného a nedokončeného obnovení (pdbr-restore-*) – je třeba je dokončit, opustit v administraci nebo odstranit ručně.
- Protokol po dobu dvou let uchovává jména zaměstnanců, kteří stáhli zálohu nebo obnovili obchod – je vhodné to zohlednit v evidenci činností zpracování osobních údajů.