Nove role: - roles/netbird/ - instaluje NetBird mesh VPN klient Konfigurace: - netbird_setup_key: '' (placeholder, dopln v group_vars/all.yml) - netbird_run_as_system_service: true - netbird_management_url: 'https://api.netbird.io' Playbook priprav-novy-server.yml: - pridana role netbird mezi docker a fail2ban - update hlavicky (krok 8 NetBird) - update README strom (netbird role)
253 lines
7.3 KiB
Markdown
253 lines
7.3 KiB
Markdown
# 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://<server-ip>: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: <server-ip> # 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@<server-ip>
|
||
|
||
# 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
|