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_dktk_connector
    image: "samply/share-client:dktk-7"
    environment:
      TOMCAT_REVERSEPROXY_FQDN: ${HOST}/dktk-connector
      DEPLOYMENT_CONTEXT: dktk-connector
      STORE_URL: ${STORE_URL}
      POSTGRES_HOST: ${CONNECTOR_DB_HOST}
      POSTGRES_PASS: ${CONNECTOR_POSTGRES_PASS}
    volumes:
      - "connector_logs:/usr/local/tomcat/logs"
    depends_on:
      - connector_db
    restart: always
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.dktk_connector.rule=PathPrefix(`/dktk-connector`)"
      - "traefik.http.services.dktk_connector.loadbalancer.server.port=8080"
    env_file:
    ###TODO: Move into Image
      - internal.env

  connector_db:
    container_name: bridgehead_dktk_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_id-manager
    image: docker.verbis.dkfz.de/pseudonymisierung/magicpl:release-0.2.0
    environment:
      TOMCAT_REVERSEPROXY_FQDN: ${HOST}
      DEPLOYMENT_CONTEXT: id-manager
      MAGICPL_SITE: ${SITEID}
      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}
      TZ: Europe/Berlin
    volumes:
      - "idmanager_logs:/usr/local/tomcat/logs"
    secrets:
      - magicpl.docker.xml
      - dktk_bridgehead_info.docker.xml
      - proxy.docker.xml
    depends_on:
      - patientlist
    labels:
      - "traefik.http.routers.idmanager.rule=PathPrefix(`/id-manager`)"
      - "traefik.http.services.idmanager.loadbalancer.server.port=8080"
    env_file:
    ###TODO: Move into Image
      - internal.env

  patientlist:
    container_name: bridgehead_patientlist
    image: medicalinformatics/mainzelliste:develop
    environment:
      ML_DB_PASS: ${ML_DB_PASS}
      ML_API_KEY: ${ML_API_KEY}
      ML_SITE: ${SITEID}
      TOMCAT_REVERSEPROXY_FQDN: ${HOST}
      DEPLOYMENT_CONTEXT: patientlist
    env_file:
      - ../site-config/patientlist.env
      - internal.env
    volumes:
      - "patientlist_logs:/usr/local/tomcat/logs"
    secrets:
      - mainzelliste.docker.conf
      - centralSearchPublicKey
    labels:
      - "traefik.http.routers.patientlist.rule=PathPrefix(`/patientlist`)"
      - "traefik.http.services.patientlist.loadbalancer.server.port=8080"
    depends_on:
      - patientlist_db

  patientlist_db:
    container_name: bridgehead_dktk_patientlist_db
    image: postgres:13.1-alpine
    environment:
      POSTGRES_PASSWORD: ${ML_DB_PASS}
    volumes:
      - "patientlist_db_data:/var/lib/postgresql/data"
    env_file:
    ###TODO: Move into Image
      - internal.env