# docker-compose.traefik.yml — overlay per integrare Cerbero_mcp con un # Traefik già esistente sull'host (es. lo stesso VPS che ospita Gitea). # # USO: # docker compose -f docker-compose.prod.yml -f docker-compose.traefik.yml \ # --env-file .env up -d # # Differenze vs docker-compose.prod.yml standalone: # - Gateway Caddy NON ha ports binding host (Traefik è il punto di ingresso # pubblico su 80/443). # - Gateway è connesso anche alla network esterna `traefik` (override env # TRAEFIK_NETWORK se diversa, es. `gitea_traefik-public`). # - Caddy NON fa auto-TLS — Traefik termina TLS e fa ACME Let's Encrypt. # Caddy ascolta in chiaro su :80 dentro Docker network. # - Trusted proxies: Caddy rispetta X-Forwarded-For ricevuto da Traefik # per il match `remote_ip` (rate limit + WRITE_ALLOWLIST). # - Labels Traefik su gateway: routing Host(`cerbero-mcp.tielogic.xyz`) + # TLS automatic. # # Variabili .env aggiuntive richieste: # TRAEFIK_NETWORK=gitea_traefik-public # nome network di Traefik # TRAEFIK_CERTRESOLVER=letsencrypt # nome resolver in tua config Traefik # TRAEFIK_ENTRYPOINT=websecure # entrypoint HTTPS Traefik networks: traefik: external: true name: ${TRAEFIK_NETWORK:-gitea_traefik-public} services: gateway: # Override: niente port binding host, traffica solo via Traefik ports: !reset [] networks: - internal - traefik environment: ACME_EMAIL: ${ACME_EMAIL:-adrianodalpastro@tielogic.com} WRITE_ALLOWLIST: ${WRITE_ALLOWLIST:-127.0.0.1/32 ::1/128 172.16.0.0/12} # Mode behind-proxy: Caddy ascolta plain HTTP su :80, no auto_https LISTEN: ":80" AUTO_HTTPS: "off" # Traefik è il proxy che inoltra; trusta range privati + opz. CIDR Traefik TRUSTED_PROXIES: ${TRUSTED_PROXIES:-private_ranges} labels: com.centurylinklabs.watchtower.enable: "true" traefik.enable: "true" traefik.docker.network: ${TRAEFIK_NETWORK:-gitea_traefik-public} traefik.http.routers.cerbero-mcp.rule: "Host(`cerbero-mcp.tielogic.xyz`)" traefik.http.routers.cerbero-mcp.entrypoints: ${TRAEFIK_ENTRYPOINT:-websecure} traefik.http.routers.cerbero-mcp.tls: "true" traefik.http.routers.cerbero-mcp.tls.certresolver: ${TRAEFIK_CERTRESOLVER:-letsencrypt} traefik.http.services.cerbero-mcp.loadbalancer.server.port: "80" # Security headers a livello Traefik (ridondante con Caddy ma utile se # in futuro Caddy viene rimosso). Commenta se non vuoi duplicazione. traefik.http.routers.cerbero-mcp.middlewares: cerbero-mcp-secheaders@docker traefik.http.middlewares.cerbero-mcp-secheaders.headers.stsSeconds: "31536000" traefik.http.middlewares.cerbero-mcp-secheaders.headers.stsIncludeSubdomains: "true" traefik.http.middlewares.cerbero-mcp-secheaders.headers.contentTypeNosniff: "true" traefik.http.middlewares.cerbero-mcp-secheaders.headers.referrerPolicy: "no-referrer"