Obsah článku
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ů.
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).