Files
bridgehead/ovis/docker-compose.yml
T
2026-06-17 15:55:01 +02:00

309 lines
15 KiB
YAML

services:
traefik:
container_name: bridgehead-ovis-traefik
forward_proxy:
container_name: bridgehead-ovis-forward-proxy
landing:
container_name: bridgehead-ovis-landingpage
environment:
PROJECT: minimal
ovis-frontend:
image: ${OVIS_GENERAL_IMAGE_NAMESPACE:-thewindmom}/ovis-frontend:${OVIS_IMAGE_TAG:-latest}
container_name: bridgehead-ovis-frontend
environment:
HTTP_PROXY: ${OVIS_HTTP_PROXY:-}
HTTPS_PROXY: ${OVIS_HTTPS_PROXY:-}
NO_PROXY: ${OVIS_NO_PROXY:-}
http_proxy: ${OVIS_HTTP_PROXY:-}
https_proxy: ${OVIS_HTTPS_PROXY:-}
no_proxy: ${OVIS_NO_PROXY:-}
PUBLIC_IMPORT_MODE: ${OVIS_IMPORT_MODE:-demo}
PUBLIC_LDAP_ENABLED: ${PUBLIC_LDAP_ENABLED:-false}
PUBLIC_LOGIN_ENABLED: ${PUBLIC_LOGIN_ENABLED:-false}
OVIS_PUBLIC_BASE_PATH: ${OVIS_PUBLIC_BASE_PATH:-/ovis}
PUBLIC_SYSTEM_START_LANGUAGE: ${PUBLIC_SYSTEM_START_LANGUAGE:-en}
PUBLIC_NAV_PATIENT_COHORT_ENABLED: ${PUBLIC_NAV_PATIENT_COHORT_ENABLED:-true}
PUBLIC_NAV_PATIENT_SINGLE_ENABLED: ${PUBLIC_NAV_PATIENT_SINGLE_ENABLED:-true}
PUBLIC_NAV_DIAGNOSIS_ENABLED: ${PUBLIC_NAV_DIAGNOSIS_ENABLED:-true}
PUBLIC_NAV_TNM_ENABLED: ${PUBLIC_NAV_TNM_ENABLED:-true}
PUBLIC_NAV_THERAPY_GENERAL_ENABLED: ${PUBLIC_NAV_THERAPY_GENERAL_ENABLED:-true}
PUBLIC_NAV_THERAPY_OPERATION_ENABLED: ${PUBLIC_NAV_THERAPY_OPERATION_ENABLED:-true}
PUBLIC_NAV_THERAPY_SYSTEMIC_ENABLED: ${PUBLIC_NAV_THERAPY_SYSTEMIC_ENABLED:-true}
PUBLIC_NAV_THERAPY_RADIATION_ENABLED: ${PUBLIC_NAV_THERAPY_RADIATION_ENABLED:-true}
PUBLIC_NAV_PROGRESS_ENABLED: ${PUBLIC_NAV_PROGRESS_ENABLED:-true}
PUBLIC_NAV_TUMORBOARD_ENABLED: ${PUBLIC_NAV_TUMORBOARD_ENABLED:-true}
PUBLIC_NAV_CONSULTATION_ENABLED: ${PUBLIC_NAV_CONSULTATION_ENABLED:-true}
PUBLIC_NAV_STATUS_ENABLED: ${PUBLIC_NAV_STATUS_ENABLED:-true}
PUBLIC_NAV_SURVIVAL_ENABLED: ${PUBLIC_NAV_SURVIVAL_ENABLED:-true}
PUBLIC_NAV_SUPPLEMENTARY_ENABLED: ${PUBLIC_NAV_SUPPLEMENTARY_ENABLED:-true}
PUBLIC_NAV_MOLECULAR_ENABLED: ${PUBLIC_NAV_MOLECULAR_ENABLED:-true}
PUBLIC_NAV_BIO_MATERIAL_ENABLED: ${PUBLIC_NAV_BIO_MATERIAL_ENABLED:-true}
PUBLIC_NAV_STUDY_ENABLED: ${PUBLIC_NAV_STUDY_ENABLED:-false}
PUBLIC_NAV_USER_MANAGEMENT_ENABLED: ${PUBLIC_NAV_USER_MANAGEMENT_ENABLED:-true}
PUBLIC_SITE_SPECIFIC_TECHNICAL_ADMIN_NAME: ${PUBLIC_SITE_SPECIFIC_TECHNICAL_ADMIN_NAME:-Local Admin}
PUBLIC_SITE_SPECIFIC_TECHNICAL_ADMIN_EMAIL: ${PUBLIC_SITE_SPECIFIC_TECHNICAL_ADMIN_EMAIL:-}
PUBLIC_SITE_SPECIFIC_SHOW_USERAGREEMENT: ${PUBLIC_SITE_SPECIFIC_SHOW_USERAGREEMENT:-false}
PUBLIC_SITE_SPECIFIC_SHOW_IMPRINT: ${PUBLIC_SITE_SPECIFIC_SHOW_IMPRINT:-false}
OVIS_CATALOGUE_UPSTREAM_URL: ${OVIS_CATALOGUE_UPSTREAM_URL:-}
EXPRESS_AUTH_URL: http://express-auth:5000
EXPRESS_AUTH_USERNAME: ${EXPRESS_AUTH_USERNAME}
EXPRESS_AUTH_PASSWORD: ${EXPRESS_AUTH_PASSWORD}
GRAPHQL_UPSTREAM_URL: http://ovis-backend-apollo:4001/graphql
ORIGIN: ${OVIS_PUBLIC_ORIGIN}
volumes:
- ovis-catalogue-data:/app/dynamic-catalogue:ro
- ${OVIS_CATALOGUE_FILE:-../ovis/runtime/mongodb/ovis-catalogue.json}:/app/static/ovis-catalogue.json:ro
- ${OVIS_SITE_DOWNLOADS_DIR:-../ovis/runtime/downloads}/UserAgreement/ovis_userAgreement_en_template.pdf:/app/static/downloads/ovis_userAgreement_en_template.pdf:ro
- ${OVIS_SITE_DOWNLOADS_DIR:-../ovis/runtime/downloads}/UserAgreement/ovis_userAgreement_de_template.pdf:/app/static/downloads/ovis_userAgreement_de_template.pdf:ro
- ${OVIS_SITE_DOWNLOADS_DIR:-../ovis/runtime/downloads}/Authorization/ovis_authorization_en_template.pdf:/app/static/downloads/ovis_authorization_en_template.pdf:ro
- ${OVIS_SITE_DOWNLOADS_DIR:-../ovis/runtime/downloads}/Authorization/ovis_authorization_de_template.pdf:/app/static/downloads/ovis_authorization_de_template.pdf:ro
depends_on:
ovis-backend-apollo:
condition: service_healthy
labels:
- "traefik.enable=true"
- "traefik.http.routers.ovis-frontend.tls=true"
- "traefik.http.routers.ovis-frontend.rule=PathPrefix(`${OVIS_PUBLIC_BASE_PATH:-/ovis}`)"
- "traefik.http.routers.ovis-frontend.middlewares=ovis-slash-redirect,ovis-frontend-strip"
- "traefik.http.middlewares.ovis-slash-redirect.redirectregex.regex=^https?://([^/]+)${OVIS_PUBLIC_BASE_PATH:-/ovis}$$"
- "traefik.http.middlewares.ovis-slash-redirect.redirectregex.replacement=https://$${1}${OVIS_PUBLIC_BASE_PATH:-/ovis}/"
- "traefik.http.middlewares.ovis-slash-redirect.redirectregex.permanent=true"
- "traefik.http.middlewares.ovis-frontend-strip.stripprefix.prefixes=${OVIS_PUBLIC_BASE_PATH:-/ovis}"
- "traefik.http.services.ovis-frontend.loadbalancer.server.port=5173"
ovis-backend-apollo:
image: ${OVIS_GENERAL_IMAGE_NAMESPACE:-thewindmom}/ovis-backend-apollo:${OVIS_IMAGE_TAG:-latest}
container_name: bridgehead-ovis-backend
environment:
APOLLO_PORT: ${APOLLO_PORT:-4001}
CREDOS_PORT: ${CREDOS_PORT:-4000}
HTTP_PROXY: ${OVIS_HTTP_PROXY:-}
HTTPS_PROXY: ${OVIS_HTTPS_PROXY:-}
NO_PROXY: ${OVIS_NO_PROXY:-}
http_proxy: ${OVIS_HTTP_PROXY:-}
https_proxy: ${OVIS_HTTPS_PROXY:-}
no_proxy: ${OVIS_NO_PROXY:-}
MONGO_VER: latest
CORS_ORIGIN: "*"
DB: ${DB:-onc_test}
ADDRESS: mongodb://ovis-backend-database-mongodb:27017
volumes:
- ${OVIS_OPS4_FILE:-../ovis/runtime/mongodb/ops4.mjs}:/ops-data/ops4.mjs:ro
depends_on:
ovis-backend-database-mongodb:
condition: service_started
ovis-backend-mongodb-data-preprocessing:
condition: service_healthy
ovis-backend-data-import:
condition: service_started
healthcheck:
test: ["CMD-SHELL", "test -d /app/node_modules/mongodb"]
interval: 10s
timeout: 5s
retries: 5
ovis-backend-database-mongodb:
image: ${OVIS_GENERAL_IMAGE_NAMESPACE:-thewindmom}/ovis-backend-mongodb:${OVIS_IMAGE_TAG:-latest}
container_name: bridgehead-ovis-mongo
environment:
DB: ${DB:-onc_test}
OVIS_ROOT_USERNAME: ${OVIS_ROOT_USERNAME:-ovis-root}
volumes:
- ${OVIS_MONGO_INIT_FILE:-../ovis/runtime/mongodb/initdb.js}:/docker-entrypoint-initdb.d/init.js:ro
- ovis-mongo-db:/data/db
- ovis-mongo-conf:/data/configdb
ovis-backend-mongodb-data-preprocessing:
image: ${OVIS_GENERAL_IMAGE_NAMESPACE:-thewindmom}/ovis-backend-preprocessor:${OVIS_IMAGE_TAG:-latest}
container_name: bridgehead-ovis-preprocessing
environment:
APOLLO_PORT: ${APOLLO_PORT:-4001}
CREDOS_PORT: ${CREDOS_PORT:-4000}
HTTP_PROXY: ${OVIS_HTTP_PROXY:-}
HTTPS_PROXY: ${OVIS_HTTPS_PROXY:-}
NO_PROXY: ${OVIS_NO_PROXY:-}
http_proxy: ${OVIS_HTTP_PROXY:-}
https_proxy: ${OVIS_HTTPS_PROXY:-}
no_proxy: ${OVIS_NO_PROXY:-}
MONGO_VER: latest
CORS_ORIGIN: "*"
DB: ${DB:-onc_test}
ADDRESS: mongodb://ovis-backend-database-mongodb:27017
CATALOGUE_PATH: /app/generated/ovis-catalogue.json
PREPROCESSOR_NODE_HEAP_MB: ${PREPROCESSOR_NODE_HEAP_MB:-32768}
OVIS_PREPROC_DECEASED_KEYWORDS: ${OVIS_PREPROC_DECEASED_KEYWORDS:-}
OVIS_PREPROC_REZIDIV_PREFIXES: ${OVIS_PREPROC_REZIDIV_PREFIXES:-}
OVIS_PREPROC_REZIDIV_CANONICAL: ${OVIS_PREPROC_REZIDIV_CANONICAL:-}
OVIS_PREPROC_REZIDIV_LYMPH_STATES: ${OVIS_PREPROC_REZIDIV_LYMPH_STATES:-}
OVIS_PREPROC_PROGRESS_LABELS: ${OVIS_PREPROC_PROGRESS_LABELS:-}
OVIS_PREPROC_COMPLETE_REMISSION_LABELS: ${OVIS_PREPROC_COMPLETE_REMISSION_LABELS:-}
OVIS_PREPROC_RCLASS_SUCCESS: ${OVIS_PREPROC_RCLASS_SUCCESS:-}
OVIS_PREPROC_LOCAL_RSTATE_SUCCESS: ${OVIS_PREPROC_LOCAL_RSTATE_SUCCESS:-}
OVIS_PREPROC_METASTASIS_PREFIXES: ${OVIS_PREPROC_METASTASIS_PREFIXES:-}
OVIS_PREPROC_METASTASIS_SPREAD_VALUES: ${OVIS_PREPROC_METASTASIS_SPREAD_VALUES:-}
OVIS_PREPROC_METASTASIS_STRAT_SYNCHRON: ${OVIS_PREPROC_METASTASIS_STRAT_SYNCHRON:-}
OVIS_PREPROC_METASTASIS_STRAT_NONE: ${OVIS_PREPROC_METASTASIS_STRAT_NONE:-}
OVIS_PREPROC_NULL_STUDY_PHASES: ${OVIS_PREPROC_NULL_STUDY_PHASES:-}
OVIS_PREPROC_PREV_THERAPY_SURGERY: ${OVIS_PREPROC_PREV_THERAPY_SURGERY:-}
OVIS_PREPROC_PREV_THERAPY_SYSTEMIC: ${OVIS_PREPROC_PREV_THERAPY_SYSTEMIC:-}
OVIS_PREPROC_PREV_THERAPY_RADIATION: ${OVIS_PREPROC_PREV_THERAPY_RADIATION:-}
OVIS_PREPROC_PREV_CONSULTATION_NUTRITION: ${OVIS_PREPROC_PREV_CONSULTATION_NUTRITION:-}
OVIS_PREPROC_PREV_CONSULTATION_SOCIAL: ${OVIS_PREPROC_PREV_CONSULTATION_SOCIAL:-}
OVIS_PREPROC_PREV_CONSULTATION_PSYCHO: ${OVIS_PREPROC_PREV_CONSULTATION_PSYCHO:-}
OVIS_PREPROC_PREV_CONSULTATION_GENETIC: ${OVIS_PREPROC_PREV_CONSULTATION_GENETIC:-}
OVIS_PREPROC_TUMORBOARD_PATTERN_PRAE: ${OVIS_PREPROC_TUMORBOARD_PATTERN_PRAE:-}
OVIS_PREPROC_TUMORBOARD_PATTERN_POST: ${OVIS_PREPROC_TUMORBOARD_PATTERN_POST:-}
OVIS_PREPROC_TUMORBOARD_PATTERN_MTB: ${OVIS_PREPROC_TUMORBOARD_PATTERN_MTB:-}
OVIS_PREPROC_ECOG_PREFIX: ${OVIS_PREPROC_ECOG_PREFIX:-}
OVIS_PREPROC_DISTRESS_TYPE: ${OVIS_PREPROC_DISTRESS_TYPE:-}
OVIS_PREPROC_DISTRESS_POSITIVE_VALUES: ${OVIS_PREPROC_DISTRESS_POSITIVE_VALUES:-}
depends_on:
ovis-backend-database-mongodb:
condition: service_started
volumes:
- ovis-catalogue-data:/app/generated
healthcheck:
test: ["CMD-SHELL", "node -e \"require('http').get('http://localhost:9000/health', res => process.exit(res.statusCode===200?0:1)).on('error', () => process.exit(1));\""]
interval: 10s
timeout: 5s
retries: 12
start_period: 10s
command: ["node", "./Preprocessing/catalogue-service.mjs"]
ovis-backend-data-import:
image: ${OVIS_DATA_IMPORT_IMAGE:-${OVIS_GENERAL_IMAGE_NAMESPACE:-thewindmom}/ovis-backend-data-import-${OVIS_IMPORT_MODE:-demo}:${OVIS_IMAGE_TAG:-latest}}
container_name: bridgehead-ovis-import
env_file:
- path: ${OVIS_DATA_IMPORT_ENV_FILE:-/etc/bridgehead/ovis.conf}
required: false
environment:
HTTP_PROXY: ${OVIS_HTTP_PROXY:-}
HTTPS_PROXY: ${OVIS_HTTPS_PROXY:-}
NO_PROXY: ${OVIS_NO_PROXY:-}
http_proxy: ${OVIS_HTTP_PROXY:-}
https_proxy: ${OVIS_HTTPS_PROXY:-}
no_proxy: ${OVIS_NO_PROXY:-}
FHIR_SERVER_URL: ${FHIR_SERVER_URL:-}
FHIR_USERNAME: ${FHIR_USERNAME:-}
FHIR_PASSWORD: ${FHIR_PASSWORD:-}
ICD10_FILTER: ${ICD10_FILTER:-}
CREDOS_EXPORT_DIR: /input/CREDOSExportFiles
CREDOS_IMPORTER_NODE_HEAP_MB: ${CREDOS_IMPORTER_NODE_HEAP_MB:-8192}
volumes:
- ${OVIS_CREDOS_EXPORT_DIR:-../ovis/runtime/input/CREDOSExportFiles}:/input/CREDOSExportFiles:ro
depends_on:
ovis-backend-mongodb-data-preprocessing:
condition: service_healthy
postgres:
image: ghcr.io/baosystems/postgis:13-3.5
container_name: bridgehead-ovis-postgres
environment:
POSTGRES_DB: ${POSTGRES_DB:-keycloak}
POSTGRES_USER: ${POSTGRES_USER:-ovis_keycloak}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- ovis-postgres-data:/var/lib/postgresql/data
keycloak:
image: ${OVIS_GENERAL_IMAGE_NAMESPACE:-thewindmom}/ovis-keycloak:${OVIS_IMAGE_TAG:-latest}
container_name: bridgehead-ovis-keycloak
environment:
DB_VENDOR: postgres
DB_ADDR: postgres
DB_DATABASE: ${POSTGRES_DB:-keycloak}
DB_USER: ${POSTGRES_USER:-ovis_keycloak}
DB_PASSWORD: ${POSTGRES_PASSWORD}
KEYCLOAK_ADMIN: ${KEYCLOAK_ADMIN:-ovis-admin}
KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_ADMIN_PASSWORD}
KEYCLOAK_HOSTNAME: ${OVIS_KEYCLOAK_HOSTNAME}
APP_DOMAIN: ${HOST}
KEYCLOAK_PORT: ${KEYCLOAK_PORT:-8252}
NGINX_PROXY_MODE: "true"
NGINX_SSL_ENABLED: "true"
NGINX_HTTP_PORT: "80"
NGINX_HTTPS_PORT: "443"
PUBLIC_LDAP_ENABLED: ${PUBLIC_LDAP_ENABLED:-false}
LDAP_CERTIFICATE_NAME: ${LDAP_CERTIFICATE_NAME:-}
LDAP_CONNECTION_URL: ${LDAP_CONNECTION_URL:-}
LDAP_BIND_DN: ${LDAP_BIND_DN:-}
LDAP_BIND_CREDENTIAL: ${LDAP_BIND_CREDENTIAL:-}
LDAP_USERS_DN: ${LDAP_USERS_DN:-}
LDAP_EDIT_MODE: ${LDAP_EDIT_MODE:-READ_ONLY}
LDAP_VENDOR: ${LDAP_VENDOR:-}
LDAP_USERNAME_ATTRIBUTE: ${LDAP_USERNAME_ATTRIBUTE:-}
LDAP_RDN_ATTRIBUTE: ${LDAP_RDN_ATTRIBUTE:-}
LDAP_UUID_ATTRIBUTE: ${LDAP_UUID_ATTRIBUTE:-}
LDAP_USER_OBJECT_CLASSES: ${LDAP_USER_OBJECT_CLASSES:-}
LDAP_USER_FILTER: ${LDAP_USER_FILTER:-}
LDAP_SEARCH_SCOPE: ${LDAP_SEARCH_SCOPE:-}
LDAP_READ_TIMEOUT: ${LDAP_READ_TIMEOUT:-}
LDAP_PAGINATION: ${LDAP_PAGINATION:-}
LDAP_REFERRAL: ${LDAP_REFERRAL:-}
LDAP_EMAIL_ATTRIBUTE: ${LDAP_EMAIL_ATTRIBUTE:-}
LDAP_FIRST_NAME_ATTRIBUTE: ${LDAP_FIRST_NAME_ATTRIBUTE:-}
LDAP_LAST_NAME_ATTRIBUTE: ${LDAP_LAST_NAME_ATTRIBUTE:-}
KEYCLOAK_CLIENT_ID: ${KEYCLOAK_CLIENT_ID:-ovis_client}
KEYCLOAK_CLIENT_SECRET: ${KEYCLOAK_CLIENT_SECRET}
KEYCLOAK_ADMIN_CLIENT_ID: ${KEYCLOAK_ADMIN_CLIENT_ID:-admin-cli}
KEYCLOAK_ADMIN_CLIENT_SECRET: ${KEYCLOAK_ADMIN_CLIENT_SECRET}
OVIS_ROOT_USERNAME: ${OVIS_ROOT_USERNAME:-ovis-root}
OVIS_ROOT_PASSWORD: ${OVIS_ROOT_PASSWORD}
KEYCLOAK_HTTP_RELATIVE_PATH: ${KEYCLOAK_HTTP_RELATIVE_PATH:-/ovis/keycloak}
volumes:
- ${OVIS_SITE_CERTS_DIR:-../ovis/runtime/certs}:/etc/keycloak/certs:ro
- ${OVIS_SITE_KEYCLOAK_REALM_FILE:-../ovis/runtime/keycloak/ovis-realm.json}:/realm-base/ovis-realm.json:ro
- ${OVIS_KEYCLOAK_ENTRYPOINT_FILE:-../ovis/runtime/keycloak/keycloak-entrypoint.sh}:/bridgehead-keycloak-entrypoint.sh:ro
entrypoint: ["/bridgehead-keycloak-entrypoint.sh"]
depends_on:
- postgres
labels:
- "traefik.enable=true"
- "traefik.http.routers.ovis-keycloak.tls=true"
- "traefik.http.routers.ovis-keycloak.rule=PathPrefix(`${KEYCLOAK_HTTP_RELATIVE_PATH:-/ovis/keycloak}`)"
- "traefik.http.services.ovis-keycloak.loadbalancer.server.port=8080"
express-auth:
image: ${OVIS_GENERAL_IMAGE_NAMESPACE:-thewindmom}/ovis-express-auth:${OVIS_IMAGE_TAG:-latest}
container_name: bridgehead-ovis-express-auth
environment:
PORT: "5000"
HTTP_PROXY: ${OVIS_HTTP_PROXY:-}
HTTPS_PROXY: ${OVIS_HTTPS_PROXY:-}
NO_PROXY: ${OVIS_NO_PROXY:-}
http_proxy: ${OVIS_HTTP_PROXY:-}
https_proxy: ${OVIS_HTTPS_PROXY:-}
no_proxy: ${OVIS_NO_PROXY:-}
BASIC_AUTH_USERNAME: ${EXPRESS_AUTH_USERNAME}
BASIC_AUTH_PASSWORD: ${EXPRESS_AUTH_PASSWORD}
KEYCLOAK_URL: http://keycloak:8080${KEYCLOAK_HTTP_RELATIVE_PATH:-/ovis/keycloak}
KEYCLOAK_REALM: ${KEYCLOAK_REALM:-ovis}
KEYCLOAK_CLIENT_ID: ${KEYCLOAK_CLIENT_ID:-ovis_client}
KEYCLOAK_CLIENT_SECRET: ${KEYCLOAK_CLIENT_SECRET}
KEYCLOAK_ADMIN_CLIENT_ID: ${KEYCLOAK_ADMIN_CLIENT_ID:-admin-cli}
KEYCLOAK_ADMIN_CLIENT_SECRET: ${KEYCLOAK_ADMIN_CLIENT_SECRET}
APP_DOMAIN: ${HOST}
FRONTEND_PORT: "443"
NGINX_PROXY_MODE: "true"
NGINX_SSL_ENABLED: "true"
NGINX_HTTP_PORT: "80"
NGINX_HTTPS_PORT: "443"
depends_on:
- keycloak
labels:
- "traefik.enable=true"
- "traefik.http.routers.ovis-express.tls=true"
- "traefik.http.routers.ovis-express.rule=PathPrefix(`${OVIS_PUBLIC_BASE_PATH:-/ovis}/express`)"
- "traefik.http.routers.ovis-express.middlewares=ovis-express-strip"
- "traefik.http.middlewares.ovis-express-strip.stripprefix.prefixes=${OVIS_PUBLIC_BASE_PATH:-/ovis}/express"
- "traefik.http.services.ovis-express.loadbalancer.server.port=5000"
volumes:
ovis-catalogue-data:
ovis-mongo-db:
ovis-mongo-conf:
ovis-postgres-data: