# 🚀 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