# mates-ansible Ansible playbooky pro přípravu nového serveru a správu home infrastruktury. > **Jsi začátečník?** Čti od [Začínáme](#zaciname) - vše je tu vysvětleno krok za krokem. --- ## Co je Ansible? Ansible je nástroj, který **automatizuje konfiguraci serverů**. Místo toho, aby ses ručně přihlašoval přes SSH a psal 50 příkazů, napíšeš **jeden příkaz** a Ansible udělá všechno za tebe. **Příklad:** Místo ```bash ssh server "apt update && apt install -y docker docker-compose-plugin && usermod -aG docker deploy" ``` napíšeš ```bash ansible-playbook -i inventory.yml playbooks/priprav-novy-server.yml ``` a Ansible to udělá **na všech serverech** najednou. --- ## Obsah repozitáře ### Playbooky (hlavní úkoly) | Playbook | Co dělá | |---|---| | **`priprav-novy-server.yml`** | Kompletní příprava nového serveru od nuly (update + user + SSH + Docker + adresáře + fail2ban) | | **`nasad-sluzby.yml`** | Nasaď Docker služby z `mates-docker-services/` (Portainer, Vaultwarden, Gitea, ...) | | **`aktualizuj-sluzby.yml`** | Aktualizuj všechny běžící služby (`docker compose pull && up -d`) | | **`zabezpec-server.yml`** | Bezpečnostní hardening (sysctl, auditd, automatické security updaty) | ### Role (znovupoužitelné bloky) | Role | Co dělá | |---|---| | `zaklad` | Update systému, base balíky (btop, mc, tree, curl, ...), timezone | | `uzivatel-deploy` | Vytvoří uživatele `deploy` (UID 1000) s uzamknutým heslem | | `ssh-klice` | Nasadí SSH klíč pro `deploy` (heslo = klíč, ne heslo) | | `docker` | Docker Engine + Compose plugin + nastavení daemon.json | | `adresare` | `/home/deploy/{docker,scripts,backups,logs,~/.local/bin}` + 14 složek pro služby | | `netbird` | Nainstaluje NetBird klienta (mesh VPN) - apt balíček, ne Docker | ### ️ Konfigurace | Soubor | Co obsahuje | |---|---| | `inventory.example.yml` | Ukázkový inventory - seznam serverů | | `group_vars/all.yml.example` | Společné proměnné (SSH klíč, porty, balíky, ...) | | `ansible.cfg` | Konfigurace Ansible (cesty, SSH optimalizace, ...) | --- ## Začínáme ### Krok 1: Nainstaluj Ansible ```bash # macOS brew install ansible # Linux (apt) sudo apt install -y ansible ``` ### Krok 2: Naklonuj repo ```bash git clone http://:3000/mates/mates-ansible.git cd mates-ansible ``` ### Krok 3: Vytvoř inventory.yml Zkopíruj ukázkový soubor a uprav: ```bash cp inventory.example.yml inventory.yml nano inventory.yml ``` **Co v inventory nastavit:** ```yaml all: vars: ansible_user: ubuntu # SSH user na novém serveru ansible_become: true # potřebuje sudo (povinné) ansible_ssh_pass: tvujHeslo # heslo pro první připojení (jen dočasně!) children: homeservers: hosts: novy-server: ansible_host: # IP nového serveru ``` ### Krok 4: Přidej svůj SSH klíč ```bash # Na Macu - zobraz svuj verejny klic cat ~/.ssh/id_ed25519.pub # ssh-ed25519 AAAAC3Nz... hermes@mac # Pridej do group_vars/all.yml.example cp group_vars/all.yml.example group_vars/all.yml nano group_vars/all.yml ``` V souboru najdi řádek: ```yaml deploy_ssh_public_keys: - "ssh-ed25519 AAAAC3Nz... hermes@mac" # <- sem vlož svůj klíč ``` ### Krok 5: Spusť playbook ```bash ansible-playbook -i inventory.yml playbooks/priprav-novy-server.yml ``` **Co se stane:** 1. Ansible se připojí na server přes SSH (s heslem) 2. Stáhne seznam balíků (`apt update`) 3. Nainstaluje 17 základních balíků (btop, mc, tree, curl, ...) 4. Vytvoří uživatele `deploy` (UID 1000) 5. Zamkne mu heslo (přístup jen přes SSH klíč) 6. Přidá tvůj SSH klíč do `~/.ssh/authorized_keys` 7. Nainstaluje Docker Engine + Compose plugin 8. Přidá `deploy` do `docker` group (docker **bez sudo**) 7. Vytvoří adresářovou strukturu pro 14 Docker služeb 8. Nainstaluje NetBird (mesh VPN klient - apt balíček) 9. Nainstaluje fail2ban (ochrana proti brute-force SSH) **Trvání:** 5-10 minut. ### Krok 6: Ověř ```bash # Prihlas se jako deploy (s klicem, bez hesla) ssh deploy@ # Over Docker docker ps # melo by fungovat bez sudo docker compose version # Adresare ls /home/deploy/ # melo byt: docker, scripts, backups, logs, ... ``` --- ## Práce s playbooky ### Příprava nového serveru (úplně od nuly) ```bash ansible-playbook -i inventory.yml playbooks/priprav-novy-server.yml ``` ### Nasazení Docker služeb ```bash # Nasaď všechny (portainer, gitea, vaultwarden, ...) ansible-playbook -i inventory.yml playbooks/nasad-sluzby.yml # Nasaď jen vybrané ansible-playbook -i inventory.yml playbooks/nasad-sluzby.yml \ --extra-vars "sluzby=[portainer,vaultwarden]" ``` ### Aktualizace služeb ```bash # Aktualizuj všechny běžící služby (docker compose pull && up -d) ansible-playbook -i inventory.yml playbooks/aktualizuj-sluzby.yml ``` ### Bezpečnostní hardening ```bash ansible-playbook -i inventory.yml playbooks/zabezpec-server.yml ``` Tento playbook nastavuje: - **sysctl** - hardening síťových parametrů jádra - **auditd** - logování bezpečnostních událostí - **unattended-upgrades** - automatické bezpečnostní aktualizace --- ## Struktura projektu ``` mates-ansible/ +-- README.md # Tento soubor +-- LICENSE # MIT +-- ansible.cfg # Konfigurace Ansible +-- inventory.example.yml # Ukázkový inventory +-- group_vars/ | +-- all.yml.example # Společné proměnné +-- playbooks/ | +-- priprav-novy-server.yml # Příprava nového serveru | +-- nasad-sluzby.yml # Nasaď Docker služby | +-- aktualizuj-sluzby.yml # Aktualizuj služby | +-- zabezpec-server.yml # Bezpečnostní hardening +-- roles/ +-- zaklad/ # Update + base balíky +-- uzivatel-deploy/ # Vytvoření deploy usera +-- ssh-klice/ # Nasazení SSH klíče +-- docker/ # Docker Engine + Compose +-- adresare/ # Adresářová struktura +-- netbird/ # NetBird (mesh VPN) ``` --- ## Kde co nastavit | Co | Kde | |---|---| | IP serverů | `inventory.yml` | | SSH klíč pro deploy | `group_vars/all.yml` -> `deploy_ssh_public_keys` | | Base balíky | `roles/zaklad/defaults/main.yml` -> `base_packages` | | Porty | `group_vars/all.yml` -> `allowed_ports` | | Docker daemon nastavení | `roles/docker/defaults/main.yml` -> `docker_daemon_config` | | Služby k nasazení | `group_vars/all.yml` -> `services_to_deploy` | --- ## Bezpečnost - **Deploy user má zamknuté heslo** - přístup jen přes SSH klíč - **Bez hesel v inventory** - použij `ansible-vault` nebo SSH klíče - **Docker bez sudo** - user `deploy` je v `docker` group - **fail2ban** - 3 pokusy o SSH = ban na 1 hodinu - **Firewall se nenastavuje automaticky** - viz `priprav-novy-server.yml` pro vysvětlení --- ## Další zdroje Detailní postupy najdeš v Jotty knowledge base. --- **Poslední update:** 2026-08-01