version: '3.8'

services:
  rocketchat:
    platform: linux/amd64
    build:
      dockerfile: ${RC_DOCKERFILE}
      context: /tmp/build
    image: ghcr.io/${LOWERCASE_REPOSITORY}/rocket.chat:${RC_DOCKER_TAG}
    environment:
      - TEST_MODE=true
      - EXIT_UNHANDLEDPROMISEREJECTION=true
      - 'MONGO_URL=${MONGO_URL}'
      - 'MONGO_OPLOG_URL=${MONGO_OPLOG_URL}'
      - 'TRANSPORTER=${TRANSPORTER}'
      - MOLECULER_LOG_LEVEL=info
      - 'ROCKETCHAT_LICENSE=${ENTERPRISE_LICENSE}'
      - OVERWRITE_SETTING_Log_Level=2
    extra_hosts:
      - 'host.docker.internal:host-gateway'
    depends_on:
      - traefik
      - mongo
    labels:
      traefik.enable: true
      traefik.http.services.rocketchat.loadbalancer.server.port: 3000
      traefik.http.routers.rocketchat.service: rocketchat
      traefik.http.routers.rocketchat.rule: PathPrefix(`/`)

  authorization-service:
    platform: linux/amd64
    build:
      dockerfile: ee/apps/authorization-service/Dockerfile
      args:
        SERVICE: authorization-service
    image: ghcr.io/${LOWERCASE_REPOSITORY}/authorization-service:${DOCKER_TAG}
    environment:
      - 'MONGO_URL=${MONGO_URL}'
      - 'TRANSPORTER=${TRANSPORTER}'
      - MOLECULER_LOG_LEVEL=info
    extra_hosts:
      - 'host.docker.internal:host-gateway'
    depends_on:
      - nats

  account-service:
    platform: linux/amd64
    build:
      dockerfile: ee/apps/account-service/Dockerfile
      args:
        SERVICE: account-service
    image: ghcr.io/${LOWERCASE_REPOSITORY}/account-service:${DOCKER_TAG}
    environment:
      - MONGO_URL=${MONGO_URL}
      - 'TRANSPORTER=${TRANSPORTER}'
      - MOLECULER_LOG_LEVEL=info
    extra_hosts:
      - 'host.docker.internal:host-gateway'
    depends_on:
      - nats

  presence-service:
    platform: linux/amd64
    build:
      dockerfile: ee/apps/presence-service/Dockerfile
      args:
        SERVICE: presence-service
    image: ghcr.io/${LOWERCASE_REPOSITORY}/presence-service:${DOCKER_TAG}
    environment:
      - MONGO_URL=${MONGO_URL}
      - 'TRANSPORTER=${TRANSPORTER}'
      - MOLECULER_LOG_LEVEL=info
    extra_hosts:
      - 'host.docker.internal:host-gateway'
    depends_on:
      - nats

  ddp-streamer-service:
    platform: linux/amd64
    build:
      dockerfile: ee/apps/ddp-streamer/Dockerfile
      args:
        SERVICE: ddp-streamer
    image: ghcr.io/${LOWERCASE_REPOSITORY}/ddp-streamer-service:${DOCKER_TAG}
    environment:
      - MONGO_URL=${MONGO_URL}
      - 'TRANSPORTER=${TRANSPORTER}'
      - MOLECULER_LOG_LEVEL=info
    extra_hosts:
      - 'host.docker.internal:host-gateway'
    depends_on:
      - nats
      - traefik
    labels:
      traefik.enable: true
      traefik.http.services.ddp-streamer-service.loadbalancer.server.port: 3000
      traefik.http.routers.ddp-streamer-service.service: ddp-streamer-service
      traefik.http.routers.ddp-streamer-service.rule: PathPrefix(`/websocket`) || PathPrefix(`/sockjs`)

  stream-hub-service:
    platform: linux/amd64
    build:
      dockerfile: ee/apps/stream-hub-service/Dockerfile
      args:
        SERVICE: stream-hub-service
    image: ghcr.io/${LOWERCASE_REPOSITORY}/stream-hub-service:${DOCKER_TAG}
    environment:
      - MONGO_URL=${MONGO_URL}
      - 'TRANSPORTER=${TRANSPORTER}'
      - MOLECULER_LOG_LEVEL=info
    extra_hosts:
      - 'host.docker.internal:host-gateway'
    depends_on:
      - nats

  queue-worker-service:
    platform: linux/amd64
    build:
      dockerfile: ee/apps/queue-worker/Dockerfile
      args:
        SERVICE: queue-worker
    image: ghcr.io/${LOWERCASE_REPOSITORY}/queue-worker-service:${DOCKER_TAG}
    environment:
      - MONGO_URL=${MONGO_URL}
      - 'TRANSPORTER=${TRANSPORTER}'
      - MOLECULER_LOG_LEVEL=info
    extra_hosts:
      - 'host.docker.internal:host-gateway'
    depends_on:
      - nats

  omnichannel-transcript-service:
    platform: linux/amd64
    build:
      dockerfile: ee/apps/omnichannel-transcript/Dockerfile
      args:
        SERVICE: omnichannel-transcript
    image: ghcr.io/${LOWERCASE_REPOSITORY}/omnichannel-transcript-service:${DOCKER_TAG}
    environment:
      - MONGO_URL=${MONGO_URL}
      - 'TRANSPORTER=${TRANSPORTER}'
      - MOLECULER_LOG_LEVEL=info
    extra_hosts:
      - 'host.docker.internal:host-gateway'
    depends_on:
      - nats

  mongo:
    image: docker.io/bitnami/mongodb:7.0
    restart: on-failure
    environment:
      MONGODB_REPLICA_SET_MODE: primary
      MONGODB_REPLICA_SET_NAME: ${MONGODB_REPLICA_SET_NAME:-rs0}
      MONGODB_PORT_NUMBER: ${MONGODB_PORT_NUMBER:-27017}
      MONGODB_INITIAL_PRIMARY_HOST: ${MONGODB_INITIAL_PRIMARY_HOST:-mongo}
      MONGODB_INITIAL_PRIMARY_PORT_NUMBER: ${MONGODB_INITIAL_PRIMARY_PORT_NUMBER:-27017}
      MONGODB_ADVERTISED_HOSTNAME: ${MONGODB_ADVERTISED_HOSTNAME:-mongo}
      MONGODB_ENABLE_JOURNAL: ${MONGODB_ENABLE_JOURNAL:-true}
      ALLOW_EMPTY_PASSWORD: ${ALLOW_EMPTY_PASSWORD:-yes}

  nats:
    image: nats:2.6-alpine

  traefik:
    image: traefik:v2.8
    command:
      - --providers.docker=true
    ports:
      - 3000:80
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
