Nasazení#
Naplánované úlohy#
Bez nich systém nefunguje správně. Úlohy jsou presentery v app/UI/Cron/, spouštějí
se HTTP požadavkem s tokenem.
| Skupina | Co dělá | Jak často |
|---|---|---|
| Fronta e-mailů | rozesílá | každých pár minut |
| Expirace | upozornění a mazání prošlých inzerátů a zápisů | denně |
| Přepočty | počty v kategoriích, ceny | 10–15 min |
| Hlídací psi | rozesílá upozornění | průběžně nebo denně |
| Platby | dofakturace, vyhodnocení | průběžně |
| Plánovač faktur | opakovaná fakturace | denně |
| Elasticsearch | synchronizace a noční reindex | 10 min / denně |
| Sitemapy | generování | dle potřeby |
Bez naplánovaných úloh se problémy projeví až za týdny
Inzeráty nevyprší, počty přestanou sedět, e-maily se hromadí. Nic to nehlásí. Po nasazení zkontrolujte, že úlohy skutečně běží.
Souběh úloh je ošetřený zámkem
Dvě instance téže úlohy se nespustí. Nespouštějte je ale zbytečně často — dlouhá úloha zablokuje tu následující.
Produkční nastavení#
| Věc | Nastavení |
|---|---|
| Ladicí režim | vypnutý |
| Zobrazování chyb | vypnuté, logovat |
| Mezipaměť | zapnutá |
docs/sql/ |
nedostupné zvenčí |
| Přístupy k branám | jen v local.neon |
www/uploads/ |
bez spouštění skriptů |
Ladicí panel vypisuje konfiguraci včetně přístupových údajů
Zapnutý na produkci znamená, že klíče k platebním branám a dalším službám jsou ve zdroji stránky. Ověřte, že je vypnutý.
V www/uploads/ se nikdy nespouští kód
Nahrané soubory leží ve veřejném stromu a názvy si zachovávají příponu. Aplikace
odmítá nebezpečné přípony (php, phtml, phar, cgi, sh, .htaccess …) v kterékoli
části názvu, ale webový server je druhá pojistka.
Apache čte verzovaný soubor www/uploads/.htaccess (vypnutý PHP engine, odmítnuté
skriptové přípony). Vyžaduje AllowOverride All (nebo alespoň FileInfo Options Limit)
pro adresář webu.
nginx .htaccess nečte. Do bloku server doplňte před obecné location ~ \.php$:
Po nasazení ověřte: nahraný test.php.txt v uploads/ se vrátí jako text, ne jako
výstup skriptu.
Jak se rozhoduje o ladicím režimu#
Produkční výchozí stav je vypnuto; zapíná se explicitně. Rozhoduje
App\Bootstrap::resolveDebugMode() v tomhle pořadí:
- proměnná prostředí
NETTE_DEBUG—1,true,on,yeszapnou, cokoli jiného včetně0afalsevypne, - existence souboru
config/debug-mode.flag(v repu není; na dev serveru ho vytvořítetouchem), - jinak vypnuto.
Proměnná prostředí přebíjí flag soubor
Když je NETTE_DEBUG nastavená na cokoli mimo povolenou čtveřici, flag soubor už
se nečte. Na stroji, kde je proměnná nastavená omylem, proto touch nepomůže.
Sestavení assetů#
Používejte globální sass, ne npx sass
Jsou to jiné verze a produkují jiný výstup. Rozdíl se projeví jako drobné posuny v rozvržení, které nikdo nespojí s nasazením.
Nasazení na existující databázi#
Když se povyšuje starší instalace, nedědí se jen data, ale i vady schématu,
které v ní léta nikdo neviděl. Projděte proto před nasazením
Kontrolu databáze — jsou to samé SELECTy, dají se
pustit i na produkci.
Nejdůležitější je první dotaz: vypíše překladové tabulky *_texts, kterým chybí
složený primární klíč. Bez něj databáze pouští duplicitní překlady a každý
další běh seedu je přidává.
Automatické kontroly tuhle vadu nenajdou
SchemaValidator::validateClass porovnává sloupce a typy, ne indexy —
chybějící primární klíč mu projde. Zjistí se to jedině tímhle dotazem, nebo
až tím, že se na webu ukazuje jiný text než v administraci.
Postup, když audit něco najde, i vzorové opravné skripty jsou v té kapitole.
Kontrola po nasazení#
- Titulní stránka a přihlášení.
- Jeden výpis v administraci a jeden formulář.
- Zkušební objednávka až po odeslání.
- Fronta e-mailů — odchází?
- Log chyb — přibylo něco?
- Kontrola databáze — u nasazení na existující databázi znovu, ať se ověří, že migrace nezavedly duplicitní překlady.
Zkušební objednávka je nejlepší test
Projde přes košík, platbu, sklad, fakturaci a e-maily naráz. Jeden průchod otestuje víc než hodina klikání po obrazovkách.