version: "3.7"
volumes:
  connector_db_data:
  connector_logs:
  patientlist_db_data:
  patientlist_logs:
  idmanager_logs:
  store_db_data:
  store_logs:
secrets:
  mainzelliste.docker.conf:
    file: ../internal-configuration/mainzelliste.conf
  magicpl.docker.xml:
    file: ../internal-configuration/magicpl.xml
  dktk_bridgehead_info.docker.xml:
    file: ../internal-configuration/bridgehead-common.xml
  centralSearchPublicKey:
    file: ../internal-configuration/centralSearchPublicKey.der
  proxy.docker.xml:
    file: ../internal-configuration/proxy.xml

services:
  traefik:
    container_name: bridgehead_traefik
    image: traefik:2.4
    command:
      - --api.insecure=true
      - --entrypoints.web.address=:80
      - --entrypoints.web-secure.address=:443
      - --providers.docker=true
    environment:
      http_proxy: ""
      HTTP_PROXY: ""
      https_proxy: ""
      HTTPS_PROXY: ""      
    ports:
      - 80:80
      - 443:443
      - 8080:8080
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro

  landing:
    container_name: bridgehead_landingpage
    image: nginx:stable
    volumes:
      - ../landing/:/usr/share/nginx/html
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.landing.rule=PathPrefix(`/`)"
      - "traefik.http.services.landing.loadbalancer.server.port=80"

  connector:
    container_name: bridgehead_c4_connector
    image: docker.verbis.dkfz.de/ccp/connector:3
    environment:
      STORE_URL: http://bridgehead_c4_store:8080
      LDM_URL: http://bridgehead_c4_store:8080
      POSTGRES_HOST: ${CONNECTOR_DB_HOST}
      POSTGRES_PASSWORD: ${CONNECTOR_POSTGRES_PASS}
      NNGM_PASSWORD: ${NNGM_PASSWORD}
      NNGM_MAINZELLISTE_APIKEY: ${NNGM_MAINZELLISTE_APIKEY}
    volumes:
      - "connector_logs:/usr/local/tomcat/logs"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.c4_connector.rule=PathPrefix(`/c4-connector`)"
      - "traefik.http.services.c4_connector.loadbalancer.server.port=8080"
    depends_on:
      - connector_db
    restart: always
    env_file:
    ###TODO: Move into Image
      - internal.env

  connector_db:
    container_name: bridgehead_c4_connector_db
    image: postgres:10.17
    environment:
      POSTGRES_HOST: ${CONNECTOR_DB_HOST}
      POSTGRES_PASSWORD: ${CONNECTOR_POSTGRES_PASS}
    volumes:
      - "connector_db_data:/var/lib/postgresql/data"
    restart: always
    env_file:
    ###TODO: Move into Image
      - internal.env

  idmanager:
    container_name: bridgehead_idmanager
    image: docker.verbis.dkfz.de/ccp/idmanager:deploy-c4
    environment:
      TOMCAT_REVERSEPROXY_FQDN: ${HOST}/id-manager
      MAGICPL_MAINZELLISTE_API_KEY: ${MAGICPL_MAINZELLISTE_API_KEY}
      MAGICPL_API_KEY: ${MAGICPL_API_KEY}
      MAGICPL_API_KEY_CONNECTOR: ${MAGICPL_API_KEY_CONNECTOR}
      MAGICPL_PASSPHRASE: ${MAGICPL_PASSPHRASE}
      MAGICPL_MAINZELLISTE_CENTRAL_API_KEY: ${MAGICPL_MAINZELLISTE_CENTRAL_API_KEY}
      MAGICPL_CENTRAL_API_KEY: ${MAGICPL_CENTRAL_API_KEY}
      MAGICPL_OIDC_CLIENT_ID: ${MAGICPL_OIDC_CLIENT_ID}
      MAGICPL_OIDC_CLIENT_SECRET: ${MAGICPL_OIDC_CLIENT_SECRET}
    volumes:
      - "idmanager_logs:/usr/local/tomcat/logs"
    secrets:
      - magicpl.docker.xml
      - dktk_bridgehead_info.docker.xml
      - proxy.docker.xml
    labels:
      - "traefik.http.routers.idmanager.rule=PathPrefix(`/id-manager`)"
      - "traefik.http.middlewares.idmanager_strip.stripprefix.prefixes=/id-mana\
        ger"
      - "traefik.http.routers.idmanager.middlewares=idmanager_strip"
      - "traefik.http.services.idmanager.loadbalancer.server.port=8080"
    env_file:
    ###TODO: Move into Image
      - internal.env

  store:
    container_name: bridgehead_c4_store
    image: docker.verbis.dkfz.de/ccp/samply.store:release-5.1.2
    environment:
      POSTGRES_HOST: bridgehead_c4_store_db
      POSTGRES_PORT: 5432
      POSTGRES_DB: samplystore
      POSTGRES_USER: samplystore
      POSTGRES_PASSWORD: samplystore
      TZ: Europe/Berlin
    volumes:
      - "store_logs:/usr/local/tomcat/logs"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.store_c4.rule=PathPrefix(`/c4-loc\
        aldatamanagement`)"
    depends_on:
      - store_db
    restart: always
    env_file:
    ###TODO: Move into Image
      - internal.env

  store_db:
    container_name: bridgehead_c4_store_db
    image: postgres:9.5-alpine
    command: postgres -c datestyle='iso, dmy'
    environment:
      POSTGRES_PORT: 5432
      POSTGRES_DB: samplystore
      POSTGRES_USER: samplystore
      POSTGRES_PASSWORD: samplystore
    volumes:
      - "store_db_data:/var/lib/postgresql/data"
    restart: always
    env_file:
    ###TODO: Move into Image
      - internal.env