# The Cloudflare Tunnel overlay (ADR 0044, optional ingress). Use it on top of base and proxy: # # docker compose -f compose.yaml -f compose.proxy.yaml -f compose.tunnel.yaml up -d # # `cloudflared` makes an outbound connection to Cloudflare and forwards visitors to the proxy over # HTTPS. The tunnel is token-managed, so its public hostnames and origin settings live in the # Cloudflare dashboard: each hostname's service is `https://proxy:443` with the matching origin # server name and TLS verification left on (deploy/README.md, "Cloudflare Tunnel"). # # The connector has a fixed address on `edge`. The Caddyfile trusts a client-address header # (CF-Connecting-IP) only from that address, so no other peer can choose its own client address. services: tunnel: image: cloudflare/cloudflared:2026.9.3@sha256:072c067d25ccbe61d46e18f0d0723255f2bb5304f7317caa95b27031520ff92c restart: unless-stopped read_only: true cap_drop: - ALL security_opt: - no-new-privileges:true # The image's entrypoint is `cloudflared --no-autoupdate`; the token comes from TUNNEL_TOKEN. command: ["tunnel", "run"] env_file: - ${EKKLESIA_ENV_DIR:-/etc/ekklesia}/tunnel.env networks: edge: ipv4_address: ${EKKLESIA_TUNNEL_ADDRESS:-10.249.250.253} depends_on: - proxy