
\chapter{Teoretická část}\label{subsec:TeoretickáČást}

V této kapitole je popsán konfigurační management a jeho historie. Dále jsou zde informace o vybraných nástrojích konfiguračního managementu a také o redakčním systému Wordpress.

\section{Konfigurační management}\label{sec:KonfiguračníManagement}
Konfigurační management je velice rozsáhlá oblast IT managementu. Hlavním cílem je co nejvíce usnadnit a automatizovat procesy nasazování, sledování i aktualizace nových hardwarových či softwarových řešení pro celou společnost.\cite{confManagement}\cite{cloudComputing} Konfigurační management je jednou ze součástí ITIL, který se zabývá podporou IT oblasti v organizaci. ITIL (Information Technology Infrastructure Library) je soubor praxí pro plánování a využívání informačních technologií nejen ze strany dodavatelů IT služeb ale i zákazníků.\cite{cmITIL}
\\[12pt]Konfigurační management se zabývá:
\begin{enumerate}
\item Sledováním, řízením, aktualizací systémových a hardwarových prostředků všech prvků sítě společnosti.
\item Řízením vývoje komplexních aplikací, aby nepřetěžovaly hardware ani software a přitom si udržely svoji použitelnost i rychlost.
\item Nasazením aplikací a jejich nastavení na více nebo všechny prvky bez problémů s ohledem na zachování funkčnosti.
\end{enumerate}

Konfigurační management se také dělí podle částí, které sleduje a udržuje. Hlavní části jsou software management a hardware management.\cite{cmSWvsHW}
\begin{itemize}
\item Software management se zabývá vývojem a správou operačních systémů, aplikací, konfigurací i dat pro celou společnost.
\item Hardware management se zabývá hlavně plánováním a nasazením fyzických prostředků pro správný chod softwaru a celé sítě společnosti.
\end{itemize}
Postup konfiguračního managementu:
\begin{figure}[h!]
    \begin{centering}
        \includegraphics[width=0.6\textwidth]{img/configmgtv2}
    \par\end{centering}
    \caption{KM – proces konfiguračního managementu (zdroj: \cite{CMPic} )\label{fig:configmgtv2}}
\end{figure}

\subsection{Historie Konfiguračního managementu}\label{subsec:HistorieKM}
Termín konfigurační management a s ním spojená technická disciplína se začal objevovat na konci 60. let. Vznikl díky Americkému Ministerstvu Obrany (DoD), a to když se hardware standardy začaly používat nově na software. Dříve se totiž využívalo jen hardware standardů. V 70. letech vznikly vojenské standardy, zabývající se konfiguračním managementem, zvané „480 series“, které byly v 1991 spojeny do jednoho vojenského standardu MIL–STD–973.

V této době již konfigurační management není pouhou součástí vojenského standardu. Díky tomu vzniklo mnoho termínů s ním spojených, například: product lifecycle, systems engeneering nebo integrated logistics system.

Zajímavý je product lifecycle, který je jeden z nejvyužívanějších v konfiguračním managementu. Zabývá se zpracováním celé životnosti produktu od jeho návrhu, výroby, prodeje až po jeho likvidaci. Poskytuje kompletní informace o celém životním cyklu jako potřebné materiály na výrobu, personál a další důležitá data.\cite{cmBook}

