# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#

version: '3'

volumes:
  wadaorderer.example.com:
  peer0.wada.example.com:
  peer1.wada.example.com:

networks:
  basic:    

services:
  cawada:
    image: hyperledger/fabric-ca:$IMAGE_TAG
    environment:
      - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server/
      - FABRIC_CA_SERVER_CA_NAME=ca-wada
      - FABRIC_CA_SERVER_TLS_ENABLED=true
      - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.wada.example.com-cert.pem
      - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/195301f6352f3551240b9f1d1fbe183ac2d3eb7ecde704ece8eba7d90e078c2c_sk
    ports:
      - 7054:7054
    command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.wada.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/195301f6352f3551240b9f1d1fbe183ac2d3eb7ecde704ece8eba7d90e078c2c_sk -b admin:adminpw -d'
    volumes:
      - ./crypto-config/peerOrganizations/wada.example.com/ca/195301f6352f3551240b9f1d1fbe183ac2d3eb7ecde704ece8eba7d90e078c2c_sk:/etc/hyperledger/fabric-ca-server-config/195301f6352f3551240b9f1d1fbe183ac2d3eb7ecde704ece8eba7d90e078c2c_sk
      - ./crypto-config/peerOrganizations/wada.example.com/ca/ca.wada.example.com-cert.pem:/etc/hyperledger/fabric-ca-server-config/ca.wada.example.com-cert.pem      
    container_name: ca_peerWada
    networks:
      - basic

  zookeeper0:
    container_name: zookeeper0
    image: hyperledger/fabric-zookeeper
    restart: always
    ports:
      - '2181'
      - '2888'
      - '3888'
    environment:
      - ZOO_MY_ID=1
      - ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888
    networks:
      - basic

  zookeeper1:
    container_name: zookeeper1
    image: hyperledger/fabric-zookeeper
    restart: always
    ports:
      - '2181'
      - '2888'
      - '3888'
    environment:
      - ZOO_MY_ID=2
      - ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888
    networks:
      - basic

  zookeeper2:
    container_name: zookeeper2
    image: hyperledger/fabric-zookeeper
    restart: always
    ports:
      - '2181'
      - '2888'
      - '3888'
    environment:
      - ZOO_MY_ID=3
      - ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888
    networks:
      - basic

  kafka0:
    container_name: kafka0
    image: hyperledger/fabric-kafka
    restart: always
    environment:
      - KAFKA_MESSAGE_MAX_BYTES=103809024 # 99 * 1024 * 1024 B
      - KAFKA_REPLICA_FETCH_MAX_BYTES=103809024 # 99 * 1024 * 1024 B
      - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false    
      - KAFKA_BROKER_ID=0
      - KAFKA_MIN_INSYNC_REPLICAS=2
      - KAFKA_DEFAULT_REPLICATION_FACTOR=3
      - KAFKA_ADVERTISED_HOST_NAME=kafka0
      - KAFKA_ADVERTISED_PORT=9092
      - KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181
      - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka0:9092
      - KAFKA_PORT=9092
    ports:
      - 9092:9092
    depends_on:
      - zookeeper0
      - zookeeper1
      - zookeeper2
    networks:
      - basic

  kafka1:
    container_name: kafka1
    image: hyperledger/fabric-kafka
    restart: always
    environment:
      - KAFKA_MESSAGE_MAX_BYTES=103809024 # 99 * 1024 * 1024 B
      - KAFKA_REPLICA_FETCH_MAX_BYTES=103809024 # 99 * 1024 * 1024 B
      - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false  
      - KAFKA_BROKER_ID=1
      - KAFKA_MIN_INSYNC_REPLICAS=2
      - KAFKA_DEFAULT_REPLICATION_FACTOR=3
      - KAFKA_ADVERTISED_HOST_NAME=kafka1
      - KAFKA_ADVERTISED_PORT=9092
      - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka1:9092
      - KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181
    ports:
      - 10092:9092
    depends_on:
      - zookeeper0
      - zookeeper1
      - zookeeper2
    networks:
      - basic

  kafka2:
    container_name: kafka2
    image: hyperledger/fabric-kafka
    restart: always
    environment:
      - KAFKA_MESSAGE_MAX_BYTES=103809024 # 99 * 1024 * 1024 B
      - KAFKA_REPLICA_FETCH_MAX_BYTES=103809024 # 99 * 1024 * 1024 B
      - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false
      - KAFKA_BROKER_ID=2
      - KAFKA_MIN_INSYNC_REPLICAS=2
      - KAFKA_DEFAULT_REPLICATION_FACTOR=3
      - KAFKA_ADVERTISED_HOST_NAME=kafka2
      - KAFKA_ADVERTISED_PORT=9092
      - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka2:9092
      - KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181
    ports:
      - 20092:9092
    depends_on:
      - zookeeper0
      - zookeeper1
      - zookeeper2
    networks:
      - basic

  kafka3:
    container_name: kafka3
    image: hyperledger/fabric-kafka
    restart: always
    environment:
      - KAFKA_MESSAGE_MAX_BYTES=103809024 # 99 * 1024 * 1024 B
      - KAFKA_REPLICA_FETCH_MAX_BYTES=103809024 # 99 * 1024 * 1024 B
      - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false
      - KAFKA_BROKER_ID=3
      - KAFKA_MIN_INSYNC_REPLICAS=2
      - KAFKA_DEFAULT_REPLICATION_FACTOR=3
      - KAFKA_ADVERTISED_HOST_NAME=kafka3
      - KAFKA_ADVERTISED_PORT=9092
      - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka3:9092
      - KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181
    ports:
      - 30092:9092
    depends_on:
      - zookeeper0
      - zookeeper1
      - zookeeper2
    networks:
      - basic
      
  wadaorderer.example.com:  
    container_name: wadaorderer.example.com
    image: hyperledger/fabric-orderer:$IMAGE_TAG
    environment:
    # - ORDERER_GENERAL_LOGLEVEL=INFO
    - ORDERER_GENERAL_LOGLEVEL=DEBUG
    - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
    - ORDERER_GENERAL_GENESISMETHOD=file
    - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
    - ORDERER_GENERAL_LOCALMSPID=WADAOrdererMSP
    - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
    # enabled TLS
    - ORDERER_GENERAL_TLS_ENABLED=true
    # - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
    # - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
    # - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
    - ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s
    - ORDERER_KAFKA_RETRY_SHORTTOTAL=30s
    - ORDERER_KAFKA_VERBOSE=true
    - ORDERER_GENERAL_TLS_CLIENTAUTHREQUIRED=true
      

      

    - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/msp/keystore/60d525f439542b676ef2bc413e59d3a07c05be96414ec3491d6b0334b3e482f7_sk
    - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/msp/signcerts/wadaorderer.example.com-cert.pem
    - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/msp/cacerts/ca.example.com-cert.pem, /var/hyperledger/peer/peerWADA/msp/cacerts/ca.wada.example.com-cert.pem]
    - ORDERER_GENERAL_TLS_CLIENTROOTCAS=[/var/hyperledger/orderer/msp/cacerts/ca.example.com-cert.pem, /var/hyperledger/peer/peerWADA/msp/cacerts/ca.wada.example.com-cert.pem]
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric
    command: orderer
    volumes:
    - ./channel-artifacts/wada/genesis.block:/var/hyperledger/orderer/orderer.genesis.block
    - ./crypto-config/ordererOrganizations/example.com/orderers/wadaorderer.example.com/msp:/var/hyperledger/orderer/msp
    - ./crypto-config/ordererOrganizations/example.com/orderers/wadaorderer.example.com/tls:/var/hyperledger/orderer/tls
    - ./crypto-config/peerOrganizations/wada.example.com/peers/peer0.wada.example.com/:/var/hyperledger/peer/peerWADA
    - wadaorderer.example.com:/var/hyperledger/production/orderer
    ports:
      - 7050:7050
    networks:
      - basic
    depends_on:
      - zookeeper0
      - zookeeper1
      - zookeeper2
      - kafka0
      - kafka1
      - kafka2
      - kafka3

  peer0.wada.example.com:
    container_name: peer0.wada.example.com    
    image: hyperledger/fabric-peer:$IMAGE_TAG
    environment:
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      # the following setting starts chaincode containers on the same
      # bridge network as the peers
      # https://docs.docker.com/compose/networking/
      - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_basic
      - CORE_LOGGING_LEVEL=INFO
      #- CORE_LOGGING_LEVEL=DEBUG
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_GOSSIP_USELEADERELECTION=true
      - CORE_PEER_GOSSIP_ORGLEADER=false
      - CORE_PEER_PROFILE_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt    
      - CORE_PEER_ID=peer0.wada.example.com
      - CORE_PEER_ADDRESS=peer0.wada.example.com:7051
      - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.wada.example.com:7051
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.wada.example.com:7051
      - CORE_PEER_LOCALMSPID=WADAMSP
      - CORE_CHAINCODE_DEPLOYTIMEOUT=300s
      - CORE_CHAINCODE_STARTUPTIMEOUT=300s      
      - CORE_PEER_TLS_CLIENTAUTHREQUIRED=true
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: peer node start
    volumes:
        - /var/run/:/host/var/run/
        - ./crypto-config/peerOrganizations/wada.example.com/peers/peer0.wada.example.com/msp:/etc/hyperledger/fabric/msp
        - ./crypto-config/peerOrganizations/wada.example.com/peers/peer0.wada.example.com/tls:/etc/hyperledger/fabric/tls
        - ./crypto-config/peerOrganizations/wada.example.com/users:/etc/hyperledger/fabric/msp/users/
        - ./crypto-config/ordererOrganizations/:/etc/hyperledger/fabric/crypto/ordererOrganizations/
        - peer0.wada.example.com:/var/hyperledger/production
    ports:
      - 7051:7051
      - 7053:7053
    networks:
      - basic

  peer1.wada.example.com:
    container_name: peer1.wada.example.com
    image: hyperledger/fabric-peer:$IMAGE_TAG
    environment:
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      # the following setting starts chaincode containers on the same
      # bridge network as the peers
      # https://docs.docker.com/compose/networking/
      - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_basic
      - CORE_LOGGING_LEVEL=INFO
      #- CORE_LOGGING_LEVEL=DEBUG
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_GOSSIP_USELEADERELECTION=true
      - CORE_PEER_GOSSIP_ORGLEADER=false
      - CORE_PEER_PROFILE_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt  
      - CORE_PEER_ID=peer1.wada.example.com
      - CORE_PEER_ADDRESS=peer1.wada.example.com:7051
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.wada.example.com:7051
      - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.wada.example.com:7051
      - CORE_PEER_LOCALMSPID=WADAMSP
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: peer node start
    volumes:
        - /var/run/:/host/var/run/
        - ./crypto-config/peerOrganizations/wada.example.com/peers/peer1.wada.example.com/msp:/etc/hyperledger/fabric/msp
        - ./crypto-config/peerOrganizations/wada.example.com/peers/peer1.wada.example.com/tls:/etc/hyperledger/fabric/tls
        - ./crypto-config/peerOrganizations/wada.example.com/users:/etc/hyperledger/fabric/msp/users/
        - ./crypto-config/ordererOrganizations/:/etc/hyperledger/fabric/crypto/ordererOrganizations/
        - peer1.wada.example.com:/var/hyperledger/production
    ports:
      - 7056:7051
      - 7058:7053
    networks:
      - basic

  cli:
    container_name: cli
    image: hyperledger/fabric-tools:$IMAGE_TAG
    tty: true
    stdin_open: true
    environment:
      - GOPATH=/opt/gopath
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      - CORE_LOGGING_LEVEL=DEBUG
      #- CORE_LOGGING_LEVEL=INFO
      - CORE_PEER_ID=cli
      - CORE_PEER_ADDRESS=peer0.wada.example.com:7051
      - CORE_PEER_LOCALMSPID=WADAMSP
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/wada.example.com/peers/peer0.wada.example.com/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/wada.example.com/peers/peer0.wada.example.com/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/wada.example.com/peers/peer0.wada.example.com/tls/ca.crt
      - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/wada.example.com/users/Admin@wada.example.com/msp
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: /bin/bash
    volumes:
        - /var/run/:/host/var/run/
        - ./chaincode/:/opt/gopath/src/github.com/chaincode
        - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
        - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
        - ./channel-artifacts/wada:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts/wada
        - ./channel-artifacts/nada:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts/nada
    depends_on:
      - wadaorderer.example.com
      - peer0.wada.example.com
      - peer1.wada.example.com    
    networks:
      - basic