# DNS mode overrides
services:
  ipfs:
    ports:
      - "4001:4001"  # swarm
      - "127.0.0.1:5001:5001"  # api access from localhost
    labels:
      - "traefik.enable=true"
      
      # IPFS Gateway Service
      - "traefik.http.services.ipfs-gateway.loadbalancer.server.port=8080"
      
      # Main gateway router
      - "traefik.http.routers.main-gateway.rule=Host(`${GATEWAY_DOMAIN}`)"
      - "traefik.http.routers.main-gateway.entrypoints=web"
      - "traefik.http.routers.main-gateway.service=ipfs-gateway"
      - "traefik.http.routers.main-gateway.middlewares=xfp-https@docker"
      
      # Subdomain gateway router
      - "traefik.http.routers.subdomain-gateway.rule=HostRegexp(`{subdomain:[^.]+}.ipfs.${GATEWAY_DOMAIN}`)"
      - "traefik.http.routers.subdomain-gateway.entrypoints=web"
      - "traefik.http.routers.subdomain-gateway.service=ipfs-gateway"
      - "traefik.http.routers.subdomain-gateway.middlewares=xfp-https@docker"

      # Middleware: force the header for anything that hits the gateway
      - "traefik.http.middlewares.xfp-https.headers.customrequestheaders.X-Forwarded-Proto=https"

  cluster:
    labels:
      - "traefik.enable=true"
      - "traefik.http.services.upload-service.loadbalancer.server.port=9095"
      - "traefik.http.routers.upload-router.rule=Host(`${UPLOAD_DOMAIN}`) && (Path(`/api/v0/add`) || Path(`/api/v0/cat`) || Path(`/api/v0/pin/ls`) || Path(`/api/v0/pin/add`))"
      - "traefik.http.routers.upload-router.entrypoints=web"
      - "traefik.http.routers.upload-router.middlewares=upload-auth@docker,connection-headers@docker"
      - "traefik.http.routers.upload-router.service=upload-service"
      - "traefik.http.middlewares.connection-headers.headers.customresponseheaders.Connection=close"

  traefik:
    ports:
      - "80:80"  # HTTP (for Cloudflare proxy)
    command:
      - "--api=true"
      - "--api.dashboard=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--log.level=DEBUG"
      - "--accesslog=true"