Files
homelab/boilerplates/traefik/compose.yaml

82 lines
2.8 KiB
YAML

---
services:
traefik:
image: docker.io/library/traefik:v3.6.8
container_name: traefik
security_opt:
- no-new-privileges:true
command:
- "--global.checkNewVersion=false"
- "--global.sendAnonymousUsage=false"
- "--log.level=info"
- "--ping=true"
- "--ping.entryPoint=ping"
- "--api.dashboard=true"
- "--api.insecure=true"
# Entrypoints
- "--entrypoints.ping.address=:8082"
- "--entrypoints.web.address=:80"
- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
- "--entrypoints.web.http.redirections.entryPoint.scheme=https"
- "--entrypoints.web.http.encodedCharacters.allowEncodedSlash=true"
- "--entrypoints.websecure.address=:443"
- "--entrypoints.websecure.http.encodedCharacters.allowEncodedSlash=true"
- "--entrypoints.websecure.http.tls.certResolver=cloudflare"
- "--entrypoints.websecure.http.tls.domains[0].main=local.mk-labs.cloud"
- "--entrypoints.websecure.http.tls.domains[0].sans=*.local.mk-labs.cloud"
- "--entrypoints.websecure.http.tls.domains[1].main=mk-labs.cloud"
- "--entrypoints.websecure.http.tls.domains[1].sans=*.mk-labs.cloud"
# ACME / Cloudflare DNS-01
- "--certificatesresolvers.cloudflare.acme.email=ryan.blundon@protonmail.com"
- "--certificatesresolvers.cloudflare.acme.storage=/var/traefik/certs/acme.json"
- "--certificatesresolvers.cloudflare.acme.caServer=https://acme-v02.api.letsencrypt.org/directory"
- "--certificatesresolvers.cloudflare.acme.dnsChallenge.provider=cloudflare"
- "--certificatesresolvers.cloudflare.acme.dnsChallenge.resolvers=1.1.1.1:53,8.8.8.8:53"
# Providers
- "--providers.docker=true"
- "--providers.docker.exposedByDefault=false"
- "--providers.docker.network=proxy"
- "--providers.file.directory=/etc/traefik/dynamic"
- "--providers.file.watch=true"
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- traefik_certs:/var/traefik/certs/:rw
- ./dynamic:/etc/traefik/dynamic:ro
environment:
- TZ=America/Chicago
- CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN}
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:8082/ping"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
networks:
- proxy
restart: unless-stopped
cloudflared:
image: docker.io/cloudflare/cloudflared:latest
container_name: cloudflared
restart: unless-stopped
command: tunnel --no-autoupdate run
environment:
- TUNNEL_TOKEN=${CLOUDFLARE_TUNNEL_TOKEN}
networks:
- proxy
depends_on:
traefik:
condition: service_healthy
networks:
proxy:
external: true
volumes:
traefik_certs:
driver: local