# Licensed to the Apache Software Foundation (ASF) under one or more contributor
# license agreements; and to You under the Apache License, Version 2.0.
version: '3'
services:
  db:
    image: apache/couchdb:2.3
    ports:
      - "5984:5984"
    environment:
      COUCHDB_USER: whisk_admin
      COUCHDB_PASSWORD: some_passw0rd
    volumes:
      - ~/tmp/openwhisk/couchdb:/usr/local/var/lib/couchdb:rw

  # KAFKA SERVICES
  zookeeper:
    image: zookeeper:3.4
    ports:
      - "2181:2181"
      - "2888:2888"
      - "3888:3888"
    environment:
      ZOO_SERVERS: server.1=0.0.0.0:2888:3888
      ZOO_MY_ID: 1
  kafka:
    image: wurstmeister/kafka:0.11.0.1
    links:
      - zookeeper
    depends_on:
      - zookeeper
    ports:
      - "9092:9092"
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_ADVERTISED_HOST_NAME: kafka
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ~/tmp/openwhisk/kafka:/kafka:rw

  # WHISK CONTROLLER
  controller:
    image: ${DOCKER_IMAGE_PREFIX:-openwhisk}/controller
    command: /bin/sh -c "exec /init.sh 0 >> /logs/controller-local_logs.log 2>&1"
    links:
      - db:db.docker
      - kafka:kafka.docker
      - zookeeper:zookeeper.docker
    depends_on:
      - db
      - kafka
    env_file:
      - ./docker-whisk-controller.env   # env vars shared
      - ~/tmp/openwhisk/local.env       # generated during make setup
    environment:
      COMPONENT_NAME: controller
      PORT: 8888

      KAFKA_HOSTS: kafka.docker:9092
      ZOOKEEPER_HOSTS: zookeeper.docker:2181

      CONFIG_whisk_couchdb_provider: CouchDB
      CONFIG_whisk_couchdb_protocol: http
      CONFIG_whisk_couchdb_port: 5984
      CONFIG_whisk_couchdb_host: db.docker
      CONFIG_whisk_couchdb_username: whisk_admin
      CONFIG_whisk_couchdb_password: some_passw0rd
      CONFIG_akka_remote_netty_tcp_hostname: controller
      CONFIG_akka_remote_netty_tcp_port: 2551
      CONFIG_akka_remote_netty_tcp_bindPort: 2551

      CONFIG_akka_actor_provider: cluster

      LOADBALANCER_HOST: ${DOCKER_COMPOSE_HOST}
      LOADBALANCER_HOST_PORT: 443
    volumes:
      - ~/tmp/openwhisk/controller/logs:/logs
    ports:
      - "8888:8888"
      - "2551:2551"
      - "9222:9222"

  # WHISK INVOKER AGENT
  invoker:
    image: ${DOCKER_IMAGE_PREFIX:-openwhisk}/invoker
    command: /bin/sh -c "exec /init.sh --id 0 >> /logs/invoker-local_logs.log 2>&1"
    privileged: true
    pid: "host"
    userns_mode: "host"
    links:
      - db:db.docker
      - kafka:kafka.docker
      - zookeeper:zookeeper.docker
    depends_on:
      - db
      - kafka
    env_file:
      - ./docker-whisk-controller.env # env vars shared
      - ~/tmp/openwhisk/local.env     # generated during make setup
    environment:
      COMPONENT_NAME: invoker
      SERVICE_NAME: invoker0
      PORT: 8085

      KAFKA_HOSTS: kafka.docker:9092
      ZOOKEEPER_HOSTS: zookeeper.docker:2181

      CONFIG_whisk_couchdb_provider: CouchDB
      CONFIG_whisk_couchdb_protocol: http
      CONFIG_whisk_couchdb_port: 5984
      CONFIG_whisk_couchdb_host: db.docker
      CONFIG_whisk_couchdb_username: whisk_admin
      CONFIG_whisk_couchdb_password: some_passw0rd

      EDGE_HOST: ${DOCKER_COMPOSE_HOST}
      EDGE_HOST_APIPORT: 443

      CONFIG_whisk_containerFactory_containerArgs_network: openwhisk_default

      WHISK_API_HOST_NAME: ${DOCKER_COMPOSE_HOST}
    volumes:
      - ~/tmp/openwhisk/invoker/logs:/logs
      - /var/run/docker.sock:/var/run/docker.sock
      - /var/lib/docker/containers:/containers
      - /sys/fs/cgroup:/sys/fs/cgroup
    ports:
      - "8085:8085"
      - "9333:9222"

  # The API Gateway is currently used to expose the Controller API
  #   see apigateway/conf/whisk-docker-compose.conf
  # Minio is used to mock an object storage ( i.e. S3) that hosts the api-gateway configuration.
  # Minio also exposes a web UI to browse the files: http://localhost:9001/minio/api-gateway/
  minio:
    image: minio/minio:RELEASE.2018-07-13T00-09-07Z
    command:
      - server
      - /data
    environment:
      - MINIO_ACCESS_KEY=5VCTEQOQ0GR0NV1T67GN
      - MINIO_SECRET_KEY=8MBK5aJTR330V1sohz4n1i7W5Wv/jzahARNHUzi3
    volumes:
      - ~/tmp/openwhisk/minio:/data:rw
    ports:
      - "9001:9000"
  redis:
    image: redis:2.8
    ports:
      - "6379:6379"
  apigateway:
    image: openwhisk/apigateway:latest
    links:
      - controller:whisk.controller
      - redis:redis.docker
      - minio:minio.docker
    environment:
      - REDIS_HOST=${DOCKER_COMPOSE_HOST}
      - REDIS_PORT=6379
      - PUBLIC_MANAGEDURL_PORT=9090
      - PUBLIC_MANAGEDURL_HOST=${DOCKER_COMPOSE_HOST}
      - REMOTE_CONFIG=minio:api-gateway
    depends_on:
      - controller
      - redis
      - minio
    volumes:
      - ~/tmp/openwhisk/api-gateway-ssl:/etc/ssl:ro
      - ~/tmp/openwhisk/api-gateway-config/api-gateway/generated-conf.d:/etc/api-gateway/generated-conf.d
      - ~/tmp/openwhisk/rclone:/root/.config/rclone:rw
    ports:
      - "80:80"
      - "443:443"
      - "9000:9000"
      - "9090:8080"

  kafka-rest:
    image: confluentinc/cp-kafka-rest:3.3.1
    hostname: kafka-rest
    environment:
      - ACCESS_CONTROL_ALLOW_ORIGIN_DEFAULT="*"
      - KAFKA_REST_ZOOKEEPER_CONNECT=zookeeper:2181
      - KAFKA_REST_HOST_NAME=kafka-rest
      - KAFKA_REST_LISTENERS=http://kafka-rest:8082
      - KAFKA_REST_CONSUMER_REQUEST_TIMEOUT_MS=30000
      - KAFKA_REST_BOOTSTRAP_SERVERS=PLAINTEXT://kafka:9092
    links:
      - zookeeper
      - kafka
    depends_on:
      - zookeeper
      - kafka

  kafka-topics-ui:
      image: landoop/kafka-topics-ui:0.9.3
      environment:
        - KAFKA_REST_PROXY_URL=http://kafka-rest:8082
        - KAFKA_REST_BOOTSTRAP_SERVERS=PLAINTEXT://kafka:9092
        - PROXY=true
      ports:
        - 8001:8000
      links:
        - kafka
        - kafka-rest
