DEV Community

Alex Spinov
Alex Spinov

Posted on

Traefik Has a Free API — Heres How to Route Traffic With Auto-Discovery

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

API: Get Services

curl http://localhost:8080/api/http/services
Enter fullscreen mode Exit fullscreen mode

API: Health Check

curl http://localhost:8080/api/overview
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Middleware: Basic Auth

labels:
  - traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/
  - traefik.http.routers.dashboard.middlewares=auth
Enter fullscreen mode Exit fullscreen mode

Middleware: Headers

labels:
  - traefik.http.middlewares.security.headers.stsSeconds=31536000
  - traefik.http.middlewares.security.headers.contentTypeNosniff=true
  - traefik.http.middlewares.security.headers.frameDeny=true
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)