Jak si usnadňuji správu serverů a deploy webových aplikací

Správa serverů - deployment


Autor Pavel Zaněk

19. 6. 2022

V dnešním článku se podíváme, jak si usnadňuji proces nastavení serveru a jak následně řeším deploy aplikací na servery. Konkrétně se zaměříme na Ansible a Deployer. Článek je určený pro začátečníky, kteří mají zájem dozvědět se o Ansible bez odborných termínů a slov – na to již existuje mnoho jiných článků a dokumentací 🙂

Platforma pro konfigurační správu a řízení počítačů – Ansible

Jelikož jsem zastánce automatizace procesů, správu serverů řeším pomocí open-source nástroje Ansible. Ten mi poskytuje možnost konfigurovat server(y) pomocí mnou definovaných úkolů/úloh.

Představte si – máte základní znalosti v oblasti správy serverů, a přesto si například chcete vydat svoji webovou aplikaci, kterou momentálně máte v lokálním prostředí. Pro běh webové aplikace nejspíše používáte Apache nebo Nginx. Dále pak určitě používáte mnoho dalších nástrojů, balíčků, instalátorů, atd – například PHP, MySQL, Redis, Npm, Composer, atd.

Tak si zakoupíte vlastní server a jdete nastavovat dle různých návodů. Například si nejdříve řeknete, že nainstalujete Nginx, PHP, MySQL, … Posléze nahrajete Vaší aplikaci z lokálního prostředí na server. Pak Vás třeba napadne, že jste neřešili zabezpečení a jdete tedy dále hledat vhodná řešení. A tak dále, dokud si nemyslíte, že by vše mohlo být hotovo.

Tento proces Vám však bude chvíli trvat, navíc když se teprve začínáte seznamovat se samotným serverem. A teď si představte, že po nějaké době se rozhodnete vydat další webovou aplikaci. Opět budete muset procházet návody, abyste na nic nezapomněli (ti chytřejší si možná už v první iteraci raději dělali seznam, jak si server postupně konfigurovali). Tak i tak se nejedná o ideální řešení, jak si spravovat servery, které mohou postupně v čase přibývat.

Playbook

Playbook je ve stručnosti sada úkolů, kterou chcete provést na serveru. Já bych spíše playbook přirovnal k programu (spustitelného z příkazové řádky), který po správném nakonfigurování dává ohromnou sílu konfigurovat servery bez toho, aniž bych na něco zapomněl. Určitě Vám nebudou dělat problém snadno čitelné šablony YAML. Takže nepotřebujete znát nějaký pokročilý programovací jazyk.

Pojďme se například podívat, jak může vypadat instalace Nginx na serveru, resp. příklad prvních úkolů.

Ukázka úkolů při instalaci Nginx v rámci Ansible
Ukázka úkolů při instalaci Nginx v rámci Ansible

Jelikož si úkoly postupně škálujete dle svých potřeb a máte je v jedné formě, můžete tyto úkoly aplikovat napříč všemi Vašimi servery (mezi Ansiblem a Vašimi servery funguje SSH připojení). Samozřejmě si můžete nakonfigurovat/naprogramovat výjimky, aby nebyly servery zcela stejné (například odlišné verze PHP; MySQL vs MariaDB, apod.).

V praxi to znamená to, že po zakoupení serveru a nakonfigurování jej v Ansible playbooku, mohu daný playbook spustit, jít na kávu a po příchodu je již server připravený pro webovou aplikaci. Může se například jednat o virtuální server (VPS) s OS Ubuntu 20.04, který jsem si v poslední době oblíbil 🙂

Efektivní správa serverů

A proč je to vlastně lepší řešit takto? Ono jakákoliv automatizovaná cesta je lepší než provádět správu serverů manuálně. Může se stát, že na něco zapomenete. Díky playbooku aplikujete změnu napříč požadovanými servery s ohromnou úsporou času. Je to jako kdyby jste danou věc provedli na jednom serveru a změnu pak „automatizovaně překopírovali na ostatní servery“. Vše zabezpečenou cestou (pokud tedy používáte SSH pro připojení se k serverům).

A pozor! Nemusí se jednat pouze o profesionální servery. Osobně Ansible používám i pro osobní projekty – například mini domácí server postavený na Rasberry či Nvidia Jetson Nano.

