Trvalo to dlouho. Ale povedlo se. Neuvěřitelných 15 let jsem používal BlogEngine.NET s lokálními .XML soubory, to vše na Windows Serveru, IIS a ASP.NET. V poslední době jsem však moc příspěvků nepsal, protože nějaký prevít našel bezpečnostní díru verze BE.NET, kterou jsem používal, a upravoval příspěvky neviditelným <div>, případně zanášel komentáře totálními nesmysly. To člověku na energii k psaní článku moc nepřidá.
Dlouhou dobu jsem zvažoval, jestli přejít na nejnovější BlogEngine.NET (který je ve stavu klinické smrti a možná trpí identickými bezpečnostními problémy), přejít na Blogifier (který je však pořád v inkubátoru, s jedním rodičem a nejistou prognózou) nebo jít do nějakého dobrodružství s názvem Miniblog.Core opět s jedním rodičem (čti tvůrcem) a nejistou prognózou. Sice by mne lákalo mít .NET Core řešení, klidně na Linuxu, ale nechtěl jsem za pár měsíců být ve stejné situaci - blog víceméně bez podpory a nějaký bezpečnostní problém na krku.
No a pak jsem, relativně náhodou, našel dva články, které mne navedly na Ghost, neboli blogovací nástroj založený na Node.js. Nejdříve stručný výčet, co jsem po blogu požadoval:
- podpora příspěvků (posts) - to je základ každého blogu
- podpora statických stránek (pages)
- vyhledávání - nechápu, jak může někdo provozovat blog bez vyhledávání
- podpora nativních komentářů nebo řešení třetích stran (Disqus např.)
- podpora témat/šablon (themes)
- podpora testovací/vývojové/debugovací instalace na mém pracovním laptopu s Win 10
- funkční zálohování, resp. export/import pro přenos dat z "produkce" na lokální "test"
- kontaktní formulář
- podpora štítků (tags), možnost výpisu všech příspěvků s vybraným štítkem
- archív příspěvků dle času
- podpora RSS
- responzivní design
- lokalizace do češtiny
- samozřejmě migrace všech existujících příspěvků, stránek a komentářů ze stávajícího BlogEngine.NET
U všech ASP.NET či .NET (dříve .NET Core) řešení jsem narazil na jeden či více bodů, které nesplňovaly a nejel přes to vlak. Wordpress jsem nechtěl, nemám rád PHP. A z Lineupu vím, že stačí chvilka nepozornosti a Wordpress dokáže pěkně zavařit, pokud nad ním někdo nesedí a neaplikuje nové verze, nelepí díry atd.
A pak jsem pár večerů zkoumal Ghost. Taky neumí vše, některé body budu umět vyřešit téměř ihned, na nějaké si musím nechat čas, abych to pořádně prostudoval. Ke svému úžasu jsem si během pár chvil rozjel na Win 10 Node.js, nainstaloval Ghost v lokálním režimu s SQLite. Dokumentace úpravy šablon (themes) oproti BlogEngine.NET naprosto úžasná,
Naťukal jsem si zkusmo pár článků, vyexportoval. Nainstaloval "produkční" platformu, tj. Ubuntu Server, nginx, Node.JS, MySQL CE, Ghost v "produkčním" režimu, nakonfiguroval včetně Let's Encrypt, zkusil import těch zkušebních článků - a ono to fungovalo naprosto bez problémů! To rozhodlo. Řada témat, která jsou zdarma. Samozřejmě není vše bez chyby - kontaktní formulář ve standardu není, stejně jako archív článků dle data či štítku. Lokalizace Ghost témat možná je, ale ne všichni autoři se s tím zdržují. Jsa absolutní ne-grafik, zvolil jsem minimalistickou šablonu Attila, jejíž autor věnoval čas i lokalizaci. Takže jsem v GitHubu vytvořil Pull Request s aktualizovaným českým překladem, snad bude v brzké době akceptován.
Mimochodem to téma Attila mne pořád překvapuje, jak s blogem s touto šablonou pracuji, tak objevuji další a další drobnosti, které nabízí. Věřím, že čtenář si jich při běžném čtení článku ani nemůže všimnout. Třeba ta horizontální čára na začátku stránky, která identifikuje, kolik zbývá ještě délky do konce článku (nepočítaje patičku a komentáře), to je bomba.
Migrace článků, stránek a komentářů z BE.NET na Ghost je námět dalšího článku, třeba to ještě někomu pomůže. Docela jsem se vyblbnul i s redirekty, abych ukojil SEO požadavky, docela se to povedlo, i když pár věcí prostě vyřešit nejde (např. Google si zaindexoval stránky z původního webu s URI "/PrinterFriendly.aspx?id=a8ed8dc1-4d15-452c-b011-4ecd6cec0e10" a to je konec. Id se do Ghostu prostě nepřeneslo, takže není co kam přesměrovávat.
S koncem BlogEngine.NET jsem skončil i s Open Live Writerem, který už také nikdo neudržuje. Markdown v Ghost editoru je tak pro mne novinka a pořád se jej učím.
Jsem rád, že jsem se do té migrace pustil. Ghost je pravidelně aktualizovaný, lze provozovat jak v SaaS, tak na vlastní instalaci, na Internetu je řada článků, jak lidé provozují Ghost v MS Azure, Amazon AWS, DigitalOcean, Hetzner Cloud. Uživatelská i vývojářská základna je nesrovnatelná s BE.NET. Zcela jistě časem objevím nějaké problémy nebo nepřekonatelná omezení, ale zatím vidím spoustu možností a zlepšení, co ještě na blogu udělat, což na předchozím řešení prostě nešlo.