services: traefik: image: traefik:v3.2 container_name: traefik command: - --api.dashboard=true - --api.insecure=false - --providers.docker=true - --providers.docker.exposedbydefault=false - --providers.docker.network=${TRAEFIK_NETWORK:-traefik} - --entrypoints.web.address=:80 - --entrypoints.websecure.address=:443 - --entrypoints.web.http.redirections.entrypoint.to=websecure - --entrypoints.web.http.redirections.entrypoint.scheme=https - --certificatesresolvers.letsencrypt.acme.tlschallenge=true - --certificatesresolvers.letsencrypt.acme.email=${TRAEFIK_ACME_EMAIL:-admin@example.com} - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json - --log.level=${TRAEFIK_LOG_LEVEL:-INFO} - --accesslog=true - --ping=true ports: - "80:80" - "443:443" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - traefik-certs:/letsencrypt networks: - traefik labels: - traefik.enable=true - traefik.http.routers.traefik-dashboard.rule=Host(`traefik.${ROOT_DOMAIN:-localhost}`) - traefik.http.routers.traefik-dashboard.entrypoints=${TRAEFIK_ENTRYPOINT:-websecure} - traefik.http.routers.traefik-dashboard.tls.certresolver=${TRAEFIK_CERT_RESOLVER:-letsencrypt} - traefik.http.routers.traefik-dashboard.service=api@internal - traefik.http.routers.traefik-dashboard.middlewares=traefik-auth@file - traefik.http.services.traefik-dashboard.loadbalancer.server.port=8080 restart: unless-stopped healthcheck: test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:8080/ping || exit 1"] interval: 10s timeout: 5s retries: 3 start_period: 5s volumes: traefik-certs: networks: traefik: name: ${TRAEFIK_NETWORK:-traefik} driver: bridge