in Docker Compose with `$`\n\n## Service Configuration\n- `loadbalancer.server.port` when container exposes multiple — Traefik can't guess\n- Health check: `healthcheck.path=/health` — removes unhealthy from rotation\n- Sticky sessions: `loadbalancer.sticky.cookie.name=srv_id` — for stateful apps\n\n## Common Mistakes\n- Router without entryPoint — defaults may not be what you expect\n- Forgetting `traefik.docker.network` with multiple networks — Traefik picks wrong one\n- ACME storage not persisted — certificates regenerated, hits rate limit\n- Dashboard exposed without auth — `api.insecure=true` is dangerous in production\n- PathPrefix without StripPrefix — backend receives full path, may 404\n- Services on different ports — each needs explicit port label\n\n## File Provider\n- `watch=true` for hot reload — otherwise restart Traefik on changes\n- Can coexist with Docker provider — useful for external services\n- Define routers, services, middlewares in YAML — same concepts as labels\n\n## Debugging\n- `--log.level=DEBUG` for troubleshooting — verbose but helpful\n- Dashboard shows routers, services, middlewares — verify configuration\n- `--api.insecure=true` for local dev only — secure with auth in production\n","licenseDocuments":[]}}
界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
部署与运维 · SKILL.md

Traefik

Traefik

【部署与运维】Avoid common Traefik mistakes — router priority, TLS configuration, Docker labels syntax, and middleware ordering.

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

name: Traefik slug: traefik version: 1.0.0 description: Avoid common Traefik mistakes — router priority, TLS configuration, Docker labels syntax, and middleware ordering. homepage: https://clawic.com/skills/traefik metadata: clawdbot: emoji: 🔀 os: - linux - darwin - win32 displayName: Traefik

Router Basics

  • Router must have rule AND service — missing either = not working
  • Rule priority: longer rules win by default — explicit priority to override
  • Host() is case-insensitive — Host(\example.com`)` matches Example.com
  • Multiple hosts: Host(\a.com`) || Host(`b.com`)` — OR logic

Docker Labels Syntax

  • Labels on container, not compose service level — deploy.labels for Swarm
  • Backticks for rules in Docker Compose — Host(\example.com`)` with escaping
  • Enable per-container: traefik.enable=true — if exposedByDefault=false
  • Service name auto-generated from container — or set explicitly with traefik.http.services.myservice.loadbalancer.server.port=80

TLS and Certificates

  • EntryPoint websecure needs TLS config — otherwise plain HTTP on 443
  • Let's Encrypt: certificatesResolvers.myresolver.acme.email required — registration fails without
  • HTTP challenge needs port 80 open — DNS challenge for wildcard or closed 80
  • tls=true on router activates TLS — tls.certresolver=myresolver for auto-cert
  • Staging ACME for testing — caServer to staging URL, avoids rate limits

EntryPoints

  • Define in static config — --entrypoints.web.address=:80
  • Redirect HTTP to HTTPS at entrypoint level — cleaner than per-router middleware
  • Router binds to entrypoint with entryPoints=web,websecure — comma-separated list

Middlewares

  • Chain order matters — first middleware wraps all following
  • Middleware defined once, used by many routers — middlewares=auth,compress
  • Common: stripPrefix, redirectScheme, basicAuth, rateLimit
  • BasicAuth: use htpasswd format — escape $ in Docker Compose with $

Service Configuration

  • loadbalancer.server.port when container exposes multiple — Traefik can't guess
  • Health check: healthcheck.path=/health — removes unhealthy from rotation
  • Sticky sessions: loadbalancer.sticky.cookie.name=srv_id — for stateful apps

Common Mistakes

  • Router without entryPoint — defaults may not be what you expect
  • Forgetting traefik.docker.network with multiple networks — Traefik picks wrong one
  • ACME storage not persisted — certificates regenerated, hits rate limit
  • Dashboard exposed without auth — api.insecure=true is dangerous in production
  • PathPrefix without StripPrefix — backend receives full path, may 404
  • Services on different ports — each needs explicit port label

File Provider

  • watch=true for hot reload — otherwise restart Traefik on changes
  • Can coexist with Docker provider — useful for external services
  • Define routers, services, middlewares in YAML — same concepts as labels

Debugging

  • --log.level=DEBUG for troubleshooting — verbose but helpful
  • Dashboard shows routers, services, middlewares — verify configuration
  • --api.insecure=true for local dev only — secure with auth in production
我的收藏