# 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.

# ============================================================
# NOTICE
# ============================================================
# This docker-compose file is for validating releases only. To use StreamPipes, use the installation instructions
# provided on https://streampipes.apache.org/download
#


version: "3.8"

# global logging
x-logging:
  &default-logging
  options:
    max-size: '12m'
    max-file: '5'
  driver: json-file

services:

  #### apache/incubator-streampipes
  backend:
    build:
      context: ./streampipes-backend
      dockerfile: Dockerfile
      args:
        BASE_IMAGE: adoptopenjdk/openjdk8-openj9:alpine
    image: incubator-streampipes_backend:release-validation
    depends_on:
      - consul
      - couchdb
    volumes:
      - backend:/root/.streampipes
      - files:/spImages
    logging: *default-logging
    networks:
      spnet:

  ui:
    build:
      context: ./ui
      dockerfile: Dockerfile
      args:
        BASE_IMAGE: nginx
    image: incubator-streampipes_ui:release-validation
    ports:
      - "80:80"
    depends_on:
      - couchdb
      - consul
      - backend
    logging: *default-logging
    networks:
      spnet:

  extensions-all-jvm:
    build:
      context: ./streampipes-extensions/streampipes-extensions-all-jvm
      dockerfile: Dockerfile
      args:
        BASE_IMAGE: adoptopenjdk/openjdk8-openj9:alpine
    image: incubator-streampipes_pipeline-elements-all-jvm:release-validation
    volumes:
      - files:/spImages
    logging: *default-logging
    networks:
      spnet:

  consul:
    image: fogsyio/consul:1.9.6
    environment:
      - "CONSUL_LOCAL_CONFIG={\"disable_update_check\": true}"
      - "CONSUL_BIND_INTERFACE=eth0"
      - "CONSUL_HTTP_ADDR=0.0.0.0"
    entrypoint:
      - consul
      - agent
      - -server
      - -bootstrap-expect=1
      - -data-dir=/consul/data
      - -node=consul-one
      - -bind={{ GetInterfaceIP "eth0" }}
      - -client=0.0.0.0
      - -enable-script-checks=true
      - -ui
    logging: *default-logging
    volumes:
      - consul:/consul/data
    networks:
      spnet:
        ipv4_address: 172.31.0.9

  couchdb:
    image: couchdb:2.3.1
    logging: *default-logging
    volumes:
      - couchdb:/opt/couchdb/data
    networks:
      spnet:

  kafka:
    image: fogsyio/kafka:2.2.0
    hostname: kafka
    depends_on:
      - zookeeper
    environment:
      # see: https://github.com/confluentinc/schema-registry/issues/648
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://:9092
      KAFKA_LISTENERS: PLAINTEXT://:9092
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
      KAFKA_ADVERTISED_HOST_NAME: kafka
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - kafka:/kafka
      - /var/run/docker.sock:/var/run/docker.sock
    logging: *default-logging
    networks:
      spnet:

  zookeeper:
    image: fogsyio/zookeeper:3.4.13
    logging: *default-logging
    volumes:
      - zookeeper:/opt/zookeeper-3.4.13
    networks:
      spnet:

  influxdb:
    image: fogsyio/influxdb:1.7
    environment:
      - INFLUXDB_DATA_ENGINE=tsm1
      - INFLUXDB_REPORTING_DISABLED=false
      - INFLUXDB_ADMIN_ENABLED=true
    volumes:
      - influxdb:/var/lib/influxdb
    logging: *default-logging
    networks:
      spnet:

volumes:
  kafka:
  files:
  consul:
  couchdb:
  zookeeper:
  influxdb:
  backend:

networks:
  spnet:
    name: spnet
    driver: bridge
    ipam:
      config:
        - subnet: 172.31.0.0/16
