--- services: traefik: image: traefik:latest container_name: traefik restart: unless-stopped command: - "--experimental.plugins.bouncer.modulename=github.com/maxlerebourg/crowdsec-bouncer-traefik-plugin" - "--experimental.plugins.bouncer.version=v1.4.6" security_opt: - no-new-privileges:true networks: - proxy ports: - 8000:80 - 443:443 - 8080:8080 # - 443:443/tcp # Uncomment if you want HTTP3 # - 443:443/udp # Uncomment if you want HTTP3 environment: CF_DNS_API_TOKEN_FILE: /run/secrets/cf_api_token # note using _FILE for docker secrets # CF_DNS_API_TOKEN: ${CF_DNS_API_TOKEN} # if using .env TRAEFIK_DASHBOARD_CREDENTIALS: ${TRAEFIK_DASHBOARD_CREDENTIALS} secrets: - cf_api_token env_file: .env # use .env volumes: - /etc/localtime:/etc/localtime:ro - /var/run/docker.sock:/var/run/docker.sock:ro - ./data/traefik.yml:/traefik.yml:ro - ./data/acme.json:/acme.json - ./data/config.yml:/config.yml:ro - ./data/logs:/var/log/traefik labels: - "traefik.enable=true" - "traefik.http.routers.traefik.entrypoints=http" - "traefik.http.routers.traefik.rule=Host(`traefik-dashboard.example.com`)" - "traefik.http.middlewares.traefik-auth.basicauth.users=${TRAEFIK_DASHBOARD_CREDENTIALS}" - "traefik.http.middlewares.traefik-https-redirect.redirectscheme.scheme=https" - "traefik.http.middlewares.sslheader.headers.customrequestheaders.X-Forwarded-Proto=https" - "traefik.http.routers.traefik.middlewares=traefik-https-redirect" - "traefik.http.routers.traefik-secure.entrypoints=https" - "traefik.http.routers.traefik-secure.rule=Host(`traefik-dashboard.example.com`)" - "traefik.http.routers.traefik-secure.middlewares=traefik-auth" - "traefik.http.routers.traefik-secure.tls=true" - "traefik.http.routers.traefik-secure.tls.certresolver=cloudflare" - "traefik.http.routers.traefik-secure.tls.domains[0].main=example.com" - "traefik.http.routers.traefik-secure.tls.domains[0].sans=*.example.com" - "traefik.http.routers.traefik-secure.service=api@internal" depends_on: - "crowdsec" crowdsec: image: crowdsecurity/crowdsec:latest container_name: "crowdsec" restart: unless-stopped environment: COLLECTIONS: crowdsecurity/traefik crowdsecurity/appsec-virtual-patching crowdsecurity/appsec-generic-rules CUSTOM_HOSTNAME: crowdsec # We need to register one api key per service we will use BOUNCER_KEY_TRAEFIK: someapikey (api key removed) volumes: - ./crowdsec-data/etc/crowdsec/acquis.yaml:/etc/crowdsec/acquis.yaml:ro - ./data/logs:/var/log/traefik:ro - ./crowdsec-data/var/lib/data:/var/lib/crowdsec/data - ./crowdsec-data/etc/crowdsec:/etc/crowdsec - ./crowdsec-data/etc/crowdsec/acquis.d/appsec.yaml:/etc/crowdsec/acquis.d/appsec.yaml labels: - "traefik.enable=false" networks: - proxy secrets: cf_api_token: file: ./cf_api_token.txt networks: proxy: external: true