# 🚀 Traefik: Reverzní proxy pro Docker – správa subdomén a HTTPS 👉 [[1.1.1 O projektu]] 👉 [[1.1.2 Vlastní digitální svět (přehled článků)]] ## 📌 Úvod: Proč potřebujeme reverzní proxy? Když provozujeme více služeb v Dockeru, může být **správa IP adres a portů složitá**. Reverzní proxy **Traefik** tento problém elegantně řeší tím, že: - 📌 Umožňuje **přístup přes domény místo IP adres**. - 🔒 Automaticky nastavuje **HTTPS certifikáty**. - 🔀 Směruje provoz na správné služby podle pravidel. **V tomto článku si ukážeme jednoduchou konfiguraci Traefiku**, která vám umožní: ✅ **Přístup k Portaineru a Traefiku přes subdomény.** ✅ **Automatickou správu HTTPS certifikátů.** ✅ **Logování a ladění s pomocí AI.** ![[image_traefik.png]] --- ## 📜 Licence a cena | Aspekt | Detail | |--------|--------| | **Licence** | MIT (plně open-source) | | **Self-hosting** | ✅ Ano, zdarma bez omezení | | **Enterprise verze** | Traefik Enterprise (placená) | | **Cloud verze** | Traefik Hub (free tier + placené plány) | | **Zdrojový kód** | [github.com/traefik/traefik](https://github.com/traefik/traefik) | > Traefik je **100% open-source pod MIT licencí**. Můžete ho používat v produkci bez jakýchkoliv omezení. Traefik Enterprise přidává dashboard, podporu a pokročilé funkce pro velké organizace. ### Traefik vs Traefik Enterprise | Funkce | Traefik (zdarma) | Enterprise | |--------|------------------|------------| | Reverse proxy | ✅ | ✅ | | Let's Encrypt | ✅ | ✅ | | Docker/K8s provider | ✅ | ✅ | | Middlewares | ✅ | ✅ | | Distributed tracing | ❌ | ✅ | | API Gateway features | ❌ | ✅ | | Enterprise support | ❌ | ✅ | --- ## 🌍 Nastavení DNS pro subdomény Pro správné fungování musíme v DNS záznamech nastavit směřování domény na náš server: Vytvořte A záznam: - `traefik.moje-domena.cz` → **IP adresa serveru** - `portainer.moje-domena.cz` → **IP adresa serveru** --- ## 📄 Použití ENV proměnných pro bezpečnější konfiguraci Místo přímého zápisu citlivých údajů do `docker-compose.yml` budeme používat **`.env` soubor**. Vytvořte soubor `.env` ve stejném adresáři jako `docker-compose.yml`: ``` DOMAIN=moje-domena.cz [email protected] ``` Upravíme `docker-compose.yml`, aby načítal tyto proměnné pomocí syntaxe `${env_hodnota}`: ```yaml version: '3.8' services: traefik: image: "traefik:v2.10" container_name: "traefik" restart: always networks: - digilifehub_network ports: - "80:80" - "443:443" volumes: - "/var/run/docker.sock:/var/run/docker.sock" - "./traefik.yml:/etc/traefik/traefik.yml" - "./acme.json:/acme.json" env_file: - .env labels: - "traefik.enable=true" - "traefik.http.routers.api.rule=Host(`traefik.${DOMAIN}`)" - "traefik.http.routers.api.service=api@internal" - "traefik.http.routers.api.entrypoints=websecure" - "traefik.http.routers.api.tls.certresolver=myresolver" networks: digilifehub_network: external: true ``` --- ## 🛠️ Vytvoření souboru `traefik.yml` `traefik.yml` je konfigurační soubor pro Traefik jako takový, nezaměňujte s konfigurací pro docker kontejner (docker-compose.yml) ```yaml api: dashboard: true entryPoints: web: address: ":80" websecure: address: ":443" certificatesResolvers: myresolver: acme: email: "${EMAIL}" storage: "/acme.json" httpChallenge: entryPoint: "web" providers: docker: watch: true exposedByDefault: false ``` --- ## 📌 Spuštění kontejneru Nezapomeňte, že `.env` soubor **nesmí být součástí veřejného repozitáře**. Přidejte ho do `.gitignore`, pokud používáte Git: ``` .env ``` Nyní spusťte kontejner: ```sh docker-compose up -d ``` ✅ **Traefik nyní běží a můžeme přidávat služby!** --- ## 🌍 Přidání pravidel směrování (subdomény) ### **Portainer dostupný na `portainer.moje-domena.cz`** ```yaml services: portainer: image: portainer/portainer-ce:latest container_name: portainer restart: always networks: - digilifehub_network labels: - "traefik.enable=true" - "traefik.http.routers.portainer.rule=Host(`portainer.${DOMAIN}`)" - "traefik.http.routers.portainer.entrypoints=websecure" - "traefik.http.routers.portainer.tls.certresolver=myresolver" ``` ✅ **Portainer je nyní dostupný přes HTTPS na `portainer.moje-domena.cz`!** --- ## 🔒 Automatické generování SSL certifikátů s Let's Encrypt Traefik automaticky vygeneruje **bezpečné certifikáty**, pokud: 1️⃣ Máme **platnou doménu** (např. `moje-domena.cz`). 2️⃣ Doména směřuje na náš server pomocí DNS A záznamu. 3️⃣ Máme správně nastavený **ACME cert resolver** v `traefik.yml`. Traefik se postará o **automatickou obnovu certifikátů**! ✅ --- ## 🛠️ Debugging a logování v Traefiku **Pokud něco nefunguje:** 📌 Zkontrolujte logy příkazem: ```sh docker logs traefik --follow ``` 📌 **Jak použít AI k řešení chyb?** - **1️⃣ Zkopírujte chybovou hlášku z logů.** - **2️⃣ Vložte ji do ChatGPT/Gemini a zeptejte se: "Co způsobuje tuto chybu a jak ji opravit?"** - **3️⃣ AI vám navrhne řešení.** ✅ **Toto vám ušetří hodiny hledání řešení!** --- ## 🔎 Kam dál? – Pokud chcete jít do hloubky 📌 **Oficiální dokumentace Traefiku:** [https://doc.traefik.io/traefik/](https://doc.traefik.io/traefik/) 📌 Existuje spousta tutoriálů, ale **tento článek ukazuje funkční minimum**. 📌 **V dalším díle:** Jak za Traefikem nasadit první reálnou aplikaci! 🚀 --- ## 💡 Praktické použití ### Use case 1: Multi-tenant SaaS aplikace **Situace:** Provozujete SaaS produkt, kde každý zákazník má vlastní subdoménu (`zakaznik1.app.cz`, `zakaznik2.app.cz`). Ručně spravovat nginx konfigurace je noční můra. **Řešení s Traefik:** - **Wildcard certifikát:** Jeden certifikát pro `*.app.cz` - **Dynamic config:** Nový kontejner = automaticky nová subdoména - **Labels:** Stačí přidat `traefik.http.routers.app.rule=Host(\`zakaznik1.app.cz\`)` - **Zero downtime:** Rolling updates bez výpadku - **Load balancing:** Automatické rozdělení zátěže mezi repliky **Výsledek:** Nový tenant za minuty, ne hodiny konfigurace. ### Use case 2: Homelab s desítkami služeb **Situace:** Máte doma server s 15+ self-hosted aplikacemi. Pamatovat si porty (Plex:32400, Nextcloud:8080, Home Assistant:8123...) je nemožné. **Řešení s Traefik:** - **Subdomény:** `plex.home.lan`, `cloud.home.lan`, `ha.home.lan` - **Lokální DNS:** Pi-hole nebo AdGuard směruje `*.home.lan` na server - **HTTPS:** Self-signed nebo Let's Encrypt s DNS challenge - **Dashboard:** Přehled všech služeb na jednom místě - **Middleware:** Základní auth pro nezabezpečené aplikace **Výsledek:** Profesionální homelab jako v enterprise prostředí. ### Use case 3: Blue-green deployment **Situace:** Nasazujete novou verzi aplikace, ale nechcete riskovat výpadek. Potřebujete možnost okamžitého rollbacku. **Řešení s Traefik:** - **Dva kontejnery:** `app-blue` (stávající), `app-green` (nová verze) - **Weighted routing:** 100% na blue, 0% na green - **Postupné přepínání:** 90/10 → 50/50 → 0/100 - **Health checks:** Automatický rollback při selhání - **Canary:** Část uživatelů na nové verzi pro testování **Výsledek:** Bezpečné nasazení bez stresu a nočních výpadků. ### Use case 4: API Gateway pro microservices **Situace:** Máte 10 microservices, každá na jiném portu. Frontend potřebuje jednotný endpoint. **Řešení s Traefik:** - **Path routing:** `/api/users` → users-service, `/api/orders` → orders-service - **Strip prefix:** Služba nemusí znát svůj prefix - **Rate limiting:** Middleware pro ochranu před DDoS - **CORS:** Centrální konfigurace pro všechny služby - **Headers:** Přidání auth headerů, request ID **Výsledek:** Jeden endpoint `api.app.cz` pro všechny služby. ### Use case 5: Automatické HTTPS pro WordPress multisite **Situace:** Provozujete WordPress multisite s 50+ weby. Každý web má vlastní doménu. Ruční správa certifikátů je neúnosná. **Řešení s Traefik:** - **Let's Encrypt:** Automatické vystavení certifikátu při prvním requestu - **HTTP → HTTPS redirect:** Middleware pro všechny weby - **Renewal:** Automatická obnova před expirací - **Wildcard + individual:** Kombinace pro subdomény i vlastní domény - **Rate limits:** Ochrana před Let's Encrypt limity **Výsledek:** HTTPS pro všechny weby bez jediného manuálního kroku. --- ## 🆚 Traefik vs alternativy | Nástroj | Licence | Docker native | Let's Encrypt | UI | |---------|---------|---------------|---------------|-----| | **Traefik** | MIT | ✅ | ✅ | ✅ Dashboard | | **nginx** | BSD | ❌ (ruční) | ⚠️ certbot | ❌ | | **Caddy** | Apache 2.0 | ⚠️ | ✅ | ❌ | | **HAProxy** | GPL | ❌ | ❌ | ⚠️ Stats | | **nginx-proxy** | MIT | ✅ | ✅ (companion) | ❌ | > **Traefik** je nejlepší volba pro Docker prostředí díky native integraci. Caddy je jednodušší pro statické weby, nginx pro maximální výkon a kontrolu. --- ## 🏁 Závěr a další kroky ✅ **Máme reverzní proxy, subdomény a HTTPS!** ✅ **MIT licence – plně open-source, bez omezení pro produkci.** ✅ **Portainer a Traefik jsou dostupné přes subdomény.** ✅ **Používáme `.env` pro bezpečnější správu proměnných.** 👉 **Používáte Traefik, nebo preferujete jiná řešení?** 🚀 --- ### ⏪ Související články ⏩ > **🔙 Předchozí článek:** > [[2025-02-03 Portainer (Jak jednoduše spravovat Docker kontejnery přes webové rozhraní)|Portainer (správa Docker kontejnerů)]] > > **🔜 Následující článek:** > [[2025-02-10 PostgreSQL (relační databáze)|PostgreSQL (relační databáze)]] #docker #traefik #osobniDigitalizace #digilifehub