V posledních letech se možnosti nasazení a správy aplikací v cloudu rozšířily o celou řadu serverless řešení, která se stávají čím dál populárnějšími, zejména pro aplikace, jež se potřebují rychle přizpůsobovat změnám zátěže a kde je požadováno co nejjednodušší nasazení a škálování. S těmito technologiemi uživatelé přestávají být zodpovědní za správu infrastruktury, což významně zjednodušuje celý proces vývoje a nasazení aplikací.
Serverless modely cloudových poskytovatelů poskytují prostředí pro běh kontejnerů, které zahrnují podporu Kubernetes a automatické škálování. Hlavní výhodou tohoto přístupu je, že poskytovatel cloudu spravuje runtime prostředí a zabezpečuje provoz, zatímco uživatel je odpovědný pouze za samotný kontejner. Na rozdíl od tradičních řešení, kde se vyžaduje správa serverů a orchestrátorů, serverless model umožňuje vývojářům soustředit se pouze na jejich aplikace.
Cloudoví poskytovatelé, jako Amazon Web Services (AWS), Google Cloud a Microsoft Azure, nabízejí různé serverless služby, které se liší svými schopnostmi a funkcemi. Mezi nejoblíbenější možnosti patří:
-
AWS Fargate je serverless výpočetní engine, který umožňuje běh kontejnerů bez nutnosti správy serverů nebo clusterů. Integruje se s Elastic Container Service (ECS) a Elastic Kubernetes Service (EKS).
-
Google Cloud Run je plně spravovaná serverless platforma pro stateless kontejnerizované aplikace. Automaticky se škáluje a účtuje na základě počtu požadavků.
-
Azure Container Instances umožňuje běh jednotlivých kontejnerů bez nutnosti využívat složitější orchestrátory. Účtuje se na základě sekundového fakturace.
Tyto možnosti jsou velmi jednoduché na použití, ale nabízejí omezenou možnost přizpůsobení. Serverless možnosti jsou ideální pro aplikace, které nevyžadují velkou míru customizace a kde je důležitá jednoduchost a flexibilita.
Na druhé straně, možností, jak získat větší kontrolu nad infrastrukturními prvky a konfigurací aplikací, je použití spravovaných Kubernetes služeb, jakými jsou:
-
Amazon ECS nabízí vysoce škálovatelné řízení Docker kontejnerů přes cluster instancí EC2. Integruje se s ostatními AWS službami.
-
Google Kubernetes Engine (GKE) poskytuje spravované prostředí Kubernetes běžící na Google Cloudu.
-
Azure Kubernetes Service (AKS) je plně spravovaná Kubernetes služba na Azure, která zjednodušuje nasazení a správu kontejnerů.
Kubernetes verze těchto služeb poskytují větší kontrolu nad konfigurací a umožňují běh stateful aplikací, což může být nezbytné pro složitější systémy. Ovšem vyžaduje to manuální škálování a správu infrastruktury.
Zatímco serverless možnosti jsou snadněji použitelné, ale méně flexibilní, spravované Kubernetes verze nabízejí větší kontrolu a přizpůsobení, ale jsou složitější na správu a vyžadují odborné znalosti v oblasti DevOps. Výběr mezi těmito možnostmi závisí na konkrétních potřebách aplikace, jestli se hodí pro serverless model, nebo jestli je zapotřebí plná kontrola nad infrastrukturou.
Pokud jde o kontinuitu nasazení (Continuous Deployment, CD), proces nasazení kódu do produkce je stále sofistikovanější. Tento přístup zajišťuje, že změny kódu, které projdou testovacím procesem, mohou být automaticky nasazeny do cílového prostředí. V praxi to však často znamená, že kód je nasazen nejprve do vývojového nebo testovacího prostředí, přičemž se používá gated přístup, kdy změny procházejí několika fázemi (test, staging) předtím, než se dostanou do produkce.
Pro implementaci CD se často používají nástroje jako CircleCI, které umožňují zautomatizovat nasazení aplikací na různá prostředí, jako jsou Google Cloud Run, Docker Hub, Heroku nebo AWS ECS. Tento proces zahrnuje několik kroků, jako je konfigurace CLI nástrojů pro konkrétní prostředí, autentifikace pomocí přístupových klíčů a konečně samotné nasazení kontejneru.
Pokud se rozhodnete pro implementaci CI/CD, mějte na paměti, že kromě samotného nasazení a škálování aplikací je kladeno důraz na správu konfigurací a testování, které musí být součástí celého procesu. To znamená, že ačkoliv serverless možnosti mohou výrazně zjednodušit proces nasazení, nároky na monitoring, správu a testování infrastruktury zůstávají klíčové pro zajištění kvalitního provozu aplikace.
Jak vytvořit aplikaci s router-first přístupem v Angularu
Při vytváření aplikace v Angularu, která má využívat modularitu a router-first přístup, se setkáváme s několika klíčovými kroky, které nám pomohou správně nastavit projekt a strukturu aplikace. Tento přístup, který je zaměřen na co nejrychlejší zapojení routování do aplikace, nám umožňuje efektivněji spravovat různé části aplikace a usnadňuje práci při rozšiřování funkcionality o nové moduly.
Prvním krokem je vytvoření nové aplikace, kde je routování již přednastaveno. Můžeme to udělat pomocí následujícího příkazu:
Po spuštění tohoto příkazu je pro nás automaticky vytvořen soubor app.routes.ts, který bude obsahovat definice rout. Tento soubor je základní jednotkou pro definování všech navigačních cest v aplikaci. V souboru src/app/app.routes.ts si takto připravíme počáteční strukturu:
Dále je důležité správně nakonfigurovat poskytovatele routování v souboru app.config.ts, kde využíváme ApplicationConfig a provideRouter, což nám umožní aplikaci spustit s požadovanými routami:
Následně se tato konfigurace spotřebuje v souboru main.ts při spouštění aplikace pomocí metody bootstrapApplication, která zajišťuje inicializaci a start aplikace:
Tento postup nám umožní mít připravenou aplikaci, která již obsahuje základní routování a je schopná dále fungovat s přidanými moduly a komponentami. Aplikaci spustíme pomocí příkazu:
Tímto způsobem máme nastavenu základní strukturu aplikace s routováním. Tento router-first přístup je klíčový pro efektivní vývoj větších aplikací, kde routování musí být přítomné co nejdříve, což nám umožní přidávat funkce modulárně a dynamicky.
Pokud jde o konfiguraci nástrojů pro vývoj, použijeme nástroj mrm, který nám pomůže synchronizovat konfigurace mezi různými soubory. Pro základní nastavení doporučujeme následující příkazy, které mohou pomoci při nastavení vývojového prostředí:
-
Aplikace konfigurace pro VS Code:
-
Nastavení npm skriptů pro Docker:
-
Nastavení skriptu pro produkční build aplikace:
Tato nastavení nám pomohou zajistit konzistentní vývojové prostředí, které bude fungovat nejen v případě použití VS Code, ale i v jiných editorech jako WebStorm.
Dále je třeba se zaměřit na konfiguraci Angular Material a stylů. Před několika lety bylo běžnou praxí aplikovat CSS reset nebo normalize soubory, aby bylo možné lépe pracovat s rozdíly v renderování prohlížečů. Dnes však většina moderních prohlížečů věrně dodržuje CSS specifikace, což znamená, že reset soubor již není nutností. V našem projektu použijeme pouze jednoduchý styles.scss, který definuje základní stylování, včetně resetu parametrů jako je margin: 0 a height: 100% pro html a body.
Pokud jde o Angular Material, nainstalujeme jej pomocí příkazu:
Vybereme možnost "Custom", odpovíme "No" na globální typografii a "Yes" na animace prohlížeče. Dále přidáme balíček @ngbracket/ngx-layout, který nám umožní efektivněji pracovat s flexibilním layoutem.
Pro každou komponentu, která potřebuje Angular Material nebo FlexLayout, musíme importovat potřebné moduly do jednotlivých komponent. Tímto způsobem zajistíme, že potřebné knihovny budou použity jen tam, kde jsou potřeba.
Na závěr je důležité definovat uživatelské role pro aplikaci. Při návrhu aplikace LemonMart jsme se rozhodli definovat čtyři základní role uživatelů:
-
Autentizovaný uživatel - má přístup k profilu.
-
Pokladník - má na starost odbavení zákazníků.
-
Skladník - má na starost správu inventáře.
-
Manažer - může vykonávat všechny funkce pokladníka a skladníka, ale má také přístup k administrativním funkcím.
Tento přístup nám umožňuje rozdělit aplikaci na jednotlivé moduly a funkce podle specifických potřeb různých uživatelů.
Pro správnou funkčnost a efektivitu vývoje aplikace je nutné nejen správně naplánovat architekturu a rozdělení rolí, ale také se zaměřit na modularitu a přehlednost kódu. Modularita aplikace zajistí, že jednotlivé komponenty mohou být snadno upravovány a rozšiřovány bez zásahů do zbytku systému.
Jak bezpečně pracovat s REST a GraphQL API v Node.js
V moderním vývoji webových aplikací se setkáváme s mnoha výzvami, jak správně a bezpečně navrhnout API. Práce s REST a GraphQL API si žádá nejen dobrou znalost technologie, ale i hluboké pochopení bezpečnostních principů. V této kapitole se podíváme na některé klíčové koncepty, jak efektivně pracovat s Express serverem, připojit se k databázi MongoDB a implementovat autentifikaci uživatelů pomocí JSON Web Token (JWT).
Představme si scénář, kdy máme API, které přijímá POST požadavky pro vytvoření nového uživatele. Tento proces zahrnuje ověření dat, jejich uložení do databáze a odpověď na požadavek. V kódu, který je uveden, se data uživatele přijímají v těle požadavku a jsou následně předávána do funkce createNewUser(). Pokud je uživatel úspěšně vytvořen, API odpoví s objektem uživatele, jinak vrátí chybu 400 a zprávu o neúspěchu. Tato logika je jednoduchá, ale závažnou roli zde hraje bezpečnostní aspekt: jak správně nakládat s parametry požadavku, aby nedošlo k jejich zneužití. I když se v kódu používá vývojová vlastnost TypeScriptu pro komfort při práci s daty (například req.body je typováno jako IUser), v běhovém čase může být tento objekt libovolný. To znamená, že nikdy nelze předpokládat, že všechna přijatá data jsou bezpečná a validní.
Nedbalé zpracování požadavků je jedním z hlavních způsobů, jak může být kód zneužit, například k provedení SQL injection, nebo jiných formách útoků. Pro bezpečnost je tedy klíčové důkladně validovat všechna vstupní data a zamezit tak potenciálnímu zneužití API.
Další klíčovou komponentou je správné napojení na databázi. Pro tento účel je možné využít DocumentTS, což je ODM (Object Document Mapper) knihovna pro MongoDB. Tato knihovna funguje jako vrstva pro snadnější práci s dokumenty v MongoDB. Stejně jako ORM pro relační databáze, ODM pro dokumentové databáze zjednodušuje práci s datovými modely a umožňuje definici výpočtů, jako například generování celé jméno uživatele v odpovědi na požadavek.
Pokud se rozhodnete použít DocumentTS, měli byste být obeznámeni s MongoDB Node.js ovladačem, který je základem pro všechny operace s databází. Tento ovladač, podporovaný přímo tvůrci MongoDB, zaručuje nejlepší výkon a kompatibilitu s novými verzemi MongoDB, zatímco třetí strany často zaostávají v podpoře nových funkcí. Když používáte metodu getDbInstance pro přístup k ovladači, dostanete přímý přístup k nativnímu ovladači MongoDB.
Důležitou součástí moderní aplikace je i bezpečná autentifikace uživatelů. K tomu nám poslouží JWT (JSON Web Token). Tento standard se používá pro bezpečnou výměnu informací mezi klientem a serverem a umožňuje ověřit identitu uživatele bez nutnosti uchovávat jeho přihlašovací údaje na serveru. Pro implementaci JWT autentifikace je zapotřebí několik knihoven: jsonwebtoken pro generování a ověřování tokenů, bcryptjs pro bezpečné šifrování a porovnávání hesel, a uuid pro generování unikátních identifikátorů.
Při práci s hesly je klíčové nikdy neukládat hesla v nešifrované podobě. V tomto scénáři používáme metody bcrypt pro hashování a "solení" hesel. Hashování je jednosměrná šifra, která nám umožňuje porovnávat uživatelské heslo bez nutnosti znát jeho původní hodnotu. Tímto způsobem jsou hesla chráněna i v případě, že by útočník získal přístup k databázi.
Implementace JWT je rozdělená do několika částí: při úspěšném přihlášení se vytvoří přístupový token, který je následně odeslán klientovi. Tento token slouží k ověření každého následného požadavku. Middleware authenticate je zodpovědný za ověřování platnosti tokenu a kontrolu uživatelských rolí. Pokud například vyžadujeme, aby pouze administrátoři mohli přistupovat k určitému endpointu, middleware zajišťuje, že požadavek bude zamítnut, pokud uživatel nemá odpovídající roli.
V praxi to znamená, že autentifikace je klíčovým prvkem každé bezpečné API. Middleware, který ověřuje JWT, je první bariérou, která chrání aplikaci před neoprávněným přístupem. Stejně tak je možné kombinovat různé kontrolní mechanismy: například umožnit uživateli aktualizovat pouze vlastní data, zatímco manažer může měnit data všech uživatelů. Tato flexibilita je důležitá pro komplexní systémy, které vyžadují rozdílné úrovně přístupu.
Pokud chcete, aby vaše API bylo opravdu bezpečné, je nezbytné věnovat pozornost každému detailu – od validace vstupních dat až po správné nastavení autentifikace a autorizace uživatelů. Chybějící validace nebo slabá autentifikace mohou být vážnými bezpečnostními dírami.
Optimalizace výkonu v Angularu: Výpočty a správa formulářů
Při práci s Angular aplikacemi
Problém nedůvěry v média a jeho důsledky pro novinařinu
Jaké jsou možnosti a principy zelené syntézy ZnO nanopartiklí za použití rostlinných extraktů?
Jak efektivně komunikovat mezi fragmenty v Android aplikaci?
Jak a proč používat ukazatele v jazyce C?
Jak se vytvářejí imunitní komplexy při glomerulonefritidě?

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский