services: traefik: image: {{ traefik_image }} container_name: traefik restart: unless-stopped security_opt: - no-new-privileges:true ports: - "443:443" - "8081:8080" environment: CF_DNS_API_TOKEN: {{ cloudflare_api_token }} CLOUDFLARE_EMAIL: {{ traefik_acme_email }} volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - {{ traefik_data_dir }}/letsencrypt:/letsencrypt - {{ traefik_data_dir }}/dynamic:/dynamic command: - --api.dashboard={{ traefik_dashboard_enabled | lower }} - --log.level={{ traefik_log_level }} - --providers.docker=true - --providers.docker.exposedbydefault=false - --providers.docker.network={{ docker_network_name }} - --providers.file.directory=/dynamic - --providers.file.watch=true - --entrypoints.websecure.address=:443 - --entrypoints.websecure.http.tls.certResolver=letsencrypt - --entrypoints.websecure.http.tls.domains[0].main=hobbs.farm - --entrypoints.websecure.http.tls.domains[0].sans=*.hobbs.farm - --certificatesresolvers.letsencrypt.acme.dnschallenge=true - --certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare - --certificatesresolvers.letsencrypt.acme.email={{ traefik_acme_email }} - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/hf.json - --certificatesresolvers.letsencrypt.acme.dnschallenge.resolvers=1.1.1.1:53,1.0.0.1:53 labels: traefik.enable: "true" traefik.http.routers.traefik.rule: "Host(`{{ traefik_dashboard_host }}`)" traefik.http.routers.traefik.entrypoints: websecure traefik.http.routers.traefik.tls.certresolver: letsencrypt traefik.http.routers.traefik.tls.domains[0].main: "{{ domain }}" traefik.http.routers.traefik.tls.domains[0].sans: "*.{{ domain }}" traefik.http.routers.traefik.service: api@internal networks: - {{ docker_network_name }} networks: {{ docker_network_name }}: external: true