Úvod
V dnešní době je nutné servery vytvářet a rušit velmi často. Je to proto, že servery jsou někdy velmi vytížené, zatímco jindy se zátěž snižuje, což vede k plýtvání systémovými prostředky. Běžným příkladem jsou e-shopy během svátků, které přitahují velký provoz. Pokud má být aplikace škálovatelná, je vždy nutné mít nástroje pro správu konfigurace, které usnadní celkový proces vytváření serverů. Ansible je skvělý nástroj pro správu konfigurace, který automatizuje vytváření serverů pomocí standardních postupů, což snižuje lidské chyby.
Ansible nevyžaduje instalaci speciálního softwaru na uzlech serverů. Má všechny nástroje potřebné k psaní, sestavování a usnadnění automatizace skriptů. Tento návod podrobně popisuje, jak používat Ansible k automatizaci kroků obsažených v našem Jak nastavit server Ubuntu návodu.
Požadavky
K dokončení této příručky budeme používat Ubuntu 20.04. Dále budete potřebovat:
-
Řídicí uzel Ansible: Stroj s Ubuntu, na kterém běží nejnovější verze Ubuntu. Na tomto stroji musí být nainstalován a spuštěn hlavní binární soubor Ansible. Tento stroj by měl být schopen se připojit k uzlům Ansible. Pro tato připojení musíte použít SSH klíče. Abyste se vyhnuli problémům při připojování, ujistěte se, že váš řídicí uzel Ansible má povolený firewall. Pokud potřebujete pomoc, podívejte se na náš Instalace a konfigurace Ansible na Ubuntu 20.04 blog.
-
Hostitelé Ansible: Je potřeba jeden nebo více hostitelů, ke kterým se lze připojit. Hostitelé jsou v podstatě spravované uzly v Ansible. Musí se jednat o servery Ubuntu.
Funkce Ansible Playbooku
Všechny níže uvedené kroky můžete nastavit ručně. My však toto spuštění zautomatizujeme. Po spuštění tohoto playbooku provede na vašem stroji následující operace:
-
Nainstaluje aptitude, který Ansible preferuje jako svůj správce balíčků.
-
Vytvoří administrátorskou skupinu wheel s oprávněním sudo bez hesla.
-
Vytvoří nového uživatele se sudo oprávněním.
-
Zkopíruje lokální SSH klíč do authorized_keys. Ten bude použit pro nového administrátorského uživatele na vzdáleném hostiteli.
-
Zakáže ověřování pomocí hesla pro uživatele root.
-
Nainstaluje potřebné balíčky.
-
Nakonfiguruje firewall UFW tak, aby povoloval pouze SSH připojení. Jakákoli jiná připojení budou blokována.
Jakmile se Playbook dokončí, bude k dispozici nový uživatel. Tohoto uživatele můžete použít k přihlášení do systému.
Použití Ansible Playbooku
K nastavení serveru budete potřebovat playbook pro počáteční nastavení serveru a jeho závislosti. Pokud jej používáte poprvé, budete muset naklonovat repozitář pomocí níže uvedeného odkazu:
|
1 |
cd ~ |
|
1 |
git clone https://github.com/do-community/ansible-playbooks.git |
|
1 |
cd ansible-playbooks |
Pokud již repozitář ve vašem systému existuje, spusťte níže uvedený příkaz pro získání nejnovějších aktualizací:
|
1 |
cd ~/ansible-playbooks |
|
1 |
git pull |
Na svém stroji získáte následující strukturu souborů:
|
1 2 3 4 |
setup |-- playbook.yml |__vars |-- default,yml |
Níže je uveden popis souborů:
-
vars/default.yml: Tento soubor obsahuje proměnné pro konfiguraci uzlu Ansible.
-
playbook.yml: Tento soubor obsahuje úlohy, které mají být na serveru spuštěny.
Soubor vars/default.yml vypadá přibližně takto:
|
1 2 3 4 |
--- create_user: my_user copy_local_key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}" sys_packages: [ 'curl', 'vim', 'git', 'ufw'] |
Níže je uveden popis těchto proměnných. Pokud je chcete upravit, můžete jejich hodnoty nahradit vlastními:
-
create_user: Toto je vytvořený uživatel. Tento uživatel má sudo oprávnění.
-
copy_local_key: Obsahuje cestu k lokálnímu veřejnému klíči SSH. Zkopíruje se na vzdálený server jako authorized_key.
-
sys_packages: Pokud chcete na svůj server nainstalovat jeden nebo více balíčků, uveďte je zde jako pole.
Jakmile tento soubor upravíte, uložte jeho obsah. Poté v editoru nano stiskněte CTRL+X , Y. Poté, ENTER pro uložení obsahu souboru.
Nyní jste připraveni spustit tento playbook na více serverech. Ve výchozím nastavení jsou playbooky připraveny ke spuštění na serverech ve vašem inventáři. Pokud chcete playbook použít na konkrétních serverech, můžete použít -l příznak. Nyní předpokládejme, že vzdálený server má více uživatelů, můžete použít -u příznak pro určení, ke kterému uživateli se připojit.
Pokud je název vašeho serveru my_server a uživatelské jméno je my_user, pak spusťte níže uvedený příkaz pro spuštění na uzlech Ansible:
|
1 |
ansible-playbook playbook.yml -l my_server -u my_user |
Získáte výstup podobný tomuto:
|
1 2 3 4 5 6 7 8 9 |
PLAY [all] ***************************************************************************************************************************** TASK [Gathering Facts] ***************************************************************************************************************** ok: [my_server] TASK [Install Prerequisites] *********************************************************************************************************** changed: [my_server] TASK [Make sure we have a 'wheel' group] *********************************************************************************************** changed: [my_server] TASK [Allow 'wheel' group to have passwordless sudo] *********************************************************************************** changed: [my_server] |
Po dokončení tohoto spuštění se můžete připojit pomocí níže uvedeného příkazu:
|
1 |
ssh my_user@server_host_or_IP |
Nezapomeňte, že my_user byl název, který jsme použili v souboru vars/default.yml. V tomto příkazu budete muset také změnit IP adresu serveru na IP adresu vašeho serveru. Pokud jste zadali proměnnou copy_local_key, aby odkazovala na nějaký vlastní SSH klíč, specifikujte umístění pomocí -i přepínače:
|
1 |
ssh my_user@server_host_or_IP -i ~/.ssh/ansible_controller_key |
Dále se přihlaste k serveru a zkontrolujte pravidla firewallu UFW:
|
1 |
sudo ufw status |
Získáte následující výstup:
|
1 2 3 4 5 |
Stav: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) |
Výše uvedený výstup potvrzuje, že firewall UFW byl úspěšně dokončen. Toto byl poslední krok v našem playbooku. Pokud je proveden správně, znamená to, že spuštění bylo úspěšné.
Obsah Ansible Playbooku
Soubory Playbooku, které jsme v tomto návodu použili, jsou hostovány na ansible-playbooks/setup_ubuntu1804 at master · do-community/ansible-playbooks · GitHub. Pokud si chcete prohlédnout obsah jednotlivých souborů pro použití nebo úpravu, klikněte na tlačítko Raw v horní části každého skriptu.
Pro rychlou orientaci sdílíme kompletní obsah Playbooku spolu s příslušnými soubory:
-
vars/default.yml
Tento soubor obsahuje hodnoty, které budou použity úlohami playbooku. Patří mezi ně například jméno uživatele, oprávnění, SSH klíče, balíčky, které se mají nainstalovat v rámci počátečního nastavení, a tak dále:
|
1 2 3 4 |
--- create_user: my_user copy_local_key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}" sys_packages: [ 'curl', 'vim', 'git', 'ufw'] |
-
playbook.yml
Soubor playbook.yml obsahuje úlohy, které mají být spuštěny. Nejprve soubor uvádí všechny hostitele, na které se má cílit. Pokud chcete specifikovat všechny servery, nastavte hodnotu tohoto klíče na all. Dále, pokud chcete specifikovat úlohy, které mají být spuštěny s oprávněními sudo, nastavíte hodnotu proměnné become: true. Nakonec musí tento soubor obsahovat obsah výše uvedeného souboru vars/default.yml. Tyto soubory zahrneme jako další, abychom načetli nastavení z tohoto souboru:
|
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 |
--- - hosts: all become: true vars_files: - vars/default.yml tasks: - name: Nainstalovat prerekvizity apt: name=aptitude update_cache=yes state=latest force_apt_get=yes # Nastavení skupiny Sudo - name: Ujistit se, že máme skupinu 'wheel' group group: name: wheel state: present - name: Povolit 'wheel' skupině to sudo bez hesla lineinfile: path: /etc/sudoers state: present regexp: '^%wheel' line: '%wheel ALL=(ALL) NOPASSWD: ALL' validate: '/usr/sbin/visudo -cf %s' # Nastavení uživatele a klíče - name: Vytvořit nového běžného uživatele s oprávněními sudoprivileges user: name: "{{ create_user }}" state: present groups: wheel append: true create_home: true shell: /bin/bash - name: Nastavit autorizovaný klíč pro vzdáleného uživatele authorized_key: user: "{{ create_user }}" state: present key: "{{ copy_local_key }}" - name: Zakázat ověřování heslem pro uživatele root lineinfile: path: /etc/ssh/sshd_config state: present regexp: '^#?PermitRootLogin' line: 'PermitRootLogin prohibit-password' # Instalace balíčků - name: Aktualizovat apt apt: update_cache=yes - name: Nainstalovat vyžadované systémové balíčky apt: name={{ sys_packages }} state=latest # Nastavení UFW - name: UFW - Povolit SSH připojení ufw: rule: allow name: OpenSSH - name: UFW - Ve výchozím nastavení zakázat veškerý ostatní příchozí provozdefault ufw: state: enabled policy: deny direction: incoming |
Závěr
Automatizace je v IT klíčová, protože zajišťuje, že všechny procesy probíhají bez chyb a splňují standardní postupy a procedury. Vzhledem k tomu, že většina dnešního softwaru je poskytována přes web a má distribuovanou povahu, stalo se každodenním úkolem vytvářet nové servery, např. pro různá prostředí, jako je staging, produkce nebo dokonce demo prostředí.
V tomto návodu jsme si ukázali, jak dosáhnout automatizace serverů pomocí nástroje Ansible, což je výkonný a snadno použitelný nástroj, který vám může ušetřit spoustu času.
Příjemnou práci!
Komentáře
Zatím žádné komentáře. Buďte první.