\subsection{Software management}\label{subsec:SoftwareManagement}
Pod pojmem software se dá představit, například: operační systém, aplikace nebo data. Hlavním rozdílem softwaru je, že je vytvořen tak, aby se dal lehce nahradit pomocí aktualizace nebo záměnou za jiný. Nedá se nijak masově vyrábět jako hardware a díky tomu je práce na software náročnější na množství lidí než je tomu u hardware. Proto mohou být velké rozdíly v cenách softwarových aplikací, podle toho kolik lidí na nich pracovalo.\cite{cmSoftware}\cite{cmSWvsHW}
\\[12pt]Další rozdíly od hardware managementu:
\begin{enumerate}
\item Náročnější na testování – aplikace jsou většinou tvořeny z různých funkcí (částí) a otestovat se musí každá znich. Testování se provádí, jak při nasazení, tak i během vývoje, aby se daly chyby odladit ještě před nasazením. Oproti hardware, který se testuje jako celek, pokud pracují všechny jeho části, tak se testování ukončí.
\item Provádění oprav – když u softwarové aplikace nefunguje jistá funce, musí se celá aplikace prověřit a upravit nejen porouchaná funkce, ale i ostatní. Protože funkce jsou na sobě závislé a využívají kód jiných funkcí. Tak je to i u hardware, ale u toho se vymění poškozená součást a vše by mělo fungovat v pořádku.
\end{enumerate}
Jednotlivé části:
\begin{itemize}
\item Sledování a aktualizace systémů - pomocí sledování se určuje, které systémy jsou nejnáročnější na údržbu, jaké potřebují vylepšit a jestli by mohly způsobit problémy. Při aktualizaci je třeba si dávat pozor na to, že v průběhu nebo po nasazení aktualizace může vzniknout chyba, a proto je třeba mít předešlé systémy zálohované pro rychlé obnovení provozu.
\item Vývoj komplexních aplikací - při vytváření softwaru se spoléhá na komunikaci všech prvků společnosti od vůdců firmy, programátorů až po testery a uživatele aplikací. Když komunikace není správně vyřešena, může docházet k problémům, jako je odchylka od hlavního cíle nebo velká náročnosti na hardwarové prostředky.
\item Nasazení nových aplikací - díky softwarovému managementu se nasazují aplikace na vybrané nebo všechny části sítě, což ušetří mnoho času. Pomocí sledování softwarových prostředků také testuje jejich náročnost a v mnoha případech se musí stáhnout z živého provozu, aktualizovat nebo vypnout. Znovu se pak musí dát pozor na možnost vzniku chyb.
\end{itemize}

\subsection{Hardware management}\label{subsec:HardwareManagement}
Hardware se zabývá servery, koncovými počítači, sítěmi a jejich komponenty. Jde nejen o vytvoření a udržování hardwarových prostředků, ale také, jak budou servery zaměřeny. Některé mohou podporovat webové aplikace, a proto potřebují výkonější sítové prostředky. Na jiných serverech budou zálohy, tak musí obsahovat větší diskový prostor a na dalších mohou běžet náročné výpočtové aplikace, takže mají vyšší paměť a výpočetní rychlost.

Hardware management jako takový se hlavně zabývá plánováním a nasazením hardware prostředků tak, aby celková struktura pracovala co nejrychleji a nejspolehlivěji.\cite{cmSWvsHW} Je také součástí softwaru pro vytváření cloudů, jako je například OpenStack. Jeho hlavní součástí je správa hardwarových zdrojů a jejich využití.

\subsection{Information Technology Infrastructure Library (ITIL)}\label{subsec:ITIL}
Tento rámec vznikl během 80. let ve Velké Británii. Slouží jako standard řízení a správy IT služeb v organizaci. Zaměřuje se také na jejich neustálé zlepšování a sledování, jak z pohledu společnosti, tak i zákazníka. ITIL není normou, ale souborem doporučení a nejlepších postupů.\cite{cmITILv3}\cite{cmITIL}
\\[12pt]Hlavní rysy ITIL:
\begin{enumerate}
\item Nezávislost na platformě
\item Jednoznačná terminologie – aby se zabránilo nedorozuměním kvůli využití jednoho termínu ve více významech.
\item Proces řízení – tento proces je sled činností pro změnu vstupu na výstup, je také monitorován, měřen, vyhodnocován a vylepšován.
\end{enumerate}

\section{Použitý software konfiguračního managementu}\label{subsec:ProgramyKM}
Softwarových aplikací pro konfigurační management je nespočet. Většina z nich je zadarmo a open source. Open source je možnost stažení zdrojového kódu a jeho úpravy pro vlastní potřeby.

