# ๐Ÿ› Architecture > Jak je celรก home infrastruktura posklรกdanรก. ## ๐ŸŽฏ Pล™ehled Home lab bฤ›ลพรญ na jednom fyzickรฉm serveru (Ubuntu 22.04/24.04 LTS) s Docker. Vลกechny sluลพby jsou **containerizovanรฉ**, za **Nginx Proxy Manager** (reverse proxy + HTTPS). ## ๐ŸŒ Vrstvy ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Layer 7: Aplikaฤnรญ sluลพby โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚Nextcloud โ”‚ โ”‚Vaultwardenโ”‚ โ”‚ Gitea โ”‚ โ”‚ Jotty โ”‚ โ”‚ โ”‚ โ”‚ :11000 โ”‚ โ”‚ :2999 โ”‚ โ”‚ :3000/222โ”‚ โ”‚ :1122 โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ Portainerโ”‚ โ”‚ Plex โ”‚ โ”‚Audiobook-โ”‚ โ”‚ Calibre โ”‚ โ”‚ โ”‚ โ”‚ :9000 โ”‚ โ”‚ :32400 โ”‚ โ”‚shelf:13378โ”‚ โ”‚-Web:8083 โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ ... dalลกรญch 7 sluลพeb (rustdesk, wikijs, speedtest, ...) โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ–ฒ โ”‚ HTTPS โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Layer 4-7: Reverznรญ proxy + Let's Encrypt โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ Nginx Proxy Manager (:80, :443) โ”‚ โ”‚ โ”‚ โ”‚ - SSL terminace (Let's Encrypt) โ”‚ โ”‚ โ”‚ โ”‚ - HTTP โ†’ HTTPS redirect โ”‚ โ”‚ โ”‚ โ”‚ - Access Lists โ”‚ โ”‚ โ”‚ โ”‚ - Load balancing (volitelnฤ›) โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ–ฒ โ”‚ HTTP โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Layer 2-3: Docker bridge networks โ”‚ โ”‚ Kaลพdรก sluลพba mรก vlastnรญ bridge: โ”‚ โ”‚ portainer_default, vaultwarden_default, gitea_default, ... โ”‚ โ”‚ Izolace: sluลพby mezi sebou nekomunikujรญ (default) โ”‚ โ”‚ Komunikace: pล™es reverznรญ proxy (NPM) โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ–ฒ โ”‚ Docker API โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Layer 1: Fyzickรฝ server โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ Ubuntu 22.04/24.04 LTS โ”‚ โ”‚ โ”‚ โ”‚ - Docker CE 29.x โ”‚ โ”‚ โ”‚ โ”‚ - Portainer CE (UI pro Docker) โ”‚ โ”‚ โ”‚ โ”‚ - Watchtower (auto-update monitoring) โ”‚ โ”‚ โ”‚ โ”‚ - deploy user (UID 1000) โ”‚ โ”‚ โ”‚ โ”‚ - UFW firewall + fail2ban โ”‚ โ”‚ โ”‚ โ”‚ - SSH hardening โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ## ๐Ÿ”Œ Sluลพby (detail) | Sluลพba | Port | Databรกze | Volume | Backup | |---|---|---|---|---| | Portainer | 9000, 9443 | SQLite (internรญ) | `./data` | rsync | | Nginx Proxy Manager | 80, 443, 81 | MariaDB | `./data`, `./letsencrypt` | rsync | | Vaultwarden | 2999 | SQLite | `./data` | rsync (kritickรฉ!) | | Nextcloud AIO | 11000 | MariaDB | `./data` | AIO Borg | | Gitea | 3000, 222 | SQLite | `./gitea` | rsync | | Jotty | 1122 | SQLite | `./data` | rsync | | RustDesk | 21115-21119 | SQLite | `./data` | rsync | | Audiobookshelf | 13378 | SQLite | `./data` + `./audiobooks` | rsync | | Calibre-Web | 8083 | SQLite | `./data` + `./books` | rsync | | Plex | 32400 | SQLite | `./data` + `./media` | rsync | | Erugo | 61080 | SQLite | `./data` | rsync | | Wiki.js | 9180 | MariaDB | `./data` | rsync | | Speedtest | 8765 | SQLite | `./data` | rsync | | Watchtower | โ€“ | โ€“ | โ€“ | โ€“ | ## ๐Ÿ’พ Zรกlohovacรญ schรฉma ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Server โ”‚ rsync (dennฤ›, 03:00) โ†’ NAS /Volumes/Backups โ”‚ /home/.../โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ–ผ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ NAS โ”‚ Off-site sync (Backblaze B2, tรฝdnฤ›) โ”‚ /Backups/ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` Viz `install-scripts/backup-all.sh` a `install-scripts/restore-all.sh`. ## ๐Ÿ” Bezpeฤnost ### Perimetrie - **UFW** โ€“ default deny, povoleno: SSH, HTTP, HTTPS - **fail2ban** โ€“ ban po 3 neรบspฤ›ลกnรฝch SSH pokusech - **Cloudflare Tunnel** (volitelnฤ›) โ€“ pล™รญstup zvenฤรญ bez veล™ejnรฉ IP ### Auth - **SSH klรญฤe** โ€“ hesla zakรกzรกna (`PasswordAuthentication no`) - **2FA** โ€“ na vลกech web sluลพbรกch (Gitea, Vaultwarden, Nextcloud, โ€ฆ) - **Vaultwarden** โ€“ single source of truth pro hesla ### Network - **Bridge isolation** โ€“ sluลพby spolu nekomunikujรญ (default) - **No host network** โ€“ kromฤ› Plex (HW transkรณdovรกnรญ) - **DNS-over-HTTPS** (volitelnฤ›) ## ๐Ÿ”„ Deployment workflow ``` Developer โ”‚ โ”œโ”€โ†’ git push (do Gitea) โ”‚ โ”œโ”€โ†’ Ansible (na server) โ”‚ โ”‚ โ”‚ โ””โ”€โ†’ docker compose pull && up -d โ”‚ โ””โ”€โ†’ Watchtower (auto, tรฝdnฤ›) โ””โ”€โ†’ image: pull, container: restart ``` Viz `ansible/playbooks/`. ## ๐Ÿ“Š Monitoring - **Watchtower** โ€“ Docker image notifikace (email/Telegram) - **Speedtest Tracker** โ€“ internet speed - **Nextcloud Talk** โ€“ internรญ chat - **Portainer** โ€“ Docker container status ## ๐Ÿ›  Maintenance | รškol | Jak ฤasto | Skript/Ansible | |---|---|---| | Backup | Dennฤ› 03:00 | `backup-all.sh` (cron) | | Update OS | Tรฝdnฤ› | `apt update && apt upgrade` | | Update Docker image | Tรฝdnฤ› (auto) | Watchtower | | Cert renewal | Auto (Let's Encrypt 30d) | NPM internรญ | | Health check | Dennฤ› | `docker ps` + alerting | ## ๐Ÿ”ฎ Roadmap - **Kubernetes** โ€“ pล™echod z docker compose na k3s (1 server node, multi-workload) - **GitOps** โ€“ ArgoCD pro plnou automatizaci - **CI/CD** โ€“ Gitea Actions pro testovรกnรญ Ansible playbooks - **Off-site backup** โ€“ Backblaze B2 s encryption - **Monitoring stack** โ€“ Prometheus + Grafana + Loki ## ๐Ÿ“š Reference - [Docker docs](https://docs.docker.com/) - [Nginx Proxy Manager](https://nginxproxymanager.com/) - [Ansible best practices](https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html) - [12-factor app](https://12factor.net/)