version: '3.8'
services: 
  keycloak-casa-db:
    image: postgres
    ports:
      - 5432:5432
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: keycloak
    volumes:
      - data:/var/lib/postgresql/data

  casa-user-data-service:
    build:
      context: https://github.com/UPHRH-platform/casa-user-data-service.git#main
    image: casa-user-data-service
    ports:
      - 3000:3000
      
  keycloak-casa:
    image: keycloak-casa
    build: ./keycloak-casa
    depends_on:
      - keycloak-casa-db
      - casa-user-data-service
    ports:
      - 8080:8080 
    environment:
      KC_DB_URL: jdbc:postgresql://keycloak-casa-db:5432/keycloak
      KC_DB_USERNAME: postgres
      KC_DB_PASSWORD: postgres
      KC_HOSTNAME: locahost
      KC_DB: postgres
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: admin
    command:
      - "start-dev"

  lr-service:
    image: lr-service
    build:
      context: https://github.com/UPHRH-platform/lr-service.git#main
    ports:
      - 5000:5000
    # env_file:
    #   - 

  es:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1
    environment:
      - discovery.type=single-node
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - ELASTIC_PASSWORD=${ELASTIC_SEARCH_PASSWORD}
      - xpack.security.enabled=${ELASTIC_SECURITY_ENABLED-false}
    ports:
      - "9200:9200"
      - "9300:9300"
    healthcheck:
      test: [ "CMD", "curl", "-f", "localhost:9200/_cluster/health", "--header",  "Authorization: Basic ZWxhc3RpYzpEa0llZFBQU0Ni" ]
      interval: 30s
      timeout: 10s
      retries: 4
  db:
    image: postgres
    volumes:
      - ./${DB_DIR-db-data}:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_DB=registry
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    healthcheck:
      test: [ "CMD-SHELL", "pg_isready -U postgres" ]
      interval: 10s
      timeout: 5s
      retries: 5
  registry:
    image: dockerhub/sunbird-rc-core:${RELEASE_VERSION}
    volumes:
      - ${PWD}/${SCHEMA_DIR-java/registry/src/main/resources/public/_schemas}:/home/sunbirdrc/config/public/_schemas
    environment:
      - connectionInfo_uri=jdbc:postgresql://db:5432/registry
      - connectionInfo_username=postgres
      - connectionInfo_password=postgres
      - elastic_search_connection_url=es:9200
      - elastic_search_auth_enabled=${ELASTIC_SECURITY_ENABLED-false}
      - elastic_search_username=${ELASTIC_SEARCH_USERNAME-elastic}
      - elastic_search_password=${ELASTIC_SEARCH_PASSWORD}
      - search_providerName=${SEARCH_PROVIDER_NAME-dev.sunbirdrc.registry.service.ElasticSearchService}
      - sunbird_sso_realm=${KEYCLOAK_REALM-sunbird-rc}
      - sunbird_sso_url=http://keycloak:8080/auth
      - sunbird_sso_admin_client_id=${KEYCLOAK_ADMIN_CLIENT_ID-admin-api}
      - sunbird_sso_client_id=${KEYCLOAK_CLIENT_ID-registry-frontend}
      - sunbird_sso_admin_client_secret=fd11a771-810b-4b9d-bbb5-c690ada67253
      - claims_url=http://claim-ms:8082
      - sign_url=http://certificate-signer:8079/sign
      - sign_health_check_url=http://certificate-signer:8079/health
      - signature_enabled=true
      - pdf_url=http://certificate-api:8078/api/v1/certificatePDF
      - certificate_health_check_url=http://certificate-api:8078/health
      - template_base_url=http://registry:8081/api/v1/templates/ #Looks for certificate templates for pdf copy of the signed certificate
      - sunbird_keycloak_user_set_password=true
      - filestorage_connection_url=http://file-storage:9000
      - filestorage_access_key=admin
      - filestorage_secret_key=12345678
      - filestorage_bucket_key=issuance
      - registry_base_apis_enable=false
      - sunbird_keycloak_user_password=abcd@123
      - logging.level.root=INFO
      - enable_external_templates=true
      - async_enabled=${ASYNC_ENABLED-false}
      - authentication_enabled=true
      - kafka_bootstrap_address=kafka:9092
      - webhook_enabled=false
      - webhook_url=http://localhost:5001/api/v1/callback
      - redis_host=redis
      - redis_port=6379
      - manager_type=${MANAGER_TYPE-DefinitionsManager}
    ports:
      - "8081:8081"
    depends_on:
      es:
        condition: service_healthy
      db:
        condition: service_healthy
    healthcheck:
      test: [ "CMD-SHELL", "wget -nv -t1 --spider http://localhost:8081/health || exit 1" ]
      interval: 30s
      timeout: 10s
      retries: 4
  keycloak:
    image: dockerhub/sunbird-rc-keycloak:latest
    volumes:
      - ${PWD}/${KEYCLOAK_IMPORT_DIR-imports}:/opt/jboss/keycloak/imports
    environment:
      - KEYCLOAK_LOGO=https://svgshare.com/i/hCs.svg
      - DB_VENDOR=postgres
      - DB_ADDR=db
      - DB_PORT=5432
      - DB_DATABASE=registry
      - DB_USER=postgres
      - DB_PASSWORD=postgres
      - KEYCLOAK_USER=${KEYCLOAK_ADMIN_USER-admin}
      - KEYCLOAK_PASSWORD=${KEYCLOAK_ADMIN_PASSWORD-admin}
      - KEYCLOAK_IMPORT=/opt/jboss/keycloak/imports/realm-export.json
      - PROXY_ADDRESS_FORWARDING=true
    healthcheck:
      test:
        ["CMD-SHELL", "curl -f http://localhost:9990/ || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 5
    ports:
      - "8080:8080"
      - "9990:9990"
    depends_on:
      db:
        condition: service_healthy
  claim-ms:
    image: dockerhub/sunbird-rc-claim-ms:${RELEASE_VERSION}
    environment:
      - connectionInfo_uri=jdbc:postgresql://db:5432/registry
      - connectionInfo_username=postgres
      - connectionInfo_password=postgres
      - sunbirdrc_url=http://registry:8081
    ports:
      - "8082:8082"
    depends_on:
      db:
        condition: service_started
      registry:
        condition: service_started
    healthcheck:
      test: [ "CMD-SHELL", "wget -nv -t1 --spider http://localhost:8082/health || exit 1" ]
      interval: 30s
      timeout: 10s
      retries: 4
  certificate-signer:
    image: dockerhub/sunbird-rc-certificate-signer:${RELEASE_VERSION}
    environment:
      - PORT=8079
    ports:
      - "8079:8079"
    volumes:
      - ./imports:/etc/signer
    healthcheck:
      test:
        [ "CMD-SHELL", "curl -f http://localhost:8079/health || exit 1" ]
      interval: 30s
      timeout: 10s
      retries: 5
  certificate-api:
    image: dockerhub/sunbird-rc-certificate-api:${RELEASE_VERSION}
    environment:
      - PORT=8078
    ports:
      - "8078:8078"
    healthcheck:
      test:
        [ "CMD-SHELL", "wget -nv -t1 --spider http://localhost:8078/health || exit 1" ]
      interval: 30s
      timeout: 10s
      retries: 5
  file-storage:
    image: quay.io/minio/minio
    volumes:
      - ${HOME}/minio/data:/data
    environment:
      - MINIO_ROOT_USER=admin
      - MINIO_ROOT_PASSWORD=12345678
    command: server --address 0.0.0.0:9000 --console-address 0.0.0.0:9001 /data
    ports:
      - "9000:9000"
      - "9001:9001"
    healthcheck:
      test: [ "CMD", "curl", "-f", "http://localhost:9000/minio/health/live" ]
      interval: 30s
      timeout: 20s
      retries: 3
  notification-ms:
    image: dockerhub/sunbird-rc-notification-service:${RELEASE_VERSION}
    ports:
      - "8765:8765"
    healthcheck:
      test:
        [ "CMD-SHELL", "wget -nv -t1 --spider http://localhost:8765/notification-service/v1/health || exit 1" ]
      interval: 30s
      timeout: 10s
      retries: 5
  zookeeper:
    image: confluentinc/cp-zookeeper:latest
    ports:
      - "2181:2181"
    environment:
      ZOOKEEPER_CLIENT_PORT: "2181"
      ZOOKEEPER_TICK_TIME: "2000"
  kafka:
    image: confluentinc/cp-kafka:latest
    depends_on:
      zookeeper:
        condition: service_started
    ports:
      - "9092:9092"
    environment:
      KAFKA_BROKER_ID: "1"
      KAFKA_ZOOKEEPER_CONNECT: "zookeeper:2181"
      KAFKA_ADVERTISED_LISTENERS: "INTERNAL://kafka:9092,OUTSIDE://localhost:9094"
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INTERNAL:PLAINTEXT,OUTSIDE:PLAINTEXT"
      KAFKA_INTER_BROKER_LISTENER_NAME: "INTERNAL"
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: "1"
    healthcheck:
      test:
        [ "CMD", "kafka-topics", "--list", "--zookeeper", "zookeeper:2181" ]
      interval: 30s
      timeout: 10s
      retries: 4
  public-key-service:
    image: dockerhub/sunbird-rc-public-key-service
    environment:
      - CONFIG_BASE_PATH=/etc/keys
    ports:
      - "3300:3300"
    healthcheck:
      test: [ "CMD", "curl", "-f", "localhost:3300/public-key-service/api/v1/health" ]
      interval: 30s
      timeout: 10s
      retries: 4
    volumes:
      - ./imports:/etc/keys
  context-proxy-service:
    image: dockerhub/sunbird-rc-context-proxy-service
    ports:
      - "4400:4400"
    healthcheck:
      test: [ "CMD", "curl", "-f", "localhost:4400/health" ]
      interval: 30s
      timeout: 10s
      retries: 4
  nginx:
    image: dockerhub/sunbird-rc-nginx
    ports:
      - "80:80"
    depends_on:
      registry:
        condition: service_healthy
      context-proxy-service:
        condition: service_started
      public-key-service:
        condition: service_started
      keycloak:
        condition: service_started
      claim-ms:
        condition: service_started
      file-storage:
        condition: service_started
    healthcheck:
      test: [ "CMD", "curl", "-f", "localhost:80" ]
      interval: 30s
      timeout: 10s
      retries: 4
  redis:
    image: redis:latest
    ports:
      - "6379:6379"


volumes:
  data: