diff --git a/README.md b/README.md index 049c777..53c6ef5 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,11 @@ 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. +> **Jsi začátečník?** Čti od [Začínáme](#zaciname) - vše je tu vysvětleno krok za krokem. --- -## 📚 Co je Ansible? +## 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. @@ -24,39 +24,39 @@ a Ansible to udělá **na všech serverech** najednou. --- -## 📦 Obsah repozitáře +## Obsah repozitáře -### 🎯 Playbooky (hlavní úkoly) +### 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, …) | +| **`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 (znovupoužitelné bloky) | Role | Co dělá | |---|---| -| `zaklad` | Update systému, base balíky (btop, mc, tree, curl, …), timezone | +| `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 | +| `netbird` | Nainstaluje NetBird klienta (mesh VPN) - apt balíček, ne Docker | -### ⚙️ Konfigurace +### ️ 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, …) | +| `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 +## Začínáme ### Krok 1: Nainstaluj Ansible @@ -88,22 +88,22 @@ nano inventory.yml ```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ě!) + 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 + 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 +# Na Macu - zobraz svuj verejny klic cat ~/.ssh/id_ed25519.pub # ssh-ed25519 AAAAC3Nz... hermes@mac @@ -115,7 +115,7 @@ nano group_vars/all.yml V souboru najdi řádek: ```yaml deploy_ssh_public_keys: - - "ssh-ed25519 AAAAC3Nz... hermes@mac" # ← sem vlož svůj klíč + - "ssh-ed25519 AAAAC3Nz... hermes@mac" # <- sem vlož svůj klíč ``` ### Krok 5: Spusť playbook @@ -125,17 +125,17 @@ 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) +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. @@ -146,16 +146,16 @@ ansible-playbook -i inventory.yml playbooks/priprav-novy-server.yml ssh deploy@ # Over Docker -docker ps # melo by fungovat bez sudo +docker ps # melo by fungovat bez sudo docker compose version # Adresare -ls /home/deploy/ # melo byt: docker, scripts, backups, logs, ... +ls /home/deploy/ # melo byt: docker, scripts, backups, logs, ... ``` --- -## 🎬 Práce s playbooky +## Práce s playbooky ### Příprava nového serveru (úplně od nuly) @@ -171,7 +171,7 @@ 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]" + --extra-vars "sluzby=[portainer,vaultwarden]" ``` ### Aktualizace služeb @@ -188,62 +188,62 @@ 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 +- **sysctl** - hardening síťových parametrů jádra +- **auditd** - logování bezpečnostních událostí +- **unattended-upgrades** - automatické bezpečnostní aktualizace --- -## 🏗 Struktura projektu +## 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) ++-- 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 +## 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` | +| 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 +## 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í +- **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 +## Další zdroje Detailní postupy najdeš v Jotty knowledge base.