Jedna z nejdůležitějších informací o těchto aplikacích je jaké podporují možnosti zabezpečení a platformy. Další důležitá informace je, v jakém jazyce jsou napsané a jaký princip komunikace využívají. Některé nástroje využívají strukturu master/minion, při které probíhá komunikace většinou mezi ovládajícím strojem a ovládaným. Jiné nástroje zase mohou používat komunikaci se všemy stroji v síti. \cite{cmProgram}
\pagebreak
\\[12pt]Jsou tři hlavní části zabezpečení, kde první dvě jsou podporovány skoro ve všech programech:
\begin{enumerate}
\item Oboustranná autentifikace – klient ověřuje server a server ověří klienta.
\item Šifrování - zajišťuje aby se data po síti neposílala v textové podobě.
\item Ověřovací mód (Verify mode).
\end{enumerate}
\begin{table}[h]
\caption{Programy KM – zabezpečení (zdroje: \cite{AnsibleDocs},\cite{PuppetDocs},\cite{SaltStackDocs},\cite{PuppetDocs},\cite{QuattorDocs},\cite{SmartFrog},\cite{Staf})}
\begin{center}
    \begin{tabular}{| l | p{2.5cm} | p{2.5cm} | l | p{1.8cm} | p{1.5cm} |}
    \hline
    & Programovací jazyk & Oboustranná autentifikace & Šifrování & Ověřovací mód & První vydání \\ \hline
    Ansible & Python & Ano & Ano & Ano  & 2012 \\ \hline
    Puppet & Ruby & Ano & Ano & Ano & 2005 \\ \hline
    Salt & Python & Ano & Ano & Ano & 2011 \\ \hline
    Quattor & Perl, Python & Ano & Ano & Ne & 2005 \\ \hline
    SmartFrog & Java & Ano & Ano & Ne & 2004 \\ \hline
    STAF & C++ & Ne & Částečně & Ne & 1998 \\ \hline
    \end{tabular}
\end{center}
\end{table}
Další programy, které podporují všechna zabezpečení jsou – CFEngine, Chef, Bcfg2 , Rundeck, Synctool.

\begin{table}[!htb]
\caption{Programy KM – podpora platforem (zdroje: \cite{AnsibleDocs},\cite{PuppetDocs},\cite{SaltStackDocs},\cite{PuppetDocs},\cite{QuattorDocs},\cite{SmartFrog},\cite{Staf})}
\begin{center}
    \begin{tabular}{| l | l | l | l | l | l | l | l |}
    \hline
     & AIX & HP-UX & Linux & Mac OS X & Solaris & Windows & Další \\ \hline
    Ansible & Ano & Ano & Ano & Ano & Ano & Ano & Ne \\ \hline
    Puppet & Ano & Ano & Ano & Částečně & Ano & Ano & Ano \\ \hline
    Salt & Ne & Ne & Ano & Ano & Ano & Ano & Částečně \\ \hline
    Quattor & Ne & Ne & Ano & Částečně & Ano & Ne & Ne \\ \hline
    SmartFrog & Ne & Ano & Ano & Ano & Ano & Ano & Ne \\ \hline
    STAF & Ano & Ano & Ano & Ano & Ano & Ano & Ano \\ \hline
    \end{tabular}
\end{center}
\end{table}
Při výběru správného programu je vhodné dávat pozor na typ komunikace a jaké platformy podporuje. Většina podporuje všechny hlavní platformy jako Linux, Windows, Mac OS X nebo Solaris alespoň částečně.

{\bf V této práci jsou použity programy Puppet, Ansible a Salt, protože jsou v dnešní době jedny z nejrozšířenějších.}

\subsection{Salt}\label{subsec:Salt}
Salt, jinak známý jako SaltStack, je také jeden z novějších aplikací na konfigurační management s první stabilní verzí z roku 2011. Tento program vznikl z programů na rychlý sběr a zpracování dat v administrativním prostředí. SaltStack umí také pracovat v cloudu a umožňuje vytvořit privátní cloud nebo automatizovat virtuální servery.\cite{SaltStackStart}

Jeho hlavní zaměření je na modulovost, rozšířitelnost, jednoduchost a hlavně rychlost. Moduly jsou vytvářeny v jazyce Python a dají se oddělit od Saltu. Díky tomu si administrátor může program upravit přesně, jak potřebuje. Hlavním cílem je také jednoduché propojení s různými druhy jiných aplikací.

