Kompletne odstraneno: - Emoji (smajliky, symboly, boxes, arrows) z README - Emoji ze skriptu (sipky, symboly) - Emoji z docker-compose (adresare) Nahrano za: - Textove alternativy (sipky -> '->', boxes -> '+', atd.) - ASCII pouze kde to slo Ciste vsechny 7 repo (overeno Python skriptem).
253 lines
6.7 KiB
Markdown
253 lines
6.7 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 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
|