note

Ahoj, (blue star) tato stránka je určena zejména pro tech leady a mentory na projektech Česko.Digital, kteří se chtějí více dozvědět o tom, jak se mohou vybírat technologie na “dobro” projektech.

Pokud po přečtení budeš potřebovat další informace ohledně vývoje webu, přečti si článek od Tomáš Znamenáček (Unlicensed) zde na blogu Česko.Digital.

Ahoj, 👋 tato stránka je určena zejména pro tech leady a mentory na projektech Česko.Digital, kteří se chtějí více dozvědět o tom, jak se mohou vybírat technologie na “dobro” projektech.

Pokud po přečtení budeš potřebovat další informace ohledně vývoje webu, přečti si článek od Tomáš Znamenáček zde na blogu Česko.Digital.

Co se vše dozvíš?

(blue star) Hodnoty, na kterých stavíme při vývoji řešení

(blue star) Výběr technologií na projektu

Na projektech používáme širokou škálu technologií, jejichž volbu podřizujeme zejména možnostem a preferencím zadavatelů a vývojářských týmů. Jinými slovy, nepoužíváme jeden konkrétní „stack“ pro každý projekt a každý případ. Přesto existuje řada obecných principů a konkrétních postupů, kterými se při volbě technologií řídíme.

Webové stránky

Při vytváření webových stránek preferujeme statický web, který je zkompletován do souborů HTML z obsahových podkladů a šablon. Dodatečnou interaktivitu pak poskytuje JavaScript běžící na klientu. Takové řešení nám v případech, kdy je to možné, umožňuje použít finančně nenáročný hosting (často i zdarma), vysokou rychlost načítání stránek a výbornou odolnost proti přetížení požadavky.

Jinými slovy, ideální technologie je pro nás tzv. Jamstack. Webové stránky jsou sestaveny pomocí generátoru, jako je např. Next.js — ten používá např. náš web —, NuxtJS, Hugo nebo Jekyll.

Obsah webových stránek doporučujeme udržovat primárně v souborech typu Markdown, které jsou uloženy přímo v repozitáři projektu. Pro snazší editaci nasazujeme moderní systémy na správu obsahu (CMS). V odůvodněných případech obsah udržujeme v databázi typu Airtable.

Stránky hostujeme pomocí služeb jako jsou GitHub Pages, Vercel, Netlify, Cloudflare Pages a podobné, které zaručují vysokou škálovatelnost, nejsou náročné na údržbu, a umožňují automatické nasazování projektu ze zdrojových kódů v repozitáři.

Serverové součásti projektu (API) zpravidla implementujeme v JavaScriptu nebo TypeScriptu a hostujeme pomocí serverlesstechnologií jako Vercel Functions, AWS Lambda nebo Cloud Functions.

Pro měření návštěvnosti používáme primárně službu Plausible, která nevyžaduje tzv. „cookie lištu”. V odůvodněných případech používáme Google Analytics, kdy preferujeme řešení bez ukládání cookies.

Dobrým příkladem je repozitář našeho webu na GitHubu.

Serverové služby a aplikace

Při volbě technologií pro služby a aplikace běžící na serveru se rozhodujeme zejména podle dostupnosti vývojářů pro konkrétní platformu a zkušeností či preferencí zadavatele. Jinými slovy, snažíme se používat široce rozšířené programovací jazyky a frameworky: tedy např. spíše Python než Haskell.

Bez ohledu na volbu vývojové platformy služby a aplikace provozujeme jako Docker kontejnery, což nám přináší jednak dostatečnou míru odstínění nasazené aplikace od specificky nastaveného prostředí, různých verzí závislostí, a podobně, jednak přináší široké možnosti nasazení v testovacím a produkčním prostředí. Jinými slovy, výchozím bodem je pro nás Dockerfile v repositáři, který umožňuje sestavení Docker image.

Sestavení Docker image automatizujeme přes služby typu GitHub Actions, AWS CodeBuild nebo Google Cloud Build, což nám umožňuje automatizovat nasazování aplikace v testovacím nebo produkčním prostředí, podle příslušné větve repozitáře (tzv. continuous delivery).

Služby hostujeme většinou ve veřejném cloudu: Amazon Web Services (AWS), Google Cloud Platform (GCP), Azure, a podobně. Snažíme se využívat finančně výhodných a ekologických řešení jako je např. Google Cloud Run.

Docker využíváme též pro efektivní lokální vývoj. Pokud služba i aplikace vyžaduje externí zdroje, např. databázi, definujeme je v konfiguračním souboru pro Docker Compose a usnadňujeme tak vývojářům zapojení do projektu.

Pro správu infrastruktury využíváme nástroje Terraform. Jinými slovy, snažíme se infrastrukturu „nenaklikávat“, ale vytváříme ji automatizovaně, včetně nutné konfigurace. Definice infrastruktury je součástí repozitáře, což jednak usnadňuje porozumění architektuře dané služby či aplikace, jednak umožňuje zapojení správy infrastruktury do continuous delivery celého projektu.

Dobrým příkladem je repozitář projektu Jehlomat na GitHubu.

Mobilní vývoj

Mobilní aplikace vyvíjíme buď pomocí nástrojů jako je např. Flutter, nebo v nativních nástrojích dané platformy. Disponujeme vývojářskými účty v Apple Store a Google Play. Dobrými příklady jsou repozitáře projektů Loono, Movap (Apple) a Movapp (Android) na našem GitHubu.

(blue star) Kam se v případe dotazů obrátit?

  1. Při jakékoli otázce je nejlepší komunikovat na Slacku a spíše než psaní soukromých zpráv volit veřejnou zprávu buď do:

    1. kanálu projektu, kde tagnete relevantního projektového koordinátora nebo tech leada.

    2. organizačního kanálu #ceskodigital-tech, kde se řeší všechny otázky ohledně běžících projektů v rámci č.d

  2. Pokud poptáváme dobrovolníky na nějaký technický úkol nebo roli, je potřebné napsat detailní poptávku do kompetenčního kanálu (#vyvoj). Při jakékoli nejasnosti ohledně role nebo formy příspěvku je nejlepší se nejdříve poradit v kanále #ceskodigital-tech.

  3. V případě jakékoli další nejasnosti nebo nutnosti, nebo nutnosti eskalace doporučujeme tagnout CTO.