Salt je založený na architektuře master/minion, kde master ovládá své miniony. Minioni mají za úkol zpracovávat příkazy a posílat odpovědi na mastera. Tato komunikace je velice rychlá, protože Salt využívá pro ukládání dat jednoduché soubory a RAM pamět místo databáze.\cite{SaltStackVideo}
\\[12pt]Základní typy modulů \cite{SaltStackModules}:
\begin{itemize}
\item Execution – tyto moduly jsou hlavním jádrem Salt, obsahující cross platformní informace, aby se Salt mohl používat pro více platforem.
\item State – části, které tvoří kostru a spouští jednotlivé moduly Saltu, které musí být spuštěny. Nastavují konfiguraci na klientovi.
\item Grains – hledají statické informace o systému a ukládají je do RAM paměti pro rychlé využití.
\item Returners – zachytávají odpovědi na úpravy z klientů, schromaždují je a zpracovávají.
\end{itemize}
Dokumentace pro SaltStack je hlavně v textové podobě na webových stránkách. Pro naučení, natrénování programu je možné využít týmové kurzy nebo kurzy v určitých zeměpisných oblastech (nejvíce v USA). Je zde také možnost zapsat se na certifikaci na SaltStack Inženýra. Firmy, které využívají Salt, jsou například: Apple, U.S. Department of Defence,  Harvard University, LindedIn a další.\cite{SaltStack}\cite{SaltStackDocs}
\pagebreak
\begin{figure}[h]
    \begin{centering}
        \includegraphics[width=0.6\textwidth]{img/diagram-basic1v2}
    \par\end{centering}
    \caption{Salt – master/minion (zdroj: \cite{SaltStackModules} )\label{fig:diagram-basic1v2}}
\end{figure}

Díky tomu, že Salt funguje na principu master/minion je nezávislný na platformě.

\subsection{Ansible}\label{subsec:Ansible}
Ansible je také poměrně nový software konfiguračního management. Celý tento program se zakládá na jednoduchosti použití už od první verze z roku 2012. Hlavním cílem je, aby se administrátor po čase nepoužívání nemusel znovu učit, jak se s touto aplikací pracuje.

Ansible je založen na způsobu zpracování malých programů (Ansible Modules), které jsou napsány tak, aby se klient dostal do požadovaného stavu. Ansible tyto programy spustí nejčastěji pomocí SSH a po dokončení programu je smaže. Aplikace nevyžaduje žádné servery nebo databáze.\cite{AnsibleWhatIs}\cite{Ansible}
\\[12pt]Základní body Ansible:
\begin{itemize}
\item SSH – Ansible je zaměřen na bezpečnost, podporuje hesla a další způsoby přihlášení, ale jako hlavní se využívá SSH autentifikace.
\item Textové soubory – pro zvýšení jednoduchosti při nastavování klienta pracuje s jednoduchými textovými soubory, stejně jako například webové servery s html, php nebo css soubory.
\end{itemize}
Ansible jako takový podporuje možnost vlastních rozšíření, kde má každý možnost takové rozšíření vytvořit. Navíc u nich nezáleží v jaké jazyce jsou napsány. Jedinné co programovací jazyk musí umožnovat je vracet data kódované jako JSON.
\begin{figure}[h!]
    \begin{centering}
        \includegraphics[width=0.7\textwidth]{img/ansible-deployment-workflowv2}
    \par\end{centering}
    \caption{Ansible – workflow nasazení plabooku (zdroj: \cite{AnsiblePic} )\label{fig:ansible-deployment-workflowv2}}
\end{figure}
\pagebreak

Obrázek popisuje, jakým způsobem probíhá nasazení určitého playbooku na miniona pomocí nástroje Ansible. S využitím host souboru, ve kterém je IP adresa ovládaného stroje, je zajištěna komunikace. Ansible poté spustí playbook na ovládaném stroji a po dokončení playbook ze stroje smaže a ukončí spojení.

Ansible dokumentace se hlavně zaměřuje na internetově šířené textové dokumenty a videa. Některé firmy které využívají Ansible - Twitter, Electronic Arts, GoPro nebo Motorola. \cite{Ansible}\cite{AnsibleDocs}

\subsection{Puppet}\label{subsec:Puppet}
Puppet je open source program, který je vyvíjen společností Puppet labs od roku 2005. Puppet nahrazuje psaní kódů na jedno použití i další manuální práce pro systémového administrátora a zároveň zajišťuje konzistenci přes celou infrastrukturu.

