feat: prepare-new-server playbook + role struktura

playbook prepare-new-server.yml:
- update systemu
- deploy user (UID 1000, heslo zamknuto)
- SSH klic pro deploy uzivatele
- adresarova struktura (/home/deploy/{docker,scripts,backups,logs,...})
- Docker Engine + Compose plugin (bez sudo)
- UFW firewall (22, 80, 443)
- fail2ban
- overeni docker bez sudo

Role (kazda v samostatnem adresari):
- common: update, base packages, timezone
- deploy-user: vytvoreni usera UID 1000
- ssh-keys: authorized_keys deployment
- firewall: UFW konfigurace
- docker: Docker Engine + Compose + daemon.json
- directories: /home/deploy/{docker/<sluzba>,backups,scripts,logs}

Pouziti:
  ansible-playbook -i inventory.yml playbooks/prepare-new-server.yml
This commit is contained in:
2026-08-01 20:02:19 +02:00
parent da9003aef8
commit ec2f1d639c
16 changed files with 638 additions and 15 deletions
+105 -8
View File
@@ -1,21 +1,118 @@
# mates-ansible
Ansible playbooky pro nasazení a správu home infrastruktury.
Vychází z tvých existujících setupů v `/home/mates/docker/`.
Ansible role a playbooky pro přípravu nového serveru a nasazení home infrastruktury.
## Playbooky
| Playbook | Účel |
|---|---|
| `prepare-new-server.yml` | Kompletní příprava nového serveru (od nuly) |
| `deploy-services.yml` | Nasaď Docker služby z `mates-docker-services/` |
| `update-services.yml` | Update všech služeb (`docker compose pull && up -d`) |
| `security-hardening.yml` | Sysctl, auditd, auto-updates |
## Quickstart pro nový server
### 1. Příprava inventory
```bash
cp inventory.example.yml inventory.yml
nano inventory.yml # nastavit IP a SSH klíč
```
### 2. Přidání svého SSH klíče
```bash
# Verejny klic z Macu
cat ~/.ssh/id_ed25519.pub
# Pridej do group_vars/all.yml:
deploy_ssh_public_keys:
- "ssh-ed25519 AAAAC3Nz... hermes@mac"
```
### 3. První připojení (s heslem)
```yaml
# inventory.yml - pro prvni pripojeni (jeste pred SSH klicem)
homeservers:
hosts:
novy-server:
ansible_host: <server-ip>
ansible_user: ubuntu # nebo root
ansible_ssh_pass: heslo # POZOR: jen docasne
ansible_become_pass: heslo # POZOR: jen docasne
```
### 4. Spuštění playbooku
```bash
ansible-playbook -i inventory.yml playbooks/prepare-new-server.yml
```
Playbook provede:
- ✅ Update systému (apt)
- ✅ Vytvoří `deploy` usera (UID 1000) bez hesla
- ✅ Nastaví SSH klíč pro `deploy`
- ✅ Vytvoří adresářovou strukturu (`/home/deploy/docker/<sluzba>/`)
- ✅ Nainstaluje Docker Engine + Compose plugin
- ✅ Přidá `deploy` do `docker` group (docker bez sudo)
- ✅ Nastaví UFW firewall (povoleno 22, 80, 443)
- ✅ Nainstaluje fail2ban
### 5. Po dokončení
```bash
# Prihlas se jako deploy
ssh deploy@<server-ip>
# Over Docker bez sudo
docker ps
# Nasad sluzby z docker-services
git clone http://<server-ip>:3000/mates/mates-docker-services.git
cd mates-docker-services/portainer
cp .env.example .env
docker compose up -d
```
## Role
| Role | Účel |
|---|---|
| `common` | Update systému, base packages, timezone |
| `deploy-user` | Vytvoření `deploy` usera (UID 1000) |
| `ssh-keys` | Nasazení authorized_keys |
| `firewall` | UFW konfigurace |
| `docker` | Docker Engine + Compose + user v docker group |
| `directories` | `/home/deploy/{docker,scripts,backups,logs,...}` |
## Struktura
```
playbooks/
├── bootstrap-server.yml # Úvodní setup serveru (deploy user, SSH, UFW, fail2ban)
├── deploy-services.yml # Nasaď Docker služby
├── update-services.yml # Update všech služeb
── security-hardening.yml # Sysctl, auditd, auto-updates
mates-ansible/
├── README.md
├── ansible.cfg
├── inventory.example.yml
── group_vars/all.yml.example
├── playbooks/
│ ├── prepare-new-server.yml
│ ├── deploy-services.yml
│ ├── update-services.yml
│ └── security-hardening.yml
├── roles/
│ ├── common/
│ ├── deploy-user/
│ ├── ssh-keys/
│ ├── firewall/
│ ├── docker/
│ └── directories/
└── requirements.yml
```
## Detailní návody
Všechny playbooky mají komentáře v češtině. Detailní postupy najdeš v Jotty knowledge base.
Detailní postupy najdeš v Jotty knowledge base.
## Licence