#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
version: '3.5'

services:
  mysql:
    image: mysql:8.0.28
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=inlong
    healthcheck:
      test: "/usr/bin/mysql --user=root --password=inlong --execute \"SHOW DATABASES;\""
      timeout: 20s
      interval: 2s
      retries: 10
    volumes:
      - ./mysql:/var/lib/mysql
      - ./sql:/docker-entrypoint-initdb.d

  pulsar:
    image: apachepulsar/pulsar:2.8.2
    container_name: pulsar
    ports:
      - "6650:6650"
    volumes:
      - ./pulsar/data:/pulsar/data
    command: bin/pulsar standalone

  manager:
    image: inlong/manager:1.3.0
    container_name: manager
    depends_on:
      mysql:
        condition: service_healthy
    ports:
      - "8083:8083"
    environment:
      - JDBC_URL=mysql:3306
      - USERNAME=root
      - PASSWORD=inlong
      - ZK_URL=tubemq-server:2181
      - FLINK_HOST=localhost
      - FLINK_PORT=8081
      - AUDIT_PROXY_URL=audit:10081

  webisite:
    image: inlong/dashboard:1.3.0
    container_name: dashboard
    depends_on:
      - manager
    ports:
      - "80:80"
    environment:
      - MANAGER_API_ADDRESS=manager:8083

  dataproxy:
    image: inlong/dataproxy:1.3.0
    container_name: dataproxy
    depends_on:
      - manager
    ports:
      - "46801:46801"
    environment:
      - MANAGER_OPENAPI_IP=manager
      - MANAGER_OPENAPI_PORT=8083
      - AUDIT_PROXY_URL=audit:10081
      - MQ_TYPE=pulsar

  agent:
    image: inlong/agent:1.3.0
    container_name: agent
    depends_on:
      - manager
      - dataproxy
    environment:
      - MANAGER_OPENAPI_IP=manager
      - MANAGER_OPENAPI_PORT=8083
      - DATAPROXY_IP=dataproxy
      - DATAPROXY_PORT=46801
      - AUDIT_PROXY_URL=audit:10081
    ports:
      - "8008:8008"
    volumes:
      - ./collect-data:/data/collect-data

  audit:
    image: inlong/audit:1.3.0
    container_name: audit
    depends_on:
      mysql:
        condition: service_healthy
    environment:
      - JDBC_URL=mysql:3306
      - USERNAME=root
      - PASSWORD=inlong
      - PULSAR_BROKER_LIST=pulsar:6650
      - MQ_TYPE=pulsar
    ports:
      - "10081:10081"