Existuje i placené rozšíření Puppet Enterprise. Tato edice je rozdělena na tzv. node. Každý z nich má svojí vlastní funkci a dají se různě dokupovat, takže si každý systémový administrátor může nastavit Puppet, jak potřebuje. U Enterprise edice je také možné kontaktovat přímo systémové administrátory z Puppet labs a požádat je o konzultaci.
Puppet pracuje jako deklarativní jazyk, to znamená, že se mu řekne (napíše) co přesně má udělat a on to tak zpracuje.
\pagebreak
\\[12pt]Základní funkce Puppet:
\begin{itemize}
\item Definuje požadovaný stav infrastruktury.
\item Simuluje změny nastavení před jejich nasazením.
\item Nasazuje požadovaný stav automaticky a kontroluje nastavení.
\item Hlásí rozdíly mezi stávajícím a požadovaným stavem, zaznamenává také změny, které byly provedeny, aby infrastruktura byla v požadovaném stavu.
\end{itemize}
Puppet dostává systém do požadovaného stavu podle následujícího diagramu, kde každé zařízení v infrastruktuře by mělo mít nainstalovaný Puppet klient nebo Puppet master (administrátorský program).\cite{PuppetIntro}\cite{Puppet}
\begin{figure}[h!]
    \begin{centering}
        \includegraphics[width=0.8\textwidth]{img/puppet_dataflowv2}
    \par\end{centering}
    \caption{Puppet – diagram zpracování změn (zdroj: \cite{PuppetIntro} )\label{fig:puppet_dataflowv2}}
\end{figure}

Popis každé části diagramu:
\begin{enumerate}
\item Fakta – Puppet klient pošle z každého zařízení jeho normalizovaná data na zařízení s nainstalovaným Puppet master.
\item Katalog – Puppet master zpracovává fakta a upravuje je podle požadovaného nastavení, rozesílá úpravy na zařízení, aby Puppet klient změnil nastavení.
\item Hlášení – klient posílá hlášení o provedených změnách na mastera.
\item Sběr Hlášení – Puppet sbírá všechna hlášení z klientů. Je možné je exportovat pro sdílení informací s jinými týmy nebo aplikacemi.
\end{enumerate}
Puppet má také velice dobře zpracovanou dokumentaci a je zde i možnost zapsat se na placené kurzy. Známé firmy, které využívají Puppet jsou: Cisco, Github, Intel, NASA, Spotify, Sony a mnoho dalších.\cite{Puppet}\cite{PuppetDocs}

\section{Wordpress}\label{sec:Wordpress}
Wordpress je open source redakční systém pro tvorbu a správu webových stránek. Je to systém se základním jádrem a jeho funkčnost je možné rozšířit za pomoci rozšíření (plugin). V této době existuje obrovské množství rozšíření od eshopu až po rezervaci stolů pro restaurace. Další jeho součást je šablonový (theme) systém, díky kterému je možné mít různý počet vzhledů a upravit je podle libosti.

Od začátku vývoje měl Wordpress své bezpečností problémy, ale díky velké komunitě se postupem času většina těchto chyb opravila. Nejlepšího zabezpečení lze dosáhnout pomocí ochranných rozšíření a také je vhodné využít zabezpečení přes htaccess soubor, ve kterém je možné definovat různá zabezpečení jako přesměrování, blokované ip adresy a povolené soubory.

Základní Wordpress využívá programovací jazyk PHP a MySQL databázi. Použití MySQL se dá vyhnout pomocí rozšíření, které umožňuje ukládat data do souborů na server místo do databáze. V této práci je standardní nasazení s PHP i MySQL a samozřejmě datový prostor pro uložení souborů Wordpressu.\cite{WordpressAbout}\cite{WordpressET}\cite{WPbook}

Každé rozšíření může mít svoje vlastní nastavení, a proto se čas na kompletní nastavení Wordpressu s každým rozšířením zvyšuje. I díky tomu se může čas na nastavení může pohybovat kolem 12 hodin čisté práce (bez ohledu na vzhled). Z tohoto důvodu se nasazuje Wordpress s jednoduchou šablonou a k tomu pouze několik důležitých rozšíření, mělo by jich být kolem 20. Tento způsob nasazování zrychlí implementaci webů a aktualizaci veškerých součástí.

\subsection{Rozšíření Wordpressu}\label{subsec:WordpressRozšíření}
V této době již existuje obrovské množství rozšíření a šablon pro úpravu Wordpressu, a proto dobře zpracované stránky nemusejí vůbec vypadat jako by fungovaly na tomto systému. Na začátku roku 2014 bylo zaznamenáno přes 30 000 rozšíření a Wordpress využívalo 22\% z 10 milionů nejlepších stránek na světě.\cite{WordpressPlugins}\cite{WordpressUsage}

Pro tuto práci je vytvořený seznam rozšíření využívaných na stávajících stránkách, které jsou v mojí správě. Je jich kolem 100, ale pro jednotlivé implementace se použije 19 vybraných, které jsou vhodné pro jednotlivé účely webů. Od potřeb e-shopu až po blogy a komentáře. Použití velkého množství rozšíření zbytečně zpomaluje načítání stránek, proto je vhodné využívat pouze pár klíčových.

