# 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 (mesh VPN klient) a registruje přes setup key | ### ⚙️ 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) a registruje přes setup key 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