Files
bridgehead/ovis/docker-compose.yml
T

333 lines
18 KiB
YAML

services:
ovis-frontend:
image: ${OVIS_GENERAL_IMAGE_NAMESPACE:-ovisadmin}/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:-true}
PUBLIC_NAV_USER_MANAGEMENT_ENABLED: ${PUBLIC_NAV_USER_MANAGEMENT_ENABLED:-true}
PUBLIC_QUICKTOOLS_GENDER_BUTTONS: "${PUBLIC_QUICKTOOLS_GENDER_BUTTONS:-M|m;W|w;Other|other}"
PUBLIC_QUICKTOOLS_GENDER_OTHER_EXCLUSIONS: "${PUBLIC_QUICKTOOLS_GENDER_OTHER_EXCLUSIONS:-m;w}"
PUBLIC_QUICKTOOLS_CERT_CASES_POS: "${PUBLIC_QUICKTOOLS_CERT_CASES_POS:-primary=Primary Case|Ja,recurrence=Recurrence Case|true,center=Center Case|Ja}"
PUBLIC_QUICKTOOLS_CERT_CASES_NEG: "${PUBLIC_QUICKTOOLS_CERT_CASES_NEG:-primary=Primary Case|Nein,recurrence=Recurrence Case|false,center=Center Case|Nein}"
PUBLIC_QUICKTOOLS_CERT_INTERNAL_LABEL: "${PUBLIC_QUICKTOOLS_CERT_INTERNAL_LABEL:-Meine Einrichtung|Meine Einrichtung}"
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}
PUBLIC_SITE_SPECIFIC_IMPRINT_RESPONSIBLE_WEBHOST_ORGANIZATION: ${PUBLIC_SITE_SPECIFIC_IMPRINT_RESPONSIBLE_WEBHOST_ORGANIZATION:-}
PUBLIC_SITE_SPECIFIC_IMPRINT_RESPONSIBLE_WEBHOST_PERSON: ${PUBLIC_SITE_SPECIFIC_IMPRINT_RESPONSIBLE_WEBHOST_PERSON:-}
PUBLIC_SITE_SPECIFIC_IMPRINT_RESPONSIBLE_WEBHOST_ADDRESS_STREET: ${PUBLIC_SITE_SPECIFIC_IMPRINT_RESPONSIBLE_WEBHOST_ADDRESS_STREET:-}
PUBLIC_SITE_SPECIFIC_IMPRINT_RESPONSIBLE_WEBHOST_ADDRESS_AREA: ${PUBLIC_SITE_SPECIFIC_IMPRINT_RESPONSIBLE_WEBHOST_ADDRESS_AREA:-}
PUBLIC_SITE_SPECIFIC_IMPRINT_HOSPITAL_PASSUS: ${PUBLIC_SITE_SPECIFIC_IMPRINT_HOSPITAL_PASSUS:-}
PUBLIC_SITE_SPECIFIC_IMPRINT_RESPONSIBLE_HOSPITAL_DIRECTOR: ${PUBLIC_SITE_SPECIFIC_IMPRINT_RESPONSIBLE_HOSPITAL_DIRECTOR:-}
PUBLIC_SITE_SPECIFIC_IMPRINT_HOSPITAL_NAME: ${PUBLIC_SITE_SPECIFIC_IMPRINT_HOSPITAL_NAME:-}
PUBLIC_SITE_SPECIFIC_IMPRINT_ADDRESS_STREET: ${PUBLIC_SITE_SPECIFIC_IMPRINT_ADDRESS_STREET:-}
PUBLIC_SITE_SPECIFIC_IMPRINT_ADDRESS_AREA: ${PUBLIC_SITE_SPECIFIC_IMPRINT_ADDRESS_AREA:-}
PUBLIC_SITE_SPECIFIC_IMPRINT_DATA_PROTECTION_OFFICER_NAME: ${PUBLIC_SITE_SPECIFIC_IMPRINT_DATA_PROTECTION_OFFICER_NAME:-}
PUBLIC_SITE_SPECIFIC_IMPRINT_DATA_PROTECTION_OFFICER_STREET: ${PUBLIC_SITE_SPECIFIC_IMPRINT_DATA_PROTECTION_OFFICER_STREET:-}
PUBLIC_SITE_SPECIFIC_IMPRINT_DATA_PROTECTION_OFFICER_AREA: ${PUBLIC_SITE_SPECIFIC_IMPRINT_DATA_PROTECTION_OFFICER_AREA:-}
PUBLIC_SITE_SPECIFIC_IMPRINT_DATA_PROTECTION_OFFICER_EMAIL: ${PUBLIC_SITE_SPECIFIC_IMPRINT_DATA_PROTECTION_OFFICER_EMAIL:-}
OVIS_CATALOGUE_UPSTREAM_URL: ${OVIS_CATALOGUE_UPSTREAM_URL:-}
ORIGIN: ${OVIS_PUBLIC_ORIGIN:-https://${HOST:-localhost}}
volumes:
- ovis-catalogue-data:/app/dynamic-catalogue:ro
depends_on:
ovis-backend-apollo:
condition: service_healthy
labels:
- "traefik.enable=true"
- "traefik.http.routers.ovis-frontend-root.tls=true"
- "traefik.http.routers.ovis-frontend-root.rule=Host(`${HOST:-localhost}`) && PathPrefix(`/`)"
- "traefik.http.routers.ovis-frontend-root.priority=20"
- "traefik.http.routers.ovis-frontend-root.service=ovis-frontend"
- "traefik.http.routers.ovis-frontend.tls=true"
- "traefik.http.routers.ovis-frontend.rule=PathPrefix(`${OVIS_PUBLIC_BASE_PATH:-/ovis}`)"
- "traefik.http.routers.ovis-frontend.priority=30"
- "traefik.http.routers.ovis-frontend.service=ovis-frontend"
- "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:-ovisadmin}/ovis-backend-apollo:${OVIS_IMAGE_TAG:-latest}
container_name: bridgehead-ovis-backend
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:-}
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:-ovisadmin}/ovis-backend-mongodb:${OVIS_IMAGE_TAG:-latest}
container_name: bridgehead-ovis-mongo
environment:
OVIS_ROOT_USERNAME: ${OVIS_ROOT_USERNAME:-ovis-root}
volumes:
- ovis-mongo-db:/data/db
- ovis-mongo-conf:/data/configdb
ovis-backend-mongodb-data-preprocessing:
image: ${OVIS_GENERAL_IMAGE_NAMESPACE:-ovisadmin}/ovis-backend-preprocessor:${OVIS_IMAGE_TAG:-latest}
container_name: bridgehead-ovis-preprocessing
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:-}
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:-ovisadmin}/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:-ovis-postgres-password}
volumes:
- ovis-postgres-data:/var/lib/postgresql/data
keycloak:
image: ${OVIS_GENERAL_IMAGE_NAMESPACE:-ovisadmin}/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:-ovis-postgres-password}
KEYCLOAK_ADMIN: ${KEYCLOAK_ADMIN:-ovis-admin}
KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_ADMIN_PASSWORD:-ovis-admin-password}
KEYCLOAK_HOSTNAME: ${OVIS_KEYCLOAK_HOSTNAME:-${HOST:-localhost}}
APP_DOMAIN: ${HOST:-localhost}
KEYCLOAK_PORT: ${KEYCLOAK_PORT:-8252}
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:-ovis-keycloak-client-secret}
KEYCLOAK_ADMIN_CLIENT_ID: ${KEYCLOAK_ADMIN_CLIENT_ID:-admin-cli}
KEYCLOAK_ADMIN_CLIENT_SECRET: ${KEYCLOAK_ADMIN_CLIENT_SECRET:-ovis-keycloak-admin-client-secret}
OVIS_ROOT_USERNAME: ${OVIS_ROOT_USERNAME:-ovis-root}
OVIS_ROOT_PASSWORD: ${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.routers.ovis-keycloak.priority=50"
- "traefik.http.services.ovis-keycloak.loadbalancer.server.port=8080"
express-auth:
image: ${OVIS_GENERAL_IMAGE_NAMESPACE:-ovisadmin}/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: admin
BASIC_AUTH_PASSWORD: admin
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:-ovis-keycloak-client-secret}
KEYCLOAK_ADMIN_CLIENT_ID: ${KEYCLOAK_ADMIN_CLIENT_ID:-admin-cli}
KEYCLOAK_ADMIN_CLIENT_SECRET: ${KEYCLOAK_ADMIN_CLIENT_SECRET:-ovis-keycloak-admin-client-secret}
APP_DOMAIN: ${HOST:-localhost}
FRONTEND_PORT: ${OVIS_FRONTEND_PORT:-443}
CORS_ALLOWED_ORIGINS: ${OVIS_EXPRESS_AUTH_ALLOWED_ORIGINS:-https://${HOST:-localhost},https://${HOST:-localhost}:${OVIS_HTTPS_PORT:-443}}
command:
- sh
- -c
- |
node - <<'NODE'
const fs = require('fs');
const sourcePath = 'src/index.js';
const marker = "const frontendPort = process.env.FRONTEND_PORT || '5173';";
const source = fs.readFileSync(sourcePath, 'utf8');
if (!source.includes(marker) && !source.includes('CORS_ALLOWED_ORIGINS')) {
console.error(`Cannot configure express-auth CORS: expected marker not found in $${sourcePath}`);
process.exit(1);
}
if (!source.includes('CORS_ALLOWED_ORIGINS')) {
fs.writeFileSync(
sourcePath,
source.replace(
marker,
`$${marker}
const configuredOrigins = (process.env.CORS_ALLOWED_ORIGINS || '')
.split(',')
.map((origin) => origin.trim())
.filter(Boolean);
configuredOrigins.forEach((origin) => origins.add(origin));`
)
);
}
NODE
npm start
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.priority=50"
- "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.routers.ovis-express-compat.tls=true"
- "traefik.http.routers.ovis-express-compat.rule=PathPrefix(`/express`)"
- "traefik.http.routers.ovis-express-compat.priority=50"
- "traefik.http.routers.ovis-express-compat.middlewares=ovis-express-compat-strip"
- "traefik.http.middlewares.ovis-express-compat-strip.stripprefix.prefixes=/express"
- "traefik.http.services.ovis-express.loadbalancer.server.port=5000"
volumes:
ovis-catalogue-data:
ovis-mongo-db:
ovis-mongo-conf:
ovis-postgres-data: