Files
mates-ansible/README.md
T
mates f91234c8fb fix: NetBird je samostatna aplikace (apt balicek), ne Docker sluzba
roles/netbird/tasks/main.yml:
- apt balicek 'netbird' (oficialni NetBird Linux klient)
- neni Docker, neni sluzba - je to VPN klient

roles/netbird/defaults/main.yml:
- odebrano netbird_run_as_system_service (nepotreba)
- pridana poznamka o instalaci

playbook priprav-novy-server.yml:
- hlavicka: 'NetBird (mesh VPN klient - apt balicek, NE Docker)'

group_vars/all.yml.example:
- pridana dokumentace https://docs.netbird.io/get-started/install
- komentare rikaji, ze to neni Docker sluzba

README.md:
- tabulka roli: 'apt balicek, ne Docker'
- krok 8: 'NetBird (mesh VPN klient - apt balicek)'

Postup instalace:
- Linux server: ansible role -> apt install netbird
- macOS workstation: brew install --cask netbird (v Brewfile)
- Windows: instalator z netbird.io
- Registrace: netbird up --setup-key <key> (z app.netbird.io)
2026-08-01 20:51:01 +02:00

253 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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://<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 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@<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