\subsection{Šablony Wordpressu}\label{subsec:WordpressŠablony}
Většina šablon pro Wordpress je placená, protože ve velkém měřítku upravují funkčnost webu. Jsou zaměřeny na vzhled webu a díky tomu by měly mít dobré grafické zpracování.

Programátor má možnost bezpečně upravit jakoukoliv šablonu přes tzv.: child-theme. Taková šablona pouze upravuje některé funkce a zbytek se načítá z té hlavní. Pokud se vytvoří soubor se stejným jménem jako je v hlavní šabloně, potom se bude načítat soubor z child-theme a díky tomu se dají upravit určité komponenty šablony.\cite{WordpressThemes}\cite{WordpressDocs}

Pro tuto práci budou využity základní vzhledy Wordpressu a jako možnost několik vybraných od skupiny ElegantThemes, která vytváří velice propracované šablony s kvalitním vzhledem.

\subsection{WP-CLI}\label{subsec:WP-CLI}
WP-CLI je nástroj, díky kterému se dá celý Wordpress ovládat pomocí příkazové řádky. Tento nástroj také umožnuje instalaci Wordpressu i všech jeho dalších součástí. Navíc umožňuje i kompletní aktualizaci všech součástí Wordpressu. Takže je vhodné tento nástroj využít pro instalaci Wordpressu a jeho následovné aktualizaci. Obě tyto možnosti budou implementovány pomocí jednoho příkazu pro všechny weby na Wordpressu.\cite{WPCLItutorial}

\subsection{PHP a Apache}\label{subsec:PHPaApache}
PHP je jeden z nejpoužívanějších programovacích jazyků pro tvorbu dynamických webových stránek. První z jeho výhod je, že jeho kód je zpracováván na serveru, a proto není přístupný uživatelům stránek. Další výhodou je možnost vkládání kódu z jiných souborů, proto stačí kód napsat pouze jednou a pomocí příkazu ho vložit do více stránek. Díky tomu se nemusí nic vytvářet vícekrát na každé stránce zvlášť.\cite{PHP}

Protože je PHP zpracováváno na serveru, je potřeba mít serverového klienta, například: Apache. Apache je HTTP serverový klient, který zpracovává HTTP požadavky z prohlížeče a po následném zpracování vrací HTML kód. Apache podporuje v dnešní době mnoho rozšíření a jazyků jako například: PHP, Python nebo Perl. Jedna z jeho výhod je, že je také open source, a proto si ho může kdokoliv upravit.\cite{Apache}

Komunikace mezi PHP a Apche:
\begin{figure}[h!]
    \begin{centering}
        \includegraphics[width=0.7\textwidth]{img/apache-phpv2}
    \par\end{centering}
    \caption{PHP a Apache komunikace (zdroj: \cite{ApachePHPPic} )\label{fig:apache-phpv2}}
\end{figure}

\subsection{MySQL}\label{subsec:MySQL}
Náročnější aplikace vyžadují možnost ukládat informace a nastavení do databáze, aby se s nimi mohlo následně lépe a přehledněji pracovat. Databáze je pouze několik tabulek plných informací a určitých pravidel. Tyto informace jsou uloženy v souboru a proto byl vytvořen jazyk SQL, aby k nim byl snadný přístup pomocí příkazů.

MySQL je variace SQL, která se velmi často používá s jazykem PHP pro vytvoření webových stránek. MySQL pracuje s daty pouze jako textové řetězce a proto je na PHP, aby tento text správně zpracoval do vhodné podoby. MySQL databáze je nejčastěji zabezpečena pomocí uživatelského jména a hesla. Databáze jako taková by také měla být nejzabezpečenějším místem webových stránek, protože může obsahovat citlivé informace o webu a jeho uživatelých. \cite{MySQL}

\section{Pracovní prostředí}\label{subsec:PracovníProstředí}
Prostředí ve kterém je práce zpracována se nazývá OpenStack. Je to soubor softwarových nástrojů pro vytvoření a správu cloudové platformy. V cloud platformě se dají vytvořit virtuální stroje, které dokáží zpracovávat mnoho různých funkcí. Tyto virtuální stoje využívají hardwarové prostředky více reálných strojů pro zrychlení jejich výkonu.

