version: "3.3"
services:
  reverse-proxy:
    image: traefik:v2.5
    command:
      - --log.level=WARN
      - --providers.docker
      - --entryPoints.web.address=:80
    ports:
      - "9999:80" # port is used to proxy through apache with ssl
    depends_on:
      - pusher
      - front
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

  front:
    build:
      context: ./
      dockerfile: front/Dockerfile
      args:
        DEBUG_MODE: "$DEBUG_MODE"
        JITSI_URL: $JITSI_URL
        JITSI_PRIVATE_MODE: "$JITSI_PRIVATE_MODE"
        PUSHER_URL: /pusher
        ADMIN_URL: /admin # this is only set to avoid compiling errors, currently not used otherways
        TURN_SERVER: "${TURN_SERVER}"
        TURN_USER: "${TURN_USER}"
        TURN_PASSWORD: "${TURN_PASSWORD}"
        MAX_PER_GROUP: "${MAX_PER_GROUP}"
        MAX_USERNAME_LENGTH: "${MAX_USERNAME_LENGTH}"
        START_ROOM_URL: "${START_ROOM_URL}"
        DISABLE_NOTIFICATIONS: "${DISABLE_NOTIFICATIONS}"
        SKIP_RENDER_OPTIMIZATIONS: "${SKIP_RENDER_OPTIMIZATIONS}"
    labels:
      - "traefik.http.routers.front.rule=PathPrefix(`/`)"
      - "traefik.http.routers.front.entryPoints=web"
      - "traefik.http.services.front.loadbalancer.server.port=80" 
      - "traefik.http.routers.front.service=front"

  pusher:
    build:
      context: ./
      dockerfile: pusher/Dockerfile
    environment:
      SECRET_JITSI_KEY: "${SECRET_JITSI_KEY}"
      SECRET_KEY: ${SECRET_KEY}
      API_URL: back:50051
      ADMIN_API_URL: "${ADMIN_API_URL}"
      ADMIN_API_TOKEN: "${ADMIN_API_TOKEN}"
      JITSI_URL: ${JITSI_URL}
      JITSI_ISS: ${JITSI_ISS}
      FRONT_URL : ${FRONT_URL}
      OPID_CLIENT_ID: ${OPID_CLIENT_ID}
      OPID_CLIENT_SECRET: ${OPID_CLIENT_SECRET}
      OPID_CLIENT_ISSUER: ${OPID_CLIENT_ISSUER}
    labels:
      - "traefik.http.middlewares.strip-pusher-prefix.stripprefix.prefixes=/pusher"
      - "traefik.http.routers.pusher.rule=PathPrefix(`/pusher`)"
      - "traefik.http.routers.pusher.middlewares=strip-pusher-prefix@docker"
      - "traefik.http.routers.pusher.entryPoints=web"
      - "traefik.http.services.pusher.loadbalancer.server.port=8080" 
      - "traefik.http.routers.pusher.service=pusher"

  back:
    build:
      context: ./
      dockerfile: back/Dockerfile
    environment:
      SECRET_KEY: ${SECRET_KEY}
      STARTUP_COMMAND_1: yarn install
      SECRET_JITSI_KEY: "${SECRET_JITSI_KEY}"
      ADMIN_API_TOKEN: "${ADMIN_API_TOKEN}"
      ADMIN_API_URL: "${ADMIN_API_URL}"
      JITSI_URL: ${JITSI_URL}
      JITSI_ISS: ${JITSI_ISS}
      MAX_PER_GROUP: ${MAX_PER_GROUP}
      TURN_STATIC_AUTH_SECRET: "${TURN_STATIC_AUTH_SECRET}"
      REDIS_HOST: redis
    labels:
      - "traefik.http.middlewares.strip-api-prefix.stripprefix.prefixes=/api"
      - "traefik.http.routers.back.rule=PathPrefix(`/api`)"
      - "traefik.http.routers.back.middlewares=strip-api-prefix@docker"
      - "traefik.http.routers.back.entryPoints=web"
      - "traefik.http.services.back.loadbalancer.server.port=8080" 
      - "traefik.http.routers.back.service=back"

  redis:
    image: redis:6