K vytvoření vlastního webového aplikace dnes nestačí pouze umět ji vyvíjet. Důležitým aspektem je nastavení nástrojů pro nasazení aplikace, monitorování a také management a administrace prostředí, ve kterém běží. Era manuálního nasazení se odsunuje do zapomnění, i pro malé projekty mohou automatizační nástroje přinést výrazné výhody. Při ručním nasazení často zapomínáme převést něco, zohlednit nějaký detail, spustit zapomenutý test; tento seznam by mohl pokračovat docela dlouho.
Tento článek může pomoci těm, kteří se teprve učí základy vytváření webových aplikací a chtějí se trochu orientovat v základních pojmech a konvencích.
Takže budování aplikací lze rozdělit na dvě části: to, co se týká kódu aplikace, a to, co se týká prostředí, ve kterém tento kód běží. Kód aplikace se rovněž dělí na serverový (ten, který běží na serveru, často: obchodní logika, autorizace, uchovávání dat atd.) a na klientský (ten, který běží na uživatelském zařízení: často uživatelské rozhraní a s ním spojená logika).
Začněme asi s prostředím.
Základem pro práci jakéhokoli kódu, systému nebo softwaru je operační systém, proto se podíváme na nejpopulárnější systémy dostupné na trhu hostingu a poskytneme jim krátký popis:
Windows Server – to je ona Windows, ale v serverové variantě. Některé funkce dostupné v klientské (běžné) verzi Windows zde chybí, například některé služby pro sběr statistik a podobný software, ale existuje soubor utilit pro správu sítě a základní software pro nasazení servery (web, ftp, …). Celkově vzato, Windows Server vypadá jako běžná Windows, klekne jako běžná Windows, ale stojí dvakrát více než její běžná varianta. Nicméně, vezmeme-li v úvahu, že aplikaci nasadíte pravděpodobně na dedikovaném/virtuálním serveru, konečná cena pro vás sice může vzrůst, ale ne kriticky. Protože platforma Windows dominuje trhu koncových OS, její serverová edice bude většině uživatelů nejznámější.
Unix-podobný systém. Tradiční práce v těchto systémech nepředpokládá přítomnost běžného grafického rozhraní, nabízející uživateli jako prvek ovládání pouze konzoli. Pro nezkušeného uživatele může práce v takovém formátu představovat obtíž, což je jen jedna z výzev, které představuje poměrně populární textový editor. Vim, otázka související s tímto za 6 let nabrala již více než 1,8 milionu zhlédnutí. Hlavními distribucemi (edicí) této rodiny jsou: Debian — populární distribuce, verze balíčků v něm jsou orientovány především na LTS (Long Term Support – podpora po dlouhou dobu), což se projevuje v poměrně vysoké spolehlivosti a stabilitě systému a balíčků; Ubuntu – obsahuje distribuce všech balíčků v jejich posledních verzích, což může mít vliv na stabilitu, ale umožňuje využívat funkce dodávané s novými verzemi; Red Hat Enterprise Linux – OS, která je určena pro komerční použití, je zpoplatněná, avšak zahrnuje podporu od dodavatelů softwaru, některé proprietární balíčky a balíčky ovladačů; CentOS – opensource varianta Red Hat Enterprise Linux, liší se absencí proprietárních balíčků a podpory.
Pro ty, kteří se teprve seznamují s touto oblastí, moji doporučení budou systémy Windows Server, nebo Ubuntu. Pokud zvažujeme Windows, pak je to především známost systému, Ubuntu – větší tolerance k aktualizacím, a tím méně problémů například při spuštění projektů na technologiích vyžadujících nové verze.
Takže, po určení OS, přejdeme k souboru nástrojů, které umožňují deploy (instalaci), aktualizaci a sledování stavu aplikace nebo jejích částí na serveru.
Dalším důležitým rozhodnutím bude – umístění vaší aplikace a serveru pro ni. V současné době jsou nejoblíbenějšími 3 cesty:
- Hosting (držení) serveru u sebe, samostatně – nejvíce rozpočtová varianta, ale budete potřebovat objednat od poskytovatele statický IP, aby se váš zdroj neměnil s časem.
- Pronájem Vyhrazeného Serveru (VDS) – a samostatně se věnovat jeho administraci a škálování zátěží.
- Zaplaťte (často je zde možnost bezplatného vyzkoušení funkcí platformy) předplatné na nějakém cloudovém hostingu, kde je běžný model platby za použití zdrojů. Nejvýraznějšími zástupci tohoto směru jsou: Amazon AWS (nabízí bezplatný rok používání služeb, ale s měsíčním limitem), Google Cloud (nabízí kredit 300 $ na účet, který lze utratit během roku za cloudové služby hostingu), Yandex.Облако (nabízí 4000 rublů na 2 měsíce), Microsoft Azure (nabízí bezplatný přístup k populárním službám na rok a 12 500 rublů na jakékoli služby po dobu jednoho měsíce). Takto můžete vyzkoušet kteréhokoli z těchto poskytovatelů, aniž byste utratili jedinou korunu, a přitom si udělat představu o kvalitě a úrovni poskytovaných služeb.
V závislosti na vybrané cestě se dále změní pouze fakt, na kom většinou leží odpovědnost za určitou oblast administrace. Pokud hostíte sami, musíte chápat, že veškeré problémy s elektřinou, internetem, samotným serverem, softwarem, který na něm máte nainstalovaný – to vše zcela leží na vašich bedrech. Nicméně pro učení a testování je to víc než dostačující.
Pokud však nemáte k dispozici žádný další stroj, který by mohl sloužit jako server, budete chtít využít druhou nebo třetí cestu. Druhá možnost je shodná s první, s tím rozdílem, že přesouváte odpovědnost za dostupnost serveru a jeho výkon na hostitele. Administrace serveru a softwaru stále zůstává pod vaším kontrolou.
A nakonec možnost pronájmu kapacit cloudových poskytovatelů. Zde můžete nastavit automatizovanou správu prakticky čehokoliv, aniž byste se příliš zabývali technickými detaily. Kromě toho můžete mít místo jednoho stroje několik paralelně spuštěných instancí (příkladů), které mohou například odpovídat za různé části aplikace, přičemž se cenově příliš neliší od vlastnění dedikovaného serveru. A také zde najdete nástroje pro orchestraci, kontejnerizaci, automatické nasazení, nepřetržitou integraci a mnoho dalšího! Některé z těchto věcí probereme níže.
Obecně platí, že infrastruktura serveru vypadá takto: máme takzvaného „orchestrátora“ (orchestraci – proces řízení několika instancí serverů), který spravuje změny prostředí na instanci serveru, kontejner virtualizace (volitelný, ale často používaný), který umožňuje rozdělit aplikaci na izolované logické vrstvy, a software pro kontinuální integraci – umožňující aktualizaci nahraného kódu pomocí „skriptů“.
A takže orchestraci vám umožňuje vidět stavy serverů, provádět „nasazení“ nebo „vrácení“ aktualizací prostředí serveru a tak dále. Na začátku se vás tento aspekt pravděpodobně moc netýká, protože abyste mohli něco orchestraci, musíte mít několik serverů (můžete mít i jeden, ale k čemu to je?), a aby bylo několik serverů, musíte mít potřebu. Z nástrojů v této oblasti je v ústech většinou Kubernetes, vyvinutý Google.
Další úroveň je virtualizace na úrovni OS. V současnosti se široce rozšířil pojem „dockerizace“, který vznikl z nástroje Docker, který poskytuje funkčnost izolovaných kontejnerů, které však běží v rámci jednoho operačního systému. Co to znamená: v každém z těchto kontejnerů lze spustit aplikaci nebo dokonce sadu aplikací, které se budou domnívat, že jsou jediné v celém operačním systému, aniž by tušily o existenci jiných na daném stroji. Tato funkce je velmi užitečná jak pro spuštění stejných aplikací různých verzí, tak pro konfliktní aplikace, a také pro rozdělení částí aplikace na vrstvy. Tento otisk vrstev lze poté zapsat do obrazu, který lze použít například pro nasazení aplikace. To znamená, že při instalaci tohoto obrazu a nasazení kontejnerů, které obsahuje, získáte připravené prostředí pro spuštění Vaší aplikace! Na začátku můžete tento nástroj využít jak pro seznámení se, tak pro získání skutečného prospěchu, rozčleněním logiky aplikace na různé vrstvy. Ale je třeba říci, že dockerizace není potřeba pro každého a ne vždy. Dockerizace má smysl v případech, kdy je aplikace
fragmentovanáCI – Continuous Integration). Hlavními nástroji v této oblasti jsou v současnosti Jenkins (nástroj pro CI napsaný v Javě, na začátku se může zdát poněkud složitý), Travis CI (napsaný v Ruby, subjektivně trochu snadnější Jenkins’u, nicméně i zde jsou potřebné určité znalosti v oblasti nastavení nasazení), Gitlab CI (napsaný v Ruby a Go).
Tak tedy, poté, co jsme mluvili o prostředí, ve kterém bude Vaše aplikace pracovat, je čas se konečně podívat, jaké nástroje nám moderní svět nabízí pro vytváření těchto aplikací.
Začněme se základem: Backend plánovali udělat na Linuxu. Backend interaguje s DB, načítá potřebný seznam privilegií a poté, v závislosti na tom, jaká privilegium má autorizovaný uživatel, poskytuje přístup k podepisování finančních dokumentů a jejich zasílání k realizaci, nebo generaci nějaké zprávy. (backend) – serverová část. Výběr jazyka, sady základních funkcí a předdefinované struktury (frameworku) závisí hlavně na osobních preferencích, ale přesto stojí za zmínku k úvaze (názor autora ohledně jazyků je dost subjektivní, i když má ambici na nezaujatý popis):
- Python – jazyk, který je dost přívětivý pro nezkušené uživatele, odpouští některé chyby, ale zároveň může být dost přísný na vývojáře, aby se vyhnul špatným praktikám. Už je dost vyvinutý a rozmyslený, pojmenovaný v roce 1991.
- Go – jazyk od společnosti Google, také dost přívětivý a pohodlný, dost snadno zkompilovatelný do spustitelného souboru na jakékoliv platformě. Může být jednoduchý a příjemný, ale také složitý a vážný. Je čerstvý a mladý, vešel na scénu relativně nedávno, v roce 2009.
- Rust – je o něco starší než jeho předchůdce, vydaný v roce 2006, stále dost mladý ve srovnání se svými protějšky. Je orientován na zkušenější vývojáře, i když se stále snaží vyřešit mnoho nízkoúrovňových úkolů za programátora.
- Java – veterán komerčního vývoje, který se objevil v roce 1995, je jedním z nejčastěji používaných jazyků při vývoji podnikových aplikací v současnosti. S jeho základními koncepty a složitou konfigurací prostředí pro spuštění se může pro nováčka stát dost náročným.
- ASP.net – platforma pro vývoj aplikací, kterou vydala společnost Microsoft. K napsání funkcionality se většinou používá jazyk C# (vyslovuje se Cí Šarp), který se objevil v roce 2000. Co se týče složitosti, je srovnatelný s úrovní mezi Javou a Rustem.
- PHP – původně používaný pro preprocessing HTML, v současnosti sice stále drží absolutní vedení na trhu jazyků, ale zaznamenává se trend poklesu jeho užívání. Vyniká nízkou překážkou pro vstup, jednoduchostí psaní kódu, ale zároveň při vývoji dost velkých aplikací může být jeho funkcionalita nedostatečná.
A finální část naší aplikace – nejvíce hmatatelná pro uživatele – Frontend (frontend) – je tváří vaší aplikace, právě s touto částí interaguje uživatel přímo.
Bez podrobností, moderní frontend se opírá o tři pilíře, rámce (a ne tak úplně), pro vytváření uživatelských rozhraní. Odpovídajícím způsobem jsou tři nejpopulárnější:
- ReactJS – není to rámec, ale knihovna. Vlastně se od hrdého titulu rámce liší pouze absencí některých funkcí „out of the box“ a potřebou je nainstalovat manuálně. Takže existuje několik variant „přípravy“ této knihovny, které tvoří svébytné rámy. Pro nováčka může být poněkud komplikovaný, kvůli některým základním principům a relativně agresivnímu nastavení build prostředí. Nicméně pro rychlý start můžete využít balíček „create-react-app“.
- VueJS – rámec pro vytváření uživatelských rozhraní. Z této trojice právem získává titul nejpřátelštějšího k uživateli rámce, protože pro vývoj ve Vue je vstupní práh nižší než u ostatních zmiňovaných kolegů. Kromě toho je z nich nejmladší.
- Angular – považuje se za nejtěžší z uvedených rámců, jediný vyžaduje přítomnost TypeScript (nadstavba jazyka Javascript). Často se používá pro vývoj velkých podnikových aplikací.
Shrnujíc výše uvedené, lze dospět k závěru, že nyní se nasazení aplikace radikálně liší od toho, jak tento proces probíhal dříve. Nicméně nikdo nebrání provádět „deploy“ po staru. Ale stojí ta trochu ušetřeného času na začátku za to obrovské množství překážek, na které narazí vývojář, který si tuto cestu zvolil? Myslím, že odpověď je „ne“. Když strávíte trochu více času seznámením se s těmito nástroji (a větší čas strávit nepotřebujete, protože musíte pochopit, zda jsou pro váš aktuální projekt potřeba, či nikoliv), můžete tento čas získat zpět a významně tak zkrátit například případy záhadných chyb, které závisí na prostředí a objevují se pouze na produkčním serveru, noční analýzy, co vedlo k pádu serveru a proč se nespouští, a mnohé další.
Zdroj: habr.com
