version: '3.7'

services:
  split-synchronizer:
    image: "splitsoftware/split-synchronizer:latest"
    env_file:
      - split-synchronizer.env
    depends_on:
      - redis

  redis:
    image: "redis:3.2.10"
    ports:
      - "6379:6379"

  api:
    build:
      context: .
      target: main
    env_file:
      - .env
    volumes:
      - './src:/app'
    ports:
      - "8000:8000"
    depends_on:
      - redis
      - split-synchronizer

  test:
    image: "mendhak/http-https-echo"
    ports:
      - "8001:8001"
    environment:
      HTTP_PORT: 8001
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.test.rule=PathPrefix(`/`)"
      - "traefik.http.routers.test.service=test"
      - "traefik.http.routers.test.entrypoints=web"
      - "traefik.http.routers.test.middlewares=test-auth,test-ratelimit"
      - "traefik.http.services.test.loadBalancer.server.port=8001"
      - "traefik.http.services.test.loadBalancer.server.scheme=http"
      - "traefik.http.middlewares.test-auth.forwardAuth.address=http://api:8000/authorize"
      - "traefik.http.middlewares.test-auth.forwardAuth.trustForwardHeader=true"
      - "traefik.http.middlewares.test-auth.forwardAuth.authResponseHeaders=X-User-Id, X-Userinfo, X-Client-Id"
      # rate limits test
      #- "traefik.http.middlewares.test-ratelimit.ratelimit.average=1"
      #- "traefik.http.middlewares.test-ratelimit.ratelimit.period=10"
      #- "traefik.http.middlewares.test-ratelimit.ratelimit.sourceCriterion.requestHeaderName=X-Client-Id"

  traefik:
    image: "traefik"
    container_name: "traefik"
    command:
      - "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.swarmMode=false"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:8002"
    ports:
      - "8002:8002"
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
