Traefik is a modern reverse proxy that auto-discovers services from Docker, Kubernetes, and other providers. No config files to update — add a container, Traefik routes to it.
Why Traefik?
- Auto-discovery: Detects new services from Docker labels
- Auto HTTPS: Let's Encrypt certificates
- Dashboard: Real-time monitoring UI
- Middleware: Rate limiting, auth, headers, circuit breaker
- Multiple providers: Docker, K8s, Consul, file
- HTTP/3: Built-in QUIC support
Docker Compose Setup
services:
traefik:
image: traefik:v3.0
command:
- --api.dashboard=true
- --providers.docker=true
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- --certificatesresolvers.letsencrypt.acme.email=you@example.com
- --certificatesresolvers.letsencrypt.acme.storage=/acme.json
- --certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web
ports:
- '80:80'
- '443:443'
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./acme.json:/acme.json
Auto-Discover Docker Services
my-app:
image: my-app:latest
labels:
- traefik.enable=true
- traefik.http.routers.my-app.rule=Host(`app.example.com`)
- traefik.http.routers.my-app.tls.certresolver=letsencrypt
- traefik.http.services.my-app.loadbalancer.server.port=3000
Just docker compose up — Traefik automatically routes app.example.com to port 3000 with HTTPS.
API: Get Routers
curl http://localhost:8080/api/http/routers
API: Get Services
curl http://localhost:8080/api/http/services
API: Health Check
curl http://localhost:8080/api/overview
Middleware: Rate Limiting
labels:
- traefik.http.middlewares.rate-limit.ratelimit.average=100
- traefik.http.middlewares.rate-limit.ratelimit.burst=50
- traefik.http.routers.my-app.middlewares=rate-limit
Middleware: Basic Auth
labels:
- traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/
- traefik.http.routers.dashboard.middlewares=auth
Middleware: Headers
labels:
- traefik.http.middlewares.security.headers.stsSeconds=31536000
- traefik.http.middlewares.security.headers.contentTypeNosniff=true
- traefik.http.middlewares.security.headers.frameDeny=true
Load Balancing
app:
image: my-app:latest
deploy:
replicas: 3
labels:
- traefik.enable=true
- traefik.http.routers.app.rule=Host(`app.example.com`)
- traefik.http.services.app.loadbalancer.server.port=3000
Traefik automatically load-balances across all 3 replicas.
Real-World Use Case
A small team ran 12 services on one VPS. With Traefik, adding a new service meant adding 3 Docker labels — no Nginx config editing, no cert renewal scripts. Deploy time went from 30 minutes to 2 minutes.
Need to automate data collection? Check out my Apify actors for ready-made scrapers, or email spinov001@gmail.com for custom solutions.
Top comments (0)