services: traefik: image: traefik:v3.6.10 command: - "--providers.docker=true" - "--entrypoints.web.address=:80" - "--entrypoints.websecure.address=:443" - "--certificatesresolvers.letsencrypt.acme.tlschallenge=true" - "[email protected]" - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json" ports: - "80:80" - "443:443" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - letsencrypt:/letsencrypt restart: unless-stopped
services: traefik: image: traefik:v3.6.10 command: - "--providers.docker=true" - "--entrypoints.web.address=:80" - "--entrypoints.websecure.address=:443" - "--certificatesresolvers.letsencrypt.acme.tlschallenge=true" - "[email protected]" - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json" ports: - "80:80" - "443:443" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - letsencrypt:/letsencrypt restart: unless-stopped
services: traefik: image: traefik:v3.6.10 command: - "--providers.docker=true" - "--entrypoints.web.address=:80" - "--entrypoints.websecure.address=:443" - "--certificatesresolvers.letsencrypt.acme.tlschallenge=true" - "[email protected]" - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json" ports: - "80:80" - "443:443" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - letsencrypt:/letsencrypt restart: unless-stopped
server { listen 80; server_name app.example.com; location / { proxy_pass http://app:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }
}
server { listen 80; server_name app.example.com; location / { proxy_pass http://app:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }
}
server { listen 80; server_name app.example.com; location / { proxy_pass http://app:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }
} - You run Docker containers and want automatic service discovery
- You add/remove services frequently
- You want SSL certificates managed automatically with zero intervention
- You prefer configuration-as-code via Docker labels
- You want a built-in dashboard to see routing status
- You're running microservices or multiple self-hosted apps - You need maximum raw throughput (high-traffic sites)
- You're serving static files alongside proxying
- You need granular control over every aspect of request handling
- You're comfortable writing and managing config files
- You're proxying non-Docker services on bare metal
- You need specific Nginx modules (Lua, njs, RTMP) - How to Self-Host Traefik with Docker Compose
- How to Self-Host Nginx with Docker Compose
- Nginx Proxy Manager vs Traefik
- Traefik vs Caddy
- Caddy vs Nginx
- Best Self-Hosted Reverse Proxies
- Reverse Proxy Explained