-
-
Notifications
You must be signed in to change notification settings - Fork 1
Traefik Setup
Configure Traefik as your reverse proxy for unified access to all services.
Traefik provides:
- π Automatic HTTPS via Let's Encrypt
- π·οΈ Docker Integration - Auto-discovery via labels
- π Subdomains -
radarr.example.com,sonarr.example.com - π Dashboard - Monitor routes and services
- π Middleware - Authentication, headers, rate limiting
From App Manager, add Traefik to your stack.
Configure your domain in ~/.config/easiarr/.env:
CLOUDFLARE_DNS_ZONE=example.comMain Menu β Generate docker-compose.yml
cd ~/.config/easiarr
docker compose up -deasiarr generates Traefik configuration in ~/.config/easiarr/config/traefik/:
traefik/
βββ traefik.yml # Static configuration
βββ dynamic/ # Dynamic configuration
β βββ config.yml
βββ letsencrypt/ # Certificates
βββ acme.json
api:
dashboard: true
insecure: true
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
certificatesResolvers:
letsencrypt:
acme:
email: your@email.com
storage: /letsencrypt/acme.json
httpChallenge:
entryPoint: web
providers:
docker:
exposedByDefault: false
file:
directory: /etc/traefik/dynamiceasiarr automatically adds Traefik labels to services:
labels:
- "traefik.enable=true"
- "traefik.http.routers.radarr.rule=Host(`radarr.example.com`)"
- "traefik.http.routers.radarr.entrypoints=websecure"
- "traefik.http.routers.radarr.tls.certresolver=letsencrypt"
- "traefik.http.services.radarr.loadbalancer.server.port=7878"| Label | Purpose |
|---|---|
traefik.enable=true |
Enable Traefik for this container |
traefik.http.routers.<name>.rule |
Routing rule (hostname) |
traefik.http.routers.<name>.entrypoints |
HTTP or HTTPS |
traefik.http.routers.<name>.tls.certresolver |
Certificate resolver |
traefik.http.services.<name>.loadbalancer.server.port |
Service port |
easiarr can configure basic authentication:
labels:
- "traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$..."
- "traefik.http.routers.radarr.middlewares=auth"This uses GLOBAL_USERNAME and GLOBAL_PASSWORD when Cloudflare Access is not configured.
For SSO via Authentik:
# Dynamic config
http:
middlewares:
authentik:
forwardAuth:
address: http://authentik:9000/outpost.goauthentik.io/auth/traefik
trustForwardHeader: true
authResponseHeaders:
- X-authentik-username
- X-authentik-groupsAccess the Traefik dashboard:
http://localhost:8083
- HTTP Routers - View all configured routes
- Services - Backend services and health
- Middlewares - Applied middlewares
- Entrypoints - HTTP/HTTPS listeners
In production, protect the dashboard:
# Dynamic config
http:
routers:
dashboard:
rule: Host(`traefik.example.com`)
service: api@internal
middlewares:
- autheasiarr configures automatic HTTPS via Let's Encrypt:
certificatesResolvers:
letsencrypt:
acme:
email: your@email.com
storage: /letsencrypt/acme.json
httpChallenge:
entryPoint: webFor wildcard certificates or when port 80 is blocked:
certificatesResolvers:
cloudflare:
acme:
email: your@email.com
storage: /letsencrypt/acme.json
dnsChallenge:
provider: cloudflare
resolvers:
- "1.1.1.1:53"Environment:
CF_API_EMAIL=your@email.com
CF_API_KEY=your-global-api-key# radarr.example.com β radarr:7878
- "traefik.http.routers.radarr.rule=Host(`radarr.example.com`)"# example.com/radarr β radarr:7878
- "traefik.http.routers.radarr.rule=Host(`example.com`) && PathPrefix(`/radarr`)"
- "traefik.http.middlewares.radarr-strip.stripprefix.prefixes=/radarr"
- "traefik.http.routers.radarr.middlewares=radarr-strip"- "traefik.http.routers.radarr.rule=Host(`radarr.example.com`) || Host(`movies.example.com`)"http:
middlewares:
ratelimit:
rateLimit:
average: 100
burst: 50http:
middlewares:
secure-headers:
headers:
stsSeconds: 31536000
stsIncludeSubdomains: true
stsPreload: true
forceSTSHeader: truehttp:
middlewares:
local-only:
ipWhiteList:
sourceRange:
- "192.168.0.0/16"
- "10.0.0.0/8"Internet β Cloudflare β Cloudflared β Traefik β Services
Internet β Router (Port 80/443) β Traefik β Services
LAN β Traefik β Services
-
Check ACME logs:
docker logs traefik 2>&1 | grep -i acme
-
Verify domain DNS points to your server
-
Check rate limits - Let's Encrypt has rate limits
- Check labels on container
- Verify container is running
- Check Traefik dashboard for route status
-
View Traefik logs:
docker logs traefik
- Service not healthy - Check app container
- Wrong port in labels
- Network connectivity - Ensure same Docker network
- Route not matched - Check Host rule
- Traefik not enabled for container
- Wrong entrypoint (HTTP vs HTTPS)
- Infrastructure#traefik - Traefik container reference
- Cloudflare-Tunnel-Setup - Cloudflare integration
- Configuration - Configuration reference
easiarr - It could be easiarr | GitHub | npm | TRaSH Guides