V poslední době jsem řešil takový zajímavý problém. Mám velké množství webových stránek, z nichž chci náhodně každý den pár z nich navštívit. Nedalo by se říct, že to je něco neřešitelného, stránky jsem nakopíroval do Google Sheets a přes ChatGPT si nechal napsat skript, který náhodně vybere deset stránek, a ty otevře v novém okně.

Ostatně skriptování v App Scriptu (což je taková obdoba Javascriptu od Google pro Google Drive) sice vůbec neumím, ale nadefinovat co chci, vygenerovat to, a pak upravit mi nedělalo takový problém. Ovšem na co jsem fakt narazil byla jedna věc, o které bych rád pohovořil. V Google Sheets si můžete vytvořit tlačítko, a to namapovat na váš skript. Jenomže prakticky to často selhává a nefunguje, po kliknutí na tlačítko se nic nestane, a nepomůže ani obnovení stránky. Často jediná možnost řešení je smazat provázání tlačítka a skriptu, přejmenovat jméno funkce, znovu navázat, počkat týden, a po týdnu to opět nefunguje, naštvalo mě to.

Screenshot aplikace

Naštvalo mě to, protože si hodně zakládám na konzistenci, přes tyto náhodné weby sleduji spoustu finančních dat (třeba zaměstnanost v US), i dalších webů (jako FeedReader pro RSS apod.), říkal jsem si tedy, že si naprogramuji něco vlastního. Pokud to ještě nevíte, asi rok jsem strávil učením se NextJS (což je takový vlastně FullStack React Javascript framework), ale nakonec jsem zjistil, že jako DevOpsák v tom nikdy skvělý nebudu (pokud se tomu nebudu věnovat fulltime, což zatím nechci), a tak jsem na tu technologii zanevřel.

Nicméně když jsem se rozhodoval, v čem si naprogramuji svého správce Bookmarků, napadlo mě právě NextJS. Času nebylo moc, a tak jsem základní aplikaci vygeneroval přes Claude AI. Něco fungovalo, něco ne, ale se spoluprácí s AI se mi poměrně solidní aplikaci, v které můžu editovat odkazy, a po stisknutí na tlačítko mi jich to otevře deset náhodných v novém okně, se mi podařilo potřebnou aplikaci vygenerovat. AI je takové zvláštní, nejdřív vám to vše vygeneruje v Javascriptu, a tak musíte trvat na Typescriptu, nakonec to napíše klasické SQL dotazy, a tak musíte trvat na použití ORM, napíše to spoustu chyb, a zapomíná to kontext, ale na rovinu, s mým high level overview není takový problém za den udělat aplikaci, kterou bych jinak dělal možná týdny, protože všechny příkazy atd. nemám do detailu v hlavě. Co pro mě asi bylo nejhorší bylo nastavení celého DevOps. Doma mám vlastní Kubernetes server postavený na MicroK8s, a řešil jsem několik věcí. První bylo napojení na databázi, rozhodl jsem se pro MySQL, což znamenalo vytvořit speciálního uživatele a práva – opět pomohlo AI, i když bych to asi pomaleji sesmolil s pomocí dokumentace nebo zápisků.

A poté deployment. Mám doma zprovozněné vlastní registry, do kterých je možno nahrávat. Ale jako správný DevOpsák jsem si chtěl vytvořit vlastní CI/CD pipeline. To není takový problém, když máte vlastní lokální GitHub runner, takže jsem vše sestavil, nahrál do GitHubu, a ten to přes webhook (mám statickou IP) poslal ke mně domů a pustil lokálně a nahrál do registrů.

Poslední věc, nad kterou jsem trošku bojoval bylo vytvoření celého deploymentu pro Kubernetes v ArgoCD. Pokud máte pocit, že doma provozuji enterprise prostředí na úrovni banky, máte pocit správný. Do toho všeho uložit a synchronizovat hesla v HashiCorp Vault přes Kubernetes Vault Operator, zprovoznit GitOps, nastavit pro GitHub runner RBAC pro Kubernetes, aby mohl restartovat deployment, a máme kompletní pipeline.

Vzhledem k tomu, že se jedná o domácí projekt, asi si všímáte, jak komplexní to je. Ale to je přesně to co já chci, chci se na tom učit. Chci to udělat pořádně, tak jak se má. No nakonec jsem vše rozhodil, i s vlastním SSL certifikátem, a přikládám náhled, jak to vypadá.

Tak co na to říkáte?