Text

Všechno ostatní v 1.9

Pět příspěvků pokrylo to, o čem 1.9 je: příspěvek ve dvou jazycích, web v jazyce stránky, co leží v cíli nasazení před prvním nasazením, hosting, který umí jen FTP a jednu zkratku v telefonu místo dvou. Tenhle je zbytek, v pořadí, v jakém ho provozovatel potká. Většina z něj přišla od dvou lidí, kteří 1.9 nainstalovali od nuly a upgradovali kopii webu o 6 600 příspěvcích, přesně podle dokumentace.

Číst dál

Jedna zkratka místo dvou

Poslat příspěvek z iPhonu chtělo až do 1.9 dvě zkratky: jednu, která převezme soubory z panelu sdílení, a druhou, která otevře spojení přes SSH. Napsáno ve vlaku prošlo obě. Teď je to jedna zkratka, importovaná místo stavěná, a běží i na Macu.

Číst dál

Hosting, který umí jen FTP

Sdílený hosting často přichází s adresářem, přihlášením přes FTP a ničím dalším – bez SSH, bez rsync, bez gitu. Pro blog.sh to stačilo odjakživa; dokumentace to jen do 1.9 neříkala. Cesta vede přes backend rclone, protože rclone umí FTP jako jeden ze svých mnoha vzdálených cílů.

Číst dál

Před prvním nasazením

Někdo stěhuje blog z WordPressu na blog.sh a nechává si stejný hosting, stejný adresář i stejnou adresu. Sestavení je hotové, první nasazení projde bez jediné chyby – a úvodní stránka je pořád ta stará. Při nahrávání se nic nepokazilo. Starý web jen nikdo neodstranil a hosting mu dává přednost.

Číst dál

Web mluví jazykem stránky

Někdo přeloží své příspěvky, otevře českou polovinu webu – a menu pořád říká Writing, patička Links a na každé pilulce stojí anglický štítek. Příspěvky byly vždycky jen polovina toho, co čtenář čte. Zbytek je to, co web říká sám o sobě, a v 1.9 to má jazyk taky.

Číst dál

Dva jazyky, jeden web

Někdo píše česky a část lidí, kteří by ho četli, česky neumí. Obvyklá odpověď je druhý blog – druhý archiv, druhá sada štítků, druhý feed – a do roka se ty dva rozejdou: příspěvek opravený v jednom a ve druhém ne, štítek přejmenovaný jen na jedné straně, čtenář, který přepne jazyk a ocitne se jinde, než čekal. blog.sh 1.9 odpovídá jinak: jeden web a druhý jazyk vedle něj.

Číst dál

./blog.sh 1.9

./blog.sh 1.9 je venku — vydání na GitHubu.

Vydání o publikování ve více jazycích. Vyjmenuješ je v site.locales a příspěvek si nechá jedno datum, jednu sadu štítků a jednu sérii, s textem pro každý jazyk, který napíšeš přes ./blog.sh translate. Vlastní jazyk webu zůstává v kořeni, každý další dostane svůj a jedno sestavení udělá všechny. Banner, menu, patička i štítky mluví každým jazykem taky; příspěvek, který nikdo nepřeložil, se ukáže i tak a odkáže na jedinou kopii, která existuje. Tenhle web tak běží anglicky a česky už od doby, kdy bylo vydání konceptem.

Kolem toho první hodina: dva lidé nainstalovali 1.9 od nuly a upgradovali kopii webu o 6 600 příspěvcích, přesně podle dokumentace, a všechno, o co zakopli, je opravené. Esc nikdy nic neudělá, instalační průvodce mluví tvým jazykem od první obrazovky a nevezme příklad ze šablony jako jméno tvého webu, vlastnosti konceptu ukážou, kde si ho přečíst — i s QR kódem pro telefon — a doctor --online se teď zeptá cíle nasazení, co mu v kořeni leží navíc.

Číst dál

Co žádné sestavení nevrátí

Notebook doslouží, nebo se server buduje znovu od nuly, a otázka, na které skutečně záleží, je užší, než zní. Ne „jak to zálohovat" – „které z těchto souborů po mně engine opravdu potřebuje chránit, protože nic jiného tady je znovu nevyrobí."

Většina instalace tuto podmínku nesplňuje. Engine sám je git klon; stáhni ho znovu a je to tentýž engine. Všechno, co sestavení zapisuje, se vrátí jedním sestavením, pokud zbylo to ostatní.

Instinkt velí zálohovat samotný web – složku, kterou prohlížeč skutečně vidí. To je přesně ta jediná věc, kterou tento seznam vynechává. public.nosync, vlastní výstup sestavení, je stejně postradatelný jako engine, který ho vytvořil: jedno sestavení ho zopakuje bajt po bajtu, takže držet jeho kopii by znamenalo ukládat tutéž informaci dvakrát pod dvěma jmény a omylem věřit té starší.

Co zbývá, když odložíme engine i web, který sestavuje, je krátký seznam.

Co je skutečně nenahraditelné

Nejdřív samotné příspěvky – jediná položka celého seznamu, kterou žádné sestavení, nový klon ani nové nasazení nevrátí za žádných okolností.

Číst dál

Zámek, který nečeká

Dvakrát za hodinu na dost velkém webu sáhnou dvě úlohy cronu do téže složky téměř ve stejnou chvíli: naplánované publikování, které sestaví a nasadí příspěvek, jehož čas právě nastal, a obnova postranního panelu, která přepisuje několik týchž výstupních souborů čerstvými čísly. Většina tiků se mine o minuty. Na archivu tak velkém, že sestavení s úplným nasazením trvá déle než interval mezi nimi, se některé neminou.

Nasazení, které prochází strom, zatímco ho jiný běh ještě přepisuje, může vydat stránku zapsanou napůl. Běh, který maže osiřelé soubory, může jako osiřelou smazat stránku, kterou druhý běh o sekundu dřív publikoval. Ani jedno selhání se neohlásí – web je prostě potichu špatně.

Zámek a co odmítá dělat

Mezi těmi dvěma běhy stojí jediný soubor, .blog-sh.lock v kořeni projektu – a rozhoduje se způsobem, který vypadá špatně, dokud neuvidíš alternativu. Běh, který najde zámek obsazený, na něj nečeká.

Číst dál

Co zbývá pokazit

Na tomto webu není /admin. Žádný přihlašovací formulář, na kterém by šlo zkoušet hesla, žádná relační cookie, kterou by šlo ukrást, žádný seznam pluginů, který by bylo nutné porovnávat s CVE z minulého měsíce – ne proto, že by je někdo podle kontrolního seznamu odstranil, ale proto, že nic z toho nikdy nevzniklo.

Architektonické poznámky enginu říkají zbytek bez obalu: model hrozeb je statický web bez vlastního serveru. Nic tu neposlouchá na žádném portu. Cílem nikdy nebylo zabezpečit složitý systém proti všemu, co se v něm může pokazit. Cílem bylo žádný takový systém nepotřebovat.

Seznam toho, co zbývá pokazit, je pak kratší než u běžného blogu – co nesou stránky, co leží v pracovním adresáři, a ta jediná věc, která vstupuje zvenčí.

Jediná věc, která vstupuje zvenčí

Psaní z telefonu znamená, že jedny dveře přece jen přijímají bajty z cizího zařízení: scripts/receive.sh, spuštěný jako vynucený příkaz SSH klíče. Neposlouchá nikde – žádný socket, žádný démon, jen klíč, který smí spustit přesně tento skript a nic jiného.

Číst dál