diff --git a/traefik/compose.yml b/traefik/compose.yml new file mode 100644 index 0000000..b33c322 --- /dev/null +++ b/traefik/compose.yml @@ -0,0 +1,59 @@ +services: + traefik: + container_name: traefik + image: docker.io/library/traefik:v3.4.4 + restart: unless-stopped + security_opt: + - no-new-privileges:true + secrets: + - cf_api_token + command: + - --log.level=DEBUG + - --log.filepath=/var/log/traefik/traefik.log + - --accesslog=true + - --accesslog.format=json + - --accesslog.filepath=/var/log/traefik/access.log + - --api.dashboard=false + - --providers.docker=true + - --providers.docker.exposedbydefault=false + - --providers.docker.network=frontend + # Set up LetsEncrypt certificate resolver + - --certificatesresolvers.letsencrypt.acme.dnschallenge=true + - --certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare + - --certificatesresolvers.letsencrypt.acme.dnschallenge.resolvers=1.1.1.1:53,1.0.0.1:53 + - --certificatesresolvers.letsencrypt.acme.dnschallenge.delayBeforeCheck=20 + - --certificatesresolvers.letsencrypt.acme.email=${CF_EMAIL} + - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json + # staging environment of LE, remove for real certs + # - --certificatesresolvers.letsencrypt.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory + # Set up an insecure listener that redirects all traffic to TLS + - --entrypoints.web.address=:80 + - --entrypoints.websecure.address=:443 + - --entrypoints.web.http.redirections.entrypoint.to=websecure + - --entrypoints.web.http.redirections.entrypoint.scheme=https + # Set up the TLS configuration for our websecure listener + - --entrypoints.websecure.http.tls=true + - --entrypoints.websecure.http.tls.certResolver=letsencrypt + - --entrypoints.websecure.http.tls.domains[0].main=${DOMAIN} + - --entrypoints.websecure.http.tls.domains[0].sans=*.${DOMAIN} + environment: + - CF_DNS_API_TOKEN_FILE=/run/secrets/cf_api_token + volumes: + - ${APPDATA_PATH}/traefik/letsencrypt/acme.json:/acme.json + - ${APPDATA_PATH}/traefik/logs:/var/log/traefik + - /etc/localtime:/etc/localtime:ro + - /var/run/docker.sock:/var/run/docker.sock:ro + ports: + - 80:80 + - 443:443 + - 443:443/udp + networks: + - frontend + +networks: + frontend: + external: true + +secrets: + cf_api_token: + file: ${APPDATA_PATH}/traefik/secrets/cf_api_token