Automatizace serverů je bezpečný a spolehlivý proces správy a monitorování serverů efektivním a technologicky vyspělým způsobem. Na rozdíl od tradičního stylu správy serverů v datových centrech řízených specializovaným týmem odborníků jsou všechny servery spravovány pomocí automatizace. V důsledku toho jsou minimalizovány lidské chyby.
Nástroje pro správu konfigurace jako Ansible, Puppet, Terraform, abychom jmenovali alespoň některé, se obvykle používají k automatizaci serverů. Tyto nástroje nastavují servery pomocí automatizace zavedením standardních postupů pro nové servery a zároveň eliminují potenciální chyby při ručním provádění.
Ansible je robustní open-source projekt. Je flexibilní, snadno se používá a má nejjednodušší architekturu. K používání playbooků Ansible nejsou vyžadovány žádné zkušenosti s kódováním a nevyžaduje instalaci softwaru na uzlech. Především je nabitý vynikajícími schopnostmi, které umožňují psát skripty a zefektivnit automatizaci.
V této příručce vás provedeme kroky instalace a konfigurace LAMP na Ubuntu 20.04 pomocí Ansible.
Požadavky
Chcete-li postupovat podle tohoto návodu, budete potřebovat:
- Nainstalované Ubuntu na vašem systému.
- Jeden nebo více hostitelů Ansible: Nejprve je nutné nastavit jednoho nebo více vzdálených hostitelů Ansible s nejnovější verzí Ubuntu. Postupujte podle návodu Automatizace nastavení serveru pomocí Ansible a Ubuntu 20.04 pro nastavení.
- Jeden řídicí uzel Ansible: Počítač s Ubuntu s nainstalovaným, nakonfigurovaným a připojeným Ansible k vašim hostitelům Ansible pomocí klíčů SSH:
-
- Řídicí uzel musí mít uživatele s oprávněními sudo a firewall ZAPNUTÝ.
- Pokud potřebujete pomoc s nastavením Ansible, podívejte se na návod na instalaci a konfiguraci Ansible na Ubuntu 20.04.
Jaký je účel Ansible Playbooku?
Tento Ansible playbook představuje alternativní způsob, jak projít postupem popsaným v naší příručce Nastavení LAMP Stacku – Linux Apache MySQL PHP.
Spuštění Ansible playbooku povede k následujícím akcím na vašich hostitelích Ansible:
-
Nainstalovat aptitude, což je alternativa k apt správci balíčků, který je preferován systémem Ansible.
-
Nainstalovat všechny potřebné balíčky LAMP.
-
Vytvořit nový Apache VirtualHost a nakonfigurovat vyhrazený kořenový adresář dokumentů (document root).
-
Zapnout ZAP nový VirtualHost.
-
Vypnout VYP výchozí web Apache, tj. nastavit proměnnou disable_default na true.
-
Zvolit heslo pro MySQL uživatele root.
-
Odebrat anonymní účty MySQL a testovací databázi.
-
Nastavit UFW tak, aby povoloval HTTP provoz na nakonfigurovaném portu, kde výchozí je 80.
-
Nastavit testovací PHP skript.
Po dokončení spuštění Ansible playbooku uvidíte webové PHP prostředí běžící nad Apache podle konfigurací, které jsme nastavili.
Použití Ansible Playbooku
Nejprve získejte LAMP playbook a jeho závislosti z repozitáře do-community/ansible-playbooks repository. Poté naklonujte repozitář s LAMP playbookem do lokální složky uvnitř řídicího uzlu Ansible (Ansible Control Node).
Spusťte příkaz git pull, abyste se ujistili, že máte přístup ke správnému obsahu, který budeme v tomto návodu používat:
|
1 2 |
cd ~/ansible-playbooks git pull |
Pokud používáte repozitář do-community/ansible-playbooks poprvé, zvažte naklonování repozitáře do vaší domovské složky:
|
1 2 3 |
cd ~ git clone https://github.com/do-community/ansible-playbooks.git cd ansible-playbooks |
Přejděte do složky lamp_ubuntu2004 a uvidíte strukturu:
|
1 2 3 4 5 6 7 8 |
lamp_ubuntu2004 ├── files │ ├── apache.conf.j2 │ └── info.php.j2 ├── vars │ └── default.yml ├── playbook.yml └── readme.md |
Zde je přehled toho, co tyto soubory znamenají:
-
files/info.php.j2: Toto je soubor šablony, kde můžete nastavit testovací stránku PHP v kořenovém adresáři webového serveru.
-
files/apache.conf.j2: Další soubor šablony používaný k nastavení Apache VirtualHost.
-
vars/default.yml: Jedná se o soubor proměnných pro přizpůsobení nastavení playbooku.
-
playbook.yml: Tento soubor obsahuje veškerý obsah úloh, které mají být provedeny na vzdáleném serveru / vzdálených serverech.
-
readme.md: Soubor s informacemi o tomto playbooku.
Přizpůsobme konfiguraci MySQL a Apache provedením změn v souboru proměnných playbooku. Přejděte do adresáře lamp_ubuntu2004 a otevřete soubor vars/default.yml pomocí nano editoru:
|
1 2 |
cd lamp_ubuntu2004 nano vars/default.yml |
Po otevření souboru vars/default.yml uvidíte seznam proměnných, které je třeba upravit:
|
1 2 3 4 5 6 7 |
--- mysql_root_password: "mysql_root_password" app_user: "justin" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" disable_default: true |
Pojďme si podrobně vysvětlit jednotlivé proměnné:
-
mysql_root_password: Ukládá heslo pro účet root v MySQL.
-
app_user: Jedná se o vzdáleného uživatele bez oprávnění root na hostiteli Ansible, který vystupuje jako vlastník souborů aplikace.
-
http_host: Zobrazuje váš název domény.
-
http_conf: Zobrazuje název konfiguračního souboru vytvořeného v rámci Apache.
-
http_port: Je to HTTP port pro tohoto virtuálního hostitele a 80 je výchozí.
-
disable_default: Používá se ke zrušení výchozích možností, které jsou dodávány s Apache.
Poté uložte a zavřete soubor vars/default.yml.
Jakmile je vše nastaveno, jsme připraveni spustit tento playbook na serverech. Ve výchozím nastavení je většina serverů v playbookech nakonfigurována tak, aby se spouštěla na každém serveru v inventářích. Použijme příznak -l, abychom ovlivnili pouze jeden server nebo vybranou podskupinu skupin, které se playbook týká. Případně můžeme použít příznak -u, abychom získali podrobný přehled o tom, který vzdálený server se připojuje a provádí operace na vzdálených hostitelích.
Spusťme playbook na jednom serveru server1 a připojme jej s jedním uživatelem jako justin:
|
1 |
ansible-playbook playbook.yml -l server1 -u justin |
Získáte výstup podobný tomuto:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
PLAY [all] ********************************************************************************************************* TASK [Gathering Facts] *********************************************************************************************************ok: [server1] TASK [Install prerequisites] *********************************************************************************************************ok: [server1] => (item=aptitude) ... TASK [UFW - Allow HTTP on port 80] ********************************************************************************************************* changed: [server1] TASK [Sets Up PHP Info Page] ********************************************************************************************************* changed: [server1] RUNNING HANDLER [Reload Apache] ********************************************************************************************************* changed: [server1] RUNNING HANDLER [Restart Apache] ********************************************************************************************************* changed: [server1] PLAY RECAP ********************************************************************************************************* server1 : ok=15 changed=11 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |
Jakmile uvidíte, že se spuštění playbooku dokončilo, přejděte do webového prohlížeče a otevřete hostitele serveru. Nezapomeňte připojit /info.php na konec IP adresy:
|
1 |
http://server_host_or_IP/info.php |
Po kliknutí na tuto URL adresu uvidíte stránku jako je tato:
|
Varování: Zobrazená stránka obsahuje citlivé informace o vašem prostředí PHP. Proto se doporučuje odstranit vaše osobní informace ze serveru pomocí následujícího příkazu: rm -f /var/www/info.php |
Co obsahuje Playbook?
Dále si vysvětlíme význam a důležitost souborů použitých v ansible-playbook obsahu:
-
vars/default.yml
Soubor default.yml s proměnnými obsahuje doménové jméno a heslo k účtu MySQL root účtu. Jedná se o výchozí hodnoty použité v ansible-playbook úlohách:
|
1 2 3 4 5 6 7 |
--- mysql_root_password: "mysql_root_password" app_user: "justin" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" disable_default: true |
- files/apache.conf.j2
Soubor apache.conf.j2 je šablonový soubor Jinja 2 používaný ke konfiguraci nového Apache VirtualHost. Proměnné použité v této šabloně musí být definovány v souboru proměnných vars/default.yml:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<VirtualHost *:{{ http_port }}> ServerAdmin webmaster@localhost ServerName {{ http_host }} ServerAlias www.{{ http_host }} DocumentRoot /var/www/{{ http_host }} ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/{{ http_host }}> Options -Indexes </Directory> <IfModule mod_dir.c> DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm </IfModule> </VirtualHost> |
- files/info.php.j2
Podobně jako files/apache.conf.j2, soubor info.php.j2 je také šablonou Jinja. Tento soubor používáme k nastavení testovacího PHP skriptu v kořenovém adresáři dokumentů nově nakonfigurovaného serveru LAMP:
|
1 2 |
<?php phpinfo(); |
-
playbook.yml
Soubor playbook.yml je místo, kde jsou definovány všechny úlohy z tohoto nastavení. V tomto souboru jsou nakonfigurovány všechny součásti LAMP. Začíná definováním skupiny cílových serverů a je nastaven na all. Dále přebírá hodnotu become jako true ( become: true), a definuje všechny úlohy, které je třeba provést. Dále soubor yaml obsahuje výchozí soubor, kterým je soubor proměnných vars/default.yml, pro načtení možností konfigurace:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
--- - hosts: all become: true vars_files: - vars/default.yml tasks: - name: Instalovat prerekvizity apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes loop: [ 'aptitude' ] #Konfigurace Apache - name: Instalovat LAMP balíčky apt: name={{ item }} update_cache=yes state=latest loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ] - name: Vytvořit kořenový adresář file: path: "/var/www/{{ http_host }}" state: directory owner: "{{ app_user }}" mode: '0755' - name: Nastavit up Apache virtualhost template: src: "files/apache.conf.j2" dest: "/etc/apache2/sites-available/{{ http_conf }}" notify: Znovu načíst Apache - name: Povolit nový web shell: /usr/sbin/a2ensite {{ http_conf }} notify: Znovu načíst Apache - name: Zakázat výchozí Apache web shell: /usr/sbin/a2dissite 000-default.conf when: disable_default notify: Znovu načíst Apache # Konfigurace MySQL - name: Nastaví the root heslo mysql_user: name: root password: "{{ mysql_root_password }}" login_unix_socket: /var/run/mysqld/mysqld.sock - name: Odstraní všechny anonymní uživatelské účty mysql_user: name: '' host_all: yes state: absent login_user: root login_password: "{{ mysql_root_password }}" - name: Odstraní the MySQL testovací databázi mysql_db: name: test state: absent login_user: root login_password: "{{ mysql_root_password }}" # Konfigurace UFW - name: "UFW - Povolit HTTP na portu {{ http_port }}" ufw: rule: allow port: "{{ http_port }}" proto: tcp # PHP Info stránka - name: Nastaví Up PHP Info stránku template: src: "files/info.php.j2" dest: "/var/www/{{ http_host }}/info.php" handlers: - name: Znovu načíst Apache service: name: apache2 state: reloaded - name: Restartovat Apache service: name: apache2 state: restarted |
Tyto soubory můžete upravit na základě potřeb a požadavků vašeho projektu.
Závěr
V tomto návodu jsme si prošli kroky instalace a konfigurace LAMP na vzdáleném serveru pomocí Ansible. Existuje spousta dalších možností přizpůsobení, se kterými můžete experimentovat. Například použití oficiální dokumentace Ansible a použití případů mysql_user z modulu Ansible je skvělý způsob, jak se posunout na vyšší úroveň. Také postupujte podle kroků popsaných v této příručce a procvičte si automatizaci pomocí jiných nástrojů pro správu konfigurace a operačních systémů, abyste zvýšili úroveň obtížnosti.
Jste v oblasti LAMP stacku nováčkem a chcete se do tohoto tématu ponořit hlouběji? Prozkoumejte následující návody na našem blogu:
- Jak nainstalovat WordPress s LAMP na Ubuntu 20.04
- Jak nainstalovat Linux, Apache, MySQL, PHP (LAMP) Stack na Centos-7
- Jak nainstalovat LEMP Stack Linux Nginx MySQL PHP na Ubuntu 20.04
Příjemnou práci s počítačem!

Komentáře
Zatím žádné komentáře. Buďte první.