Traefik działa jako centralny reverse proxy dla wszystkich usług HTTP/HTTPS w homelabie.
Dzięki niemu:
*.lab (np. portainer.lab, gitea.lab, docs.lab).10.10.20.10:9000, 10.10.20.10:3002).10.10.20.10)/srv/docker/traefik/compose.ymlproxy (external, współdzielona z innymi usługami)80 – HTTP (entrypoint web)443 – HTTPS (entrypoint websecure, na razie bez certyfikatów)8085 – Dashboard Traefika (dostępny z LAN)compose.ymlPlik /srv/docker/traefik/compose.yml:
version: "3.8"
services:
traefik:
image: traefik:v2.11
container_name: traefik
restart: unless-stopped
command:
# Entrypoint HTTP (port 80 w kontenerze)
- "--entrypoints.web.address=:80"
# Entrypoint HTTPS (port 443 w kontenerze)
- "--entrypoints.websecure.address=:443"
# Provider Docker
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
# Dashboard / API
- "--api.dashboard=true"
- "--api.insecure=true" # dashboard bez auth, na :8080 w kontenerze
# Logi Traefika
- "--log.level=INFO"
ports:
- "80:80" # HTTP z LAN
- "443:443" # HTTPS z LAN (później certy)
- "8085:8080" # dashboard: http://10.10.20.10:8085
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- proxy
networks:
proxy:
external: true
--providers.docker=true – Traefik automatycznie wykrywa kontenery Dockera.
--providers.docker.exposedbydefault=false – kontenery nie są automatycznie wystawiane; trzeba dodać etykietę traefik.enable=true.
--api.dashboard=true + --api.insecure=true – włącza dashboard Traefika bez uwierzytelniania (dostępny tylko z LAN).
Sieć proxy jest external – musi być utworzona ręcznie przed uruchomieniem Traefika:
docker network create proxy
Dashboard Traefika jest dostępny pod adresem:
http://10.10.20.10:8085
W dashboardzie widać aktywne routery (HTTP/HTTPS), usługi (backendy), middlewares oraz status certyfikatów. Jest to podstawowe narzędzie do sprawdzania, czy Traefik poprawnie „widzi” nowo dodane kontenery.
Traefik działa w oparciu o etykiety (labels) dodawane do kontenerów Dockera.
Podstawowy schemat:
http://portainer.lab.10.10.20.10.10.10.20.10:80 z nagłówkiem Host: portainer.lab.portainer.lab) i przekierowuje ruch do właściwego kontenera.portainer.lab)Plik /srv/docker/portainer/compose.yml:
labels:
- "traefik.enable=true"
- "traefik.http.routers.portainer.rule=Host(`portainer.lab`)"
- "traefik.http.routers.portainer.entrypoints=web"
- "traefik.http.services.portainer.loadbalancer.server.port=9000"
docs.lab)Plik /srv/docker/docs/compose.yml :
labels:
- "traefik.enable=true"
- "traefik.http.routers.docs.rule=Host(`docs.lab`)"
- "traefik.http.routers.docs.entrypoints=web"
- "traefik.http.services.docs.loadbalancer.server.port=8000"
gitea.lab)Aby Gitea działała poprawnie za Traefikiem, musi być w sieci proxy oraz mieć ustawiony ROOT_URL:
# Fragment labels w compose.yml Gitei
labels:
- "traefik.enable=true"
- "traefik.http.routers.gitea.rule=Host(`gitea.lab`)"
- "traefik.http.routers.gitea.entrypoints=web"
- "traefik.http.services.gitea.loadbalancer.server.port=3000"
Aby dodać nową usługę (np. Grafana, Uptime Kuma), należy:
proxy.traefik.* (zgodnie z przykładami powyżej).<nazwa>.lab → 10.10.20.10.docker compose up -d).*.lab bez konieczności pamiętania numerów portów.compose.yml.