Výhoda OpenStack je, že je open source a díky tomu si kdokoliv může stáhnout jeho zdrojový kód a upravit ho. I díky tomu má velkou komunitu vývojářů, která se snaží, aby jejich produkty byly co nejlepší a nejbezpečnější.\cite{OpenStack}\cite{cloudComputing}

V tomto prostředí byly poskytnuty čtyři virtuální stroje, na kterých je operační systém Linux. První stroj je master (hlavní), který ovládá zbylé tři stroje. Tento master stroj zpracovává aktualizace součástí z Gitlabu a implemetuje je na ostatní stroje. Další tři stroje jsou určeny pro nasazení instancí Wordpressů přes vybraný software konfiguračního managementu. Na těchto strojích je tedy vynucena i základní podpora PHP a MySQL, které Wordpress potřebuje pro svojí funkčnost.

Všechny z následujícíh součástí pracovního prostředí jsou již zpracovány, a proto jsou nasazovány automaticky při vytváření prostředí.

\subsection{Git}\label{subsec:Git}
Jedna z hlavních součástí je také nástroj Git, který se stará o přesuny a aktualizaci souborů. Git je nástroj pro version control (správu verzí). Díky kterému je možné mít více verzí jednoho projektu. Různé verze umožnují sledování veškerých změn provedených na projektu a jejich vrácení nebo zapracování do hlavní části projektu. Další výhoda verzování je možnost práce více lidí na jednom projektu.\cite{Git}

Tento nástroj umožňuje ukládat data na servery soukromé i veřejné. Největším zástupcem veřejných serverů je v této době Github a na soukromý server se dá zakoupit verze Gitlab, která je placená. V této době Gitlab využívá přes 100 000 organizací. Jedny z těchto organizací jsou: Nasa, IBM nebo AVG.\cite{AboutGit}
\begin{figure}[h!]
    \begin{centering}
        \includegraphics[width=0.75\textwidth]{img/git-mergev2}
    \par\end{centering}
    \caption{Git - verzování a větve (zdroj: \cite{GitPic}). )\label{fig:git-merge}}
\end{figure}

Obrázek popisuje, jak funguje větvení v nástroji Git. Integration brach je hlavní větev, do které se vkládají funkce z jiných větví, pokud fungují správně.

\subsection{Reclass}\label{subsec:Reclass}
Reclass umožňuje sjednotit konfigurace z různých nástrojů konfiguračního managementu. Díky tomu je možné vytvořit jednotné nastavení, které funguje v Puppetu, Saltu i Ansible. Reclass umožňuje součásti definovat jako třídy, které mají svou hierarchii a také zpracovává přepsání detailů napříč hierarchií. Jazyk pro nastavení, který je využívaný v tomto případě, je Yaml.

V prostředí, ve kterém je práce zpracovávána, je reclass funkční pro Salt a Ansible, proto budou použity jako první.\cite{Reclass}

\subsubsection{Yaml}\label{subsec:Yaml}
Yaml je jazyk pro serializaci dat, který je human-friendly (dobře čitelný pro člověka). Tento jazyk se používá hlavně na konfiguraci a díky snadné úpravě je možná rychlá úprava a změna funkcí aplikace.

Yaml byl inspirován jazyky C, Perl a Python, ale formát dat převzal z jazyka XML. Proto byl v začátcích použitelný pouze pro tyto jazyky, ale dnešní době se dá použít téměř pro jakýkoliv programovací jazyk.\cite{YML}

\subsection{OpenSSH}\label{subsec:OpenSSH}
OpenSSH je nástroj, který umožňuje zabezpečenou komunikaci přes Internet. Není na mysli lidská komunikace, ale přenosy dat a vzdálené ovládání počítačů. Tento nástroj šifruje jak hesla, tak komunikaci mezi počítači. Díky tomu je velice odolný proti hackingu. Tento nástroj využívá například Ansible, který přes něj komunikuje s ostatními stroji. Jedny ze společností využívající OpenSSH jsou: Cisco, Apple nebo NETFLIX.

Tento nástroj je tedy automaticky použit v případě Ansible. Pro připojení na ovládající stroj se ale využije nástroj Putty. Tento nástroj podporuje stejný protokol pro komunikaci jako OpenSSH, kterým je SSH, a je také velice lehce použitelný.\cite{OpenSSH} 