Playbooky (novy nazev -> co dela):
- priprav-novy-server.yml (kompletni setup noveho serveru)
- nasad-sluzby.yml (nasadi Docker sluzby z docker-services/)
- aktualizuj-sluzby.yml (docker compose pull && up -d)
- zabezpec-server.yml (sysctl, auditd, unattended-upgrades)
- bootstrap-server.yml SMAZAN (duplicitni s priprav-novy-server)
Role (novy nazev -> co dela):
- zaklad (update + base baliky + timezone)
- uzivatel-deploy (vytvori deploy usera UID 1000)
- ssh-klice (authorized_keys deployment)
- docker (Docker Engine + Compose plugin) - ponechan anglicky (IT konvence)
- adresare (/home/deploy/{docker,scripts,backups,logs,...})
- firewall SMAZAN (nepouziva se)
Reference v playbooku aktualizovany na nove nazvy roli.
README.md kompletne prepracovan v cestine pro zacatecniky - vysvetluje
co Ansible je, jak nainstalovat, jak vytvorit inventory, jak spustit
playbook, jak overit ze vse funguje.
7.2 KiB
7.2 KiB
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 – 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
ssh server "apt update && apt install -y docker docker-compose-plugin && usermod -aG docker deploy"
napíšeš
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 |
Základ: 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 |
⚙️ 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
# macOS
brew install ansible
# Linux (apt)
sudo apt install -y ansible
Krok 2: Naklonuj repo
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:
cp inventory.example.yml inventory.yml
nano inventory.yml
Co v inventory nastavit:
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: 192.168.1.50 # IP nového serveru
Krok 4: Přidej svůj SSH klíč
# 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:
deploy_ssh_public_keys:
- "ssh-ed25519 AAAAC3Nz... hermes@mac" # ← sem vlož svůj klíč
Krok 5: Spusť playbook
ansible-playbook -i inventory.yml playbooks/priprav-novy-server.yml
Co se stane:
- ✅ Ansible se připojí na server přes SSH (s heslem)
- ✅ Stáhne seznam balíků (
apt update) - ✅ Nainstaluje 17 základních balíků (btop, mc, tree, curl, …)
- ✅ Vytvoří uživatele
deploy(UID 1000) - ✅ Zamkne mu heslo (přístup jen přes SSH klíč)
- ✅ Přidá tvůj SSH klíč do
~/.ssh/authorized_keys - ✅ Nainstaluje Docker Engine + Compose plugin
- ✅ Přidá
deploydodockergroup (docker bez sudo) - ✅ Vytvoří adresářovou strukturu pro 14 Docker služeb
- ✅ Nainstaluje fail2ban (ochrana proti brute-force SSH)
Trvání: 5-10 minut.
Krok 6: Ověř
# 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)
ansible-playbook -i inventory.yml playbooks/priprav-novy-server.yml
Nasazení Docker služeb
# 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
# Aktualizuj všechny běžící služby (docker compose pull && up -d)
ansible-playbook -i inventory.yml playbooks/aktualizuj-sluzby.yml
Bezpečnostní hardening
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
🔑 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-vaultnebo SSH klíče - ✅ Docker bez sudo – user
deployje vdockergroup - ✅ fail2ban – 3 pokusy o SSH = ban na 1 hodinu
- ✅ Firewall se nenastavuje automaticky – viz
priprav-novy-server.ymlpro vysvětlení
📚 Další zdroje
Detailní postupy najdeš v Jotty knowledge base.
📜 Licence
MIT – viz LICENSE
Poslední update: 2026-08-01