version: "2.2"

volumes:
  metadata_data: {}
  middle_var: {}
  historical_var: {}
  broker_var: {}
  coordinator_var: {}
  router_var: {}
  druid_shared: {}

services:
  app:
    image: pathogen/monolith:latest
    build: ./docker
    volumes:
      - ${PORTAINER_GIT_DIR}:/code
    env_file:
      - .env
    volumes_from:
      - tmp
    depends_on:
      broker:
        condition: service_started
      kafka:
        condition: service_healthy
      tmp:
        condition: service_started
      redis:
        condition: service_healthy
    #   - db

  threshold:
    image: pathogen/threshold:latest
    build: ./legacy/docker
    volumes:
      - ${PORTAINER_GIT_DIR}:/code
      - ${THRESHOLD_CONFIG_DIR}:/code/legacy/conf/live
      #- ${THRESHOLD_TEMPLATE_DIR}:/code/conf/templates
      - ${THRESHOLD_CERT_DIR}:/code/legacy/conf/cert
    ports:
      - "${THRESHOLD_LISTENER_PORT}:${THRESHOLD_LISTENER_PORT}"
      - "${THRESHOLD_RELAY_PORT}:${THRESHOLD_RELAY_PORT}"
      - "${THRESHOLD_API_PORT}:${THRESHOLD_API_PORT}"
    env_file:
      - .env
    # for development
    extra_hosts:
      - "host.docker.internal:host-gateway"
    volumes_from:
        - tmp
    depends_on:
      tmp:
        condition: service_started
      redis:
        condition: service_healthy

  # db:
    #image: pathogen/manticore:kibana
    # image: manticoresearch/manticore:latest
    #build: 
    #  context: ./docker/manticore
    #  args:
    #    DEV: 1
    # restart: always


  turnilo:
    container_name: turnilo
    image: uchhatre/turnilo:latest
    ports:
      - 9093:9090
    environment:
      - DRUID_BROKER_URL=http://broker:8082
    depends_on:
      - broker

  metabase:
    container_name: metabase
    image: metabase/metabase:latest
    ports:
      - 3001:3000
    depends_on:
      - broker

  postgres:
    container_name: postgres
    image: postgres:latest
    volumes:
      - metadata_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=FoolishPassword
      - POSTGRES_USER=druid
      - POSTGRES_DB=druid

  # Need 3.5 or later for container nodes
  zookeeper:
    container_name: zookeeper
    image: zookeeper:3.5
    ports:
      - "2181:2181"
    environment:
      - ZOO_MY_ID=1

  kafka:
    image: bitnami/kafka
    depends_on:
      - zookeeper
      - broker
    ports:
      - 29092:29092
      - 9092:9092
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
      #KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      ALLOW_PLAINTEXT_LISTENER: yes
    # healthcheck:
    #   test: ["CMD-SHELL", "kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --topic main --describe"]
    #   interval: 2s
    #   timeout: 2s
    #   retries: 15
    healthcheck:
      test: ["CMD", "kafka-topics.sh", "--list", "--bootstrap-server", "kafka:9092"]
      start_period: 15s
      interval: 2s
      timeout: 5s
      retries: 30

  coordinator:
    image: apache/druid:0.23.0
    container_name: coordinator
    volumes:
      - druid_shared:/opt/shared
      - coordinator_var:/opt/druid/var
    depends_on: 
      - zookeeper
      - postgres
    ports:
      - "8081:8081"
    command:
      - coordinator
    env_file:
      - environment

  broker:
    image: apache/druid:0.23.0
    container_name: broker
    volumes:
      - broker_var:/opt/druid/var
    depends_on: 
      - zookeeper
      - postgres
      - coordinator
    ports:
      - "8082:8082"
    command:
      - broker
    env_file:
      - environment

  historical:
    image: apache/druid:0.23.0
    container_name: historical
    volumes:
      - druid_shared:/opt/shared
      - historical_var:/opt/druid/var
    depends_on: 
      - zookeeper
      - postgres
      - coordinator
    ports:
      - "8083:8083"
    command:
      - historical
    env_file:
      - environment

  middlemanager:
    image: apache/druid:0.23.0
    container_name: middlemanager
    volumes:
      - druid_shared:/opt/shared
      - middle_var:/opt/druid/var
    depends_on: 
      - zookeeper
      - postgres
      - coordinator
    ports:
      - "8091:8091"
      - "8100-8105:8100-8105"
    command:
      - middleManager
    env_file:
      - environment

  router:
    image: apache/druid:0.23.0
    container_name: router
    volumes:
      - router_var:/opt/druid/var
    depends_on:
      - zookeeper
      - postgres
      - coordinator
    ports:
      - "8888:8888"
    command:
      - router
    env_file:
      - environment

  # db:
  #   #image: pathogen/manticore:kibana
  #   image: manticoresearch/manticore:dev
  #   #build: 
  #   #  context: ./docker/manticore
  #   #  args:
  #   #    DEV: 1
  #   restart: always
  #   ports:
  #     - 9308
  #     - 9312
  #     - 9306
  #   ulimits:
  #     nproc: 65535
  #     nofile:
  #        soft: 65535
  #        hard: 65535
  #     memlock:
  #       soft: -1
  #       hard: -1
  #   environment:
  #     - MCL=1
  #   volumes:
  #     - ./docker/data:/var/lib/manticore
  #     - ./docker/manticore.conf:/etc/manticoresearch/manticore.conf

  tmp:
    image: busybox
    command: chmod -R 777 /var/run/redis
    volumes:
        - /var/run/redis

  redis:
    image: redis
    command: redis-server /etc/redis.conf
    ulimits:
      nproc: 65535
      nofile:
         soft: 65535
         hard: 65535
    volumes:
      - ${PORTAINER_GIT_DIR}/docker/redis.conf:/etc/redis.conf
    volumes_from:
      - tmp
    healthcheck:
      test: "redis-cli -s /var/run/redis/redis.sock ping"
      interval: 2s
      timeout: 2s
      retries: 15

networks:
   default:
      external:
         name: pathogen