Ukázka úkolů, které používám ve většině Ansible Playbooks

  • Instalace Nginx (včetně následného nakonfigurování – například zabezpečení, NTP, …)
  • Instalace MySQL/MariaDB
  • Instalace Deployeru (https://deployer.org/)
  • Instalace PHP (verze dle připojeného hosta) včetně výběru knihoven
  • Instalace Composer
  • Instalace Npm
  • Generování HTTPs certifikátů pomocí Cloudflare
  • Instalace Redis
  • Konfigurace supervizorů

Ukázka příkazů

Seznam hostů

ansible-inventory -i inventory --list

Zašiforvání/defišovrání vaultu

ansible-vault encrypt nazev-souboru.yaml
---
ansible-vault decrypt nazev-souboru.yaml

Příklad spuštění ansible

ansible-playbook -i inventory smart.yaml

Příklad spuštění ansible (omezení na konkrétního hosta)

ansible-playbook -i inventory smart.yaml --limit vps.pavelzanek.com

Příklad spuštění konkrétního úkolu (ukázka pro Restic)

ansible-playbook -i inventory smart.yaml -t restic --limit forpsi.sendcg.com

Deployer

Deployer je nástroj pro nasazování Vašeho kódu. Je napsaný v PHP a má podporu u mnoha oblíbených a používaných frameworků na světě.

Pokud tedy zvažujete, jak nasazovat Váš kód na servery, Deployer je jedna z mnoha možností. Díky tomuto nástroji si nebudete lámat hlavu nad deployem Vašich aplikací a ušetříte opět mnoho času. Kromě deploye samotných aplikací Vám navíc Deployer pomůže v mnoha dalších krocích, aby Vaše aplikace byla optimalizovaná (i například v průběhu deploye – například zero downtime).

Jak Deployer může pomoci?

Jak již bylo zmíněno, Deployer se stará o nasazování Vašeho kódu. Kromě toho však obsahuje několik dalších možností, které Vám pomohou:

  • Automatické zřízení serveru
    Deployer Vám pomůže nakonfigurovat Váš server, nastaví firewall, nainstaluje PHP a MySQL, nakonfiguruje SSL atd.
  • Zero Downtime deploy
    Vaši návštěvníci ani nepoznají, že by se zrovna aktualizovala verze aplikace na Vašem serveru. Nejenom, že se deploy provádí „odděleně“, ale pokud nastane problém, aplikace se vrátí do předchozí funkční verze.
  • „Receptář prima frameworků“
    Deployer obsahuje sadu předpřipravených receptů pro většinu oblíbených frameworků a aplikací. Díky tomu opět můžete ošetřit čas a začít využívat profesionálnější řešení.

Tip

Jelikož používám pro verzování kódu Gitlab, mohu doporučit nastavit deploy podle webhooků. Po správném nakonfigurování posléze stačí Váš kód z lokálu pushnout do Gitlabu, vyšle se webhook dle nastavení směrem na server (zabezpečený) a Deployer na serveru se už o vše postará (například umístí na správnou doménu/subdoménu, nakonfiguruje danou aplikaci (např. doplní hesla z vaultu), apod.)

Shrnutí

Pokud vyvíjíte webové aplikace a řešíte jak správu Vašeho serveru, tak následný deployment aplikací, rozhodně doporučuji vyzkoušet i tuto metodu. Kdo ještě provádí nastavování serverů a deployment aplikací manuálně, doporučuji hned přejít na nějakou automatizovanou metodu (a nemusí se jednat o zmíněnou kombinaci v tomto článku).

Další články

Psaní příspěvků ve WordPress

Psaní příspěvků ve WordPress

V dnešním článku se podíváme na vše potřebné pro tvorbu/psaní článků v redakčním systému WordPress. Konkrétně si...

Autor Pavel Zaněk

Tvořím webové stránky s velkou oblibou v online marketingu - především v odvětví optimalizace pro vyhledávače (SEO). Především se specializuji na tvorbu webových aplikací na míru (PHP framework Laravel s využitím dalších moderních technologií) a na tvorbu webových stránek s použitím redakčního systému Wordpress. Ačkoliv se více zaměřuji na logiku webových aplikací (back end), jsem schopný tvořit i moderní a responzivní šablony v rámci webové grafiky (front end).

19. 6. 2022

0 komentářů

Přidat komentář

Vaše e-mailová adresa nebude zveřejněna.