Traefik docker-compose with Trauth, Wildcard Certs & Metrics
Ref: https://sensepost.com/blog/2020/building-a-hipster-aware-pi-home-server/
Traefik docker-compose with Trauth, Wildcard Certs & Metrics
Ref: https://sensepost.com/blog/2020/building-a-hipster-aware-pi-home-server/
| CF_API_EMAIL=email | |
| CF_API_KEY=key |
| version: '3' | |
| services: | |
| traefik: | |
| image: traefik:2.3 | |
| container_name: traefik | |
| command: | |
| - --log.level=INFO | |
| - --api.dashboard=true | |
| - --providers.docker | |
| - --providers.docker.exposedByDefault=false | |
| - --providers.file.filename=/static.yml | |
| - --providers.file.watch=true | |
| # Web UIs | |
| - --entryPoints.web-secure.address=:443 | |
| # PiHole DNS | |
| - --entryPoints.53-tcp.address=:53 | |
| - --entryPoints.53-udp.address=:53/udp | |
| # ACME | |
| - --certificatesResolvers.primary.acme.email=email | |
| - --certificatesResolvers.primary.acme.storage=acme.json | |
| - --certificatesResolvers.primary.acme.dnsChallenge=true | |
| - --certificatesResolvers.primary.acme.dnsChallenge.provider=cloudflare | |
| - --certificatesResolvers.primary.acme.dnsChallenge.delayBeforeCheck=0 | |
| # Metrics | |
| - --metrics.influxdb=true | |
| - --metrics.influxdb.address=http://influxdb.stats:8086 | |
| - --metrics.influxdb.protocol=http | |
| - --metrics.influxdb.pushInterval=30s | |
| - --metrics.influxdb.database=traefik | |
| - --metrics.influxdb.username=traefik | |
| - --metrics.influxdb.password=password | |
| env_file: | |
| - cloudflare.env # check the cloudflare provider here: https://docs.traefik.io/v2.0/https/acme/#providers | |
| ports: | |
| - "443:443" | |
| - "53:53/udp" | |
| - "53:53" | |
| volumes: | |
| - /var/run/docker.sock:/var/run/docker.sock:ro | |
| - ./data/acme.json:/acme.json | |
| - ./config/static.yml:/static.yml | |
| restart: unless-stopped | |
| labels: | |
| - "com.ouroboros.enable=true" | |
| - "traefik.enable=true" | |
| - "traefik.http.routers.api.rule=Host(`traefik.internal.domain.com`)" | |
| - "traefik.http.routers.api.service=api@internal" | |
| - "traefik.http.routers.api.entrypoints=web-secure" | |
| - "traefik.http.routers.api.tls.certResolver=primary" | |
| - "traefik.http.routers.api.middlewares=trauth" | |
| # wildcard certs | |
| - "traefik.http.routers.api.tls.domains[0].main=internal.domain.com" | |
| - "traefik.http.routers.api.tls.domains[0].sans=*.internal.domain.com" | |
| # middleware - sso basic auth using trauth | |
| - "traefik.http.middlewares.trauth.forwardauth.address=http://trauth.web:8080/" | |
| networks: | |
| - web | |
| - stats | |
| trauth: | |
| build: # 'cause I don't have a multi-arch build on dockerhub | |
| context: https://github.com/leonjza/trauth.git | |
| dockerfile: Dockerfile | |
| image: trauth:local | |
| container_name: trauth | |
| environment: | |
| - TRAUTH_DOMAIN=internal.domain.com | |
| - TRAUTH_PASSWORD_FILE_LOCATION=/config/htpass | |
| volumes: | |
| - ./htpass:/config/htpass | |
| restart: unless-stopped | |
| networks: | |
| - web | |
| networks: | |
| web: | |
| external: true | |
| stats: | |
| external: true |
| # file: config/static.yml | |
| http: | |
| services: | |
| gateway-service: | |
| loadBalancer: | |
| passHostHeader: false | |
| servers: | |
| - url: "http://192.168.99.1/" | |
| routers: | |
| gateway: | |
| tls: | |
| certResolver: primary | |
| rule: "Host(`gateway.internal.domain.com`)" | |
| service: gateway-service |