mirror of
https://github.com/samply/bridgehead.git
synced 2025-09-12 09:30:24 +02:00
Compare commits
12 Commits
test/teile
...
feat/selin
Author | SHA1 | Date | |
---|---|---|---|
|
add8886849 | ||
|
078c16e8dd | ||
|
98e0512a61 | ||
|
c530b55aa4 | ||
|
4c6f9e0f13 | ||
|
a1cdc2659d | ||
|
92bc0557a3 | ||
|
141f1f22d0 | ||
|
b4a788e010 | ||
|
c33fbfc8bc | ||
|
faa8abd4ee | ||
|
7693289d4d |
34
README.md
34
README.md
@@ -24,6 +24,9 @@ This repository is the starting point for any information and tools you will nee
|
|||||||
- [BBMRI-ERIC Directory entry needed](#bbmri-eric-directory-entry-needed)
|
- [BBMRI-ERIC Directory entry needed](#bbmri-eric-directory-entry-needed)
|
||||||
- [Directory sync tool](#directory-sync-tool)
|
- [Directory sync tool](#directory-sync-tool)
|
||||||
- [Loading data](#loading-data)
|
- [Loading data](#loading-data)
|
||||||
|
- [Teiler (Frontend)](#teiler-frontend)
|
||||||
|
- [Data Exporter Service](#data-exporter-service)
|
||||||
|
- [Data Quality Report](#data-quality-report)
|
||||||
4. [Things you should know](#things-you-should-know)
|
4. [Things you should know](#things-you-should-know)
|
||||||
- [Auto-Updates](#auto-updates)
|
- [Auto-Updates](#auto-updates)
|
||||||
- [Auto-Backups](#auto-backups)
|
- [Auto-Backups](#auto-backups)
|
||||||
@@ -379,6 +382,37 @@ Normally, you will need to build your own ETL to feed the Bridgehead. However, t
|
|||||||
|
|
||||||
You can find the profiles for generating FHIR in [Simplifier](https://simplifier.net/bbmri.de/~resources?category=Profile).
|
You can find the profiles for generating FHIR in [Simplifier](https://simplifier.net/bbmri.de/~resources?category=Profile).
|
||||||
|
|
||||||
|
### Teiler (Frontend)
|
||||||
|
|
||||||
|
Teiler is the web-based frontend of the Bridgehead, providing access to its various internal, and external services and components.
|
||||||
|
To learn how to integrate your custom module into Teiler, please refer to https://github.com/samply/teiler-dashboard.
|
||||||
|
- To activate Teiler, set the following environment variable in your `<PROJECT>.conf` file:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ENABLE_TEILER=true
|
||||||
|
```
|
||||||
|
|
||||||
|
### Data Exporter Service
|
||||||
|
|
||||||
|
The Exporter is a dedicated service for extracting and exporting Bridgehead data in (tabular) formats such as Excel, CSV, Opal, JSON, XML, ...
|
||||||
|
- To enable the Exporter service, set the following environment variable in your `<PROJECT>.conf` file:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ENABLE_EXPORTER=true
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Data Quality Report
|
||||||
|
To assess the quality and plausibility of your imported data, the Reporter component is pre-configured to generate Excel reports with data quality metrics and statistical analyses. Reporter is part of the Exporter and can be enabled by setting the same environment variable in your `<PROJECT>.conf` file:
|
||||||
|
```bash
|
||||||
|
ENABLE_EXPORTER=true
|
||||||
|
```
|
||||||
|
|
||||||
|
For convenience, it's recommended to enable the Teiler web frontend alongside the Exporter to access export and quality control features via a web interface: set the following environment varibles in your `<PROJECT>.conf` file:
|
||||||
|
```bash
|
||||||
|
ENABLE_TEILER=true
|
||||||
|
ENABLE_EXPORTER=true
|
||||||
|
```
|
||||||
|
|
||||||
## Things you should know
|
## Things you should know
|
||||||
|
|
||||||
### Auto-Updates
|
### Auto-Updates
|
||||||
|
@@ -26,7 +26,3 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
blaze-data:
|
blaze-data:
|
||||||
|
|
||||||
# used in modules *-locator.yml
|
|
||||||
secrets:
|
|
||||||
proxy.pem:
|
|
||||||
file: /etc/bridgehead/pki/${SITE_ID}.priv.pem
|
|
||||||
|
@@ -26,11 +26,11 @@ services:
|
|||||||
ALL_PROXY: http://forward_proxy:3128
|
ALL_PROXY: http://forward_proxy:3128
|
||||||
TLS_CA_CERTIFICATES_DIR: /conf/trusted-ca-certs
|
TLS_CA_CERTIFICATES_DIR: /conf/trusted-ca-certs
|
||||||
ROOTCERT_FILE: /conf/root.crt.pem
|
ROOTCERT_FILE: /conf/root.crt.pem
|
||||||
secrets:
|
|
||||||
- proxy.pem
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- "forward_proxy"
|
- "forward_proxy"
|
||||||
volumes:
|
volumes:
|
||||||
- /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
|
- /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
|
||||||
- /srv/docker/bridgehead/bbmri/modules/${ERIC_ROOT_CERT}.root.crt.pem:/conf/root.crt.pem:ro
|
- /srv/docker/bridgehead/bbmri/modules/${ERIC_ROOT_CERT}.root.crt.pem:/conf/root.crt.pem:ro,Z
|
||||||
|
# secrets don't seem to allow us to specify Z
|
||||||
|
- /etc/bridgehead/pki/${SITE_ID}.priv.pem:/run/secrets/proxy.pem:ro
|
||||||
|
|
||||||
|
@@ -1,20 +1,20 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
MIIDNTCCAh2gAwIBAgIUE/wu6FmI+KSMOalI65b+lI3HI4cwDQYJKoZIhvcNAQEL
|
MIIDNTCCAh2gAwIBAgIUFzdpDi1OLdXyogtCsktHFhCILtMwDQYJKoZIhvcNAQEL
|
||||||
BQAwFjEUMBIGA1UEAxMLQnJva2VyLVJvb3QwHhcNMjQwOTE2MTUyMzU0WhcNMzQw
|
BQAwFjEUMBIGA1UEAxMLQnJva2VyLVJvb3QwHhcNMjUwNjEwMTQzNjE1WhcNMzUw
|
||||||
OTE0MTUyNDI0WjAWMRQwEgYDVQQDEwtCcm9rZXItUm9vdDCCASIwDQYJKoZIhvcN
|
NjA4MTQzNjQ1WjAWMRQwEgYDVQQDEwtCcm9rZXItUm9vdDCCASIwDQYJKoZIhvcN
|
||||||
AQEBBQADggEPADCCAQoCggEBAOt1I1FQt2bI4Nnjtg8JBYid29cBIkDT4MMb45Jr
|
AQEBBQADggEPADCCAQoCggEBALpJCWE9Qe19R9DqotdkPV6jfiuJSKI3UYkCWdWG
|
||||||
ays24y4R3WO7VJK9UjNduSq/A1jlA0W0A/szDf8Ojq6bBtg+uL92PTDjYH1QXwX0
|
nRfkKB6OaY5t3JCHDqaEME9FwSd2nFXhTp5F6snG/K7g8MCLIEzGzuSnrdjGqINq
|
||||||
c7eMo2tvvyyrs/cb2/ovDBQ1lpibcxVmVAv042ASmil3SdqKKXpv3ATnF9I7V4cv
|
zXLfgqnxvQpPR4ARLNNgnKxZaq7m4Q3T/l+QAshK6CnCUWFQ6q5x3g/pZHFP2USd
|
||||||
fwB56FChaGIov5EK+9JOMjTx6oMlBEgUFR6qq/lSqM9my0HYwUFbX2W+nT9EKEIP
|
/G2FtDHX6YK4bHbbnigIPG6PdY2RYy60i30XGdIPBNf82XGkAtPUBz731gHOV5Vg
|
||||||
9UP1eyfRZR3E/+oticnm/cS20BGCbjoYrNgLthXKyaASuhGoElKs8EZ3h9MiI+u0
|
d+jfAqTwZAhYC2CcNmswFw1H9GrvTI/9KZWKcZNUIqemc0A/FyEyONUM18/vjQ7D
|
||||||
DpR0KpePhAkMLugBrgYWqkMwwD1684LfC4YVQrsLwzo5OW8CAwEAAaN7MHkwDgYD
|
lUwOcQsgAg44QTOUPgqXv3sJPQM5EnGuv3yYV9u6Y2i78M8CAwEAAaN7MHkwDgYD
|
||||||
VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPbXs3g3lMjH
|
VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPrDeNWgtEyZ
|
||||||
1JMe0a5aVbN7lB92MB8GA1UdIwQYMBaAFPbXs3g3lMjH1JMe0a5aVbN7lB92MBYG
|
VM0yeoRZdK2QGjyvMB8GA1UdIwQYMBaAFPrDeNWgtEyZVM0yeoRZdK2QGjyvMBYG
|
||||||
A1UdEQQPMA2CC0Jyb2tlci1Sb290MA0GCSqGSIb3DQEBCwUAA4IBAQBM5RsXb2HN
|
A1UdEQQPMA2CC0Jyb2tlci1Sb290MA0GCSqGSIb3DQEBCwUAA4IBAQAD2S0kqL18
|
||||||
FpC1mYfocXAn20Zu4d603qmc/IqkiOWbp36pWo+jk1AxejyRS9hEpQalgSnvcRPQ
|
laewh+qnyZ0WMq12mLV/Rwll6ZuShCx2uAu3UZuIGWk3l7gG5zlws+i+zbaNcn4o
|
||||||
1hPEhGU+wvI0WWVi/01iNjVbXmJNPQEouXQWAT17dyp9vqQkPw8LNzpSV/qdPgbT
|
HsS3WG9kiNLOMKp8LXGkjErl6RaQr+kb8qgYFTPjOr6v0OdVn6ve9RDNYB5Hd+zE
|
||||||
Z9o3sZrjUsSLsK7A7Q5ky4ePkiJBaMsHeAD+wqGwpiJ4D2Xhp8e1v36TWM0qt2EA
|
9jAWmS8PfS2AldE4VAd0C4pWTAinhnKGrKdn1YAX5x+LMq1y0lc1Pd4CDgsjD6SS
|
||||||
gySx9isx/jeGGPBmDqYB9BCal5lrihPN56jd+5pCkyXeZqKWiiXFJKXwcwxctYZc
|
3td7JtenXqCX0mN0XSeck7vvFGa6QpcQoVcN9tRENctHZTwyeGA21IkXylpFPUkE
|
||||||
ADHIiTLLPXE8LHTUJAO51it1NAZ1S24aMzax4eWDXcWO7/ybbx5pkYkMd6EqlKHd
|
LT60k48fNC8TZkBlfvtVGRebpm5krXIKEaVy5LniEpSuOR4hTqsgoQDntBjW4zHA
|
||||||
8riQJIhY4huX
|
GeWQ1wQNTEBX
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
@@ -36,7 +36,7 @@ services:
|
|||||||
- "traefik.http.middlewares.exporter_auth.basicauth.users=${EXPORTER_USER}"
|
- "traefik.http.middlewares.exporter_auth.basicauth.users=${EXPORTER_USER}"
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
- "/var/cache/bridgehead/bbmri/exporter-files:/app/exporter-files/output"
|
- "/var/cache/bridgehead/bbmri/exporter-files:/app/exporter-files/output:z"
|
||||||
|
|
||||||
exporter-db:
|
exporter-db:
|
||||||
image: docker.verbis.dkfz.de/cache/postgres:${POSTGRES_TAG}
|
image: docker.verbis.dkfz.de/cache/postgres:${POSTGRES_TAG}
|
||||||
@@ -47,7 +47,7 @@ services:
|
|||||||
POSTGRES_DB: "exporter"
|
POSTGRES_DB: "exporter"
|
||||||
volumes:
|
volumes:
|
||||||
# Consider removing this volume once we find a solution to save Lens-queries to be executed in the explorer.
|
# Consider removing this volume once we find a solution to save Lens-queries to be executed in the explorer.
|
||||||
- "/var/cache/bridgehead/bbmri/exporter-db:/var/lib/postgresql/data"
|
- "/var/cache/bridgehead/bbmri/exporter-db:/var/lib/postgresql/data:Z"
|
||||||
|
|
||||||
reporter:
|
reporter:
|
||||||
image: docker.verbis.dkfz.de/ccp/dktk-reporter:latest
|
image: docker.verbis.dkfz.de/ccp/dktk-reporter:latest
|
||||||
@@ -69,7 +69,7 @@ services:
|
|||||||
# There is a risk that the bridgehead restarts, losing the already created export.
|
# There is a risk that the bridgehead restarts, losing the already created export.
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
- "/var/cache/bridgehead/bbmri/reporter-files:/app/reports"
|
- "/var/cache/bridgehead/bbmri/reporter-files:/app/reports:z"
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.reporter_bbmri.rule=PathPrefix(`/bbmri-reporter`)"
|
- "traefik.http.routers.reporter_bbmri.rule=PathPrefix(`/bbmri-reporter`)"
|
||||||
|
@@ -1,15 +0,0 @@
|
|||||||
# Exporter and Reporter
|
|
||||||
|
|
||||||
|
|
||||||
## Exporter
|
|
||||||
The exporter is a REST API that exports the data of the different databases of the bridgehead in a set of tables.
|
|
||||||
It can accept different output formats as CSV, Excel, JSON or XML. It can also export data into Opal.
|
|
||||||
|
|
||||||
## Exporter-DB
|
|
||||||
It is a database to save queries for its execution in the exporter.
|
|
||||||
The exporter manages also the different executions of the same query in through the database.
|
|
||||||
|
|
||||||
## Reporter
|
|
||||||
This component is a plugin of the exporter that allows to create more complex Excel reports described in templates.
|
|
||||||
It is compatible with different template engines as Groovy, Thymeleaf,...
|
|
||||||
It is perfect to generate a document as our traditional CCP quality report.
|
|
@@ -26,11 +26,11 @@ services:
|
|||||||
ALL_PROXY: http://forward_proxy:3128
|
ALL_PROXY: http://forward_proxy:3128
|
||||||
TLS_CA_CERTIFICATES_DIR: /conf/trusted-ca-certs
|
TLS_CA_CERTIFICATES_DIR: /conf/trusted-ca-certs
|
||||||
ROOTCERT_FILE: /conf/root.crt.pem
|
ROOTCERT_FILE: /conf/root.crt.pem
|
||||||
secrets:
|
|
||||||
- proxy.pem
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- "forward_proxy"
|
- "forward_proxy"
|
||||||
volumes:
|
volumes:
|
||||||
- /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
|
- /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
|
||||||
- /srv/docker/bridgehead/bbmri/modules/${GBN_ROOT_CERT}.root.crt.pem:/conf/root.crt.pem:ro
|
- /srv/docker/bridgehead/bbmri/modules/${GBN_ROOT_CERT}.root.crt.pem:/conf/root.crt.pem:ro,Z
|
||||||
|
# secrets don't seem to allow us to specify Z
|
||||||
|
- /etc/bridgehead/pki/${SITE_ID}.priv.pem:/run/secrets/proxy.pem:ro
|
||||||
|
|
||||||
|
@@ -13,8 +13,8 @@ services:
|
|||||||
- "traefik.http.middlewares.teiler_orchestrator_bbmri_strip.stripprefix.prefixes=/bbmri-teiler"
|
- "traefik.http.middlewares.teiler_orchestrator_bbmri_strip.stripprefix.prefixes=/bbmri-teiler"
|
||||||
- "traefik.http.routers.teiler_orchestrator_bbmri.middlewares=teiler_orchestrator_bbmri_strip"
|
- "traefik.http.routers.teiler_orchestrator_bbmri.middlewares=teiler_orchestrator_bbmri_strip"
|
||||||
environment:
|
environment:
|
||||||
TEILER_BACKEND_URL: "https://${HOST}/bbmri-teiler-backend"
|
TEILER_BACKEND_URL: "/bbmri-teiler-backend"
|
||||||
TEILER_DASHBOARD_URL: "https://${HOST}/bbmri-teiler-dashboard"
|
TEILER_DASHBOARD_URL: "/bbmri-teiler-dashboard"
|
||||||
DEFAULT_LANGUAGE: "${TEILER_DEFAULT_LANGUAGE_LOWER_CASE}"
|
DEFAULT_LANGUAGE: "${TEILER_DEFAULT_LANGUAGE_LOWER_CASE}"
|
||||||
HTTP_RELATIVE_PATH: "/bbmri-teiler"
|
HTTP_RELATIVE_PATH: "/bbmri-teiler"
|
||||||
|
|
||||||
@@ -30,8 +30,8 @@ services:
|
|||||||
- "traefik.http.routers.teiler_dashboard_bbmri.middlewares=teiler_dashboard_bbmri_strip"
|
- "traefik.http.routers.teiler_dashboard_bbmri.middlewares=teiler_dashboard_bbmri_strip"
|
||||||
environment:
|
environment:
|
||||||
DEFAULT_LANGUAGE: "${TEILER_DEFAULT_LANGUAGE}"
|
DEFAULT_LANGUAGE: "${TEILER_DEFAULT_LANGUAGE}"
|
||||||
TEILER_BACKEND_URL: "https://${HOST}/bbmri-teiler-backend"
|
TEILER_BACKEND_URL: "/bbmri-teiler-backend"
|
||||||
TEILER_DASHBOARD_URL: "https://${HOST}/bbmri-teiler-dashboard"
|
TEILER_DASHBOARD_URL: "/bbmri-teiler-dashboard"
|
||||||
OIDC_URL: "${OIDC_URL}"
|
OIDC_URL: "${OIDC_URL}"
|
||||||
OIDC_CLIENT_ID: "${OIDC_PUBLIC_CLIENT_ID}"
|
OIDC_CLIENT_ID: "${OIDC_PUBLIC_CLIENT_ID}"
|
||||||
OIDC_TOKEN_GROUP: "${OIDC_GROUP_CLAIM}"
|
OIDC_TOKEN_GROUP: "${OIDC_GROUP_CLAIM}"
|
||||||
@@ -40,7 +40,7 @@ services:
|
|||||||
TEILER_ADMIN_PHONE: "${OPERATOR_PHONE}"
|
TEILER_ADMIN_PHONE: "${OPERATOR_PHONE}"
|
||||||
TEILER_PROJECT: "${PROJECT}"
|
TEILER_PROJECT: "${PROJECT}"
|
||||||
EXPORTER_API_KEY: "${EXPORTER_API_KEY}"
|
EXPORTER_API_KEY: "${EXPORTER_API_KEY}"
|
||||||
TEILER_ORCHESTRATOR_URL: "https://${HOST}/bbmri-teiler"
|
TEILER_ORCHESTRATOR_URL: "/bbmri-teiler"
|
||||||
TEILER_ORCHESTRATOR_HTTP_RELATIVE_PATH: "/bbmri-teiler"
|
TEILER_ORCHESTRATOR_HTTP_RELATIVE_PATH: "/bbmri-teiler"
|
||||||
TEILER_USER: "${OIDC_USER_GROUP}"
|
TEILER_USER: "${OIDC_USER_GROUP}"
|
||||||
TEILER_ADMIN: "${OIDC_ADMIN_GROUP}"
|
TEILER_ADMIN: "${OIDC_ADMIN_GROUP}"
|
||||||
@@ -61,10 +61,9 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
LOG_LEVEL: "INFO"
|
LOG_LEVEL: "INFO"
|
||||||
APPLICATION_PORT: "8085"
|
APPLICATION_PORT: "8085"
|
||||||
APPLICATION_ADDRESS: "${HOST}"
|
|
||||||
DEFAULT_LANGUAGE: "${TEILER_DEFAULT_LANGUAGE}"
|
DEFAULT_LANGUAGE: "${TEILER_DEFAULT_LANGUAGE}"
|
||||||
TEILER_ORCHESTRATOR_HTTP_RELATIVE_PATH: "/bbmri-teiler"
|
TEILER_ORCHESTRATOR_HTTP_RELATIVE_PATH: "/bbmri-teiler"
|
||||||
TEILER_ORCHESTRATOR_URL: "https://${HOST}/bbmri-teiler"
|
TEILER_ORCHESTRATOR_URL: "/bbmri-teiler"
|
||||||
TEILER_DASHBOARD_DE_URL: "https://${HOST}/bbmri-teiler-dashboard/de"
|
TEILER_DASHBOARD_DE_URL: "/bbmri-teiler-dashboard/de"
|
||||||
TEILER_DASHBOARD_EN_URL: "https://${HOST}/bbmri-teiler-dashboard/en"
|
TEILER_DASHBOARD_EN_URL: "/bbmri-teiler-dashboard/en"
|
||||||
HTTP_PROXY: "http://forward_proxy:3128"
|
HTTP_PROXY: "http://forward_proxy:3128"
|
||||||
|
@@ -1,19 +0,0 @@
|
|||||||
# Teiler
|
|
||||||
This module orchestrates the different microfrontends of the bridgehead as a single page application.
|
|
||||||
|
|
||||||
## Teiler Orchestrator
|
|
||||||
Single SPA component that consists on the root HTML site of the single page application and a javascript code that
|
|
||||||
gets the information about the microfrontend calling the teiler backend and is responsible for registering them. With the
|
|
||||||
resulting mapping, it can initialize, mount and unmount the required microfrontends on the fly.
|
|
||||||
|
|
||||||
The microfrontends run independently in different containers and can be based on different frameworks (Angular, Vue, React,...)
|
|
||||||
This microfrontends can run as single alone but need an extension with Single-SPA (https://single-spa.js.org/docs/ecosystem).
|
|
||||||
There are also available three templates (Angular, Vue, React) to be directly extended to be used directly in the teiler.
|
|
||||||
|
|
||||||
## Teiler Dashboard
|
|
||||||
It consists on the main dashboard and a set of embedded services.
|
|
||||||
### Login
|
|
||||||
user and password in ccp.local.conf
|
|
||||||
|
|
||||||
## Teiler Backend
|
|
||||||
In this component, the microfrontends are configured.
|
|
@@ -162,7 +162,7 @@ case "$ACTION" in
|
|||||||
adduser)
|
adduser)
|
||||||
loadVars
|
loadVars
|
||||||
log "INFO" "Adding encrypted credentials in /etc/bridgehead/$PROJECT.local.conf"
|
log "INFO" "Adding encrypted credentials in /etc/bridgehead/$PROJECT.local.conf"
|
||||||
read -p "Please choose the component (LDM_AUTH|NNGM_AUTH) you want to add a user to : " COMPONENT
|
read -p "Please choose the component (LDM_AUTH|NNGM_AUTH|EXPORTER_USER) you want to add a user to : " COMPONENT
|
||||||
read -p "Please enter a username: " USER
|
read -p "Please enter a username: " USER
|
||||||
read -s -p "Please enter a password (will not be echoed): "$'\n' PASSWORD
|
read -s -p "Please enter a password (will not be echoed): "$'\n' PASSWORD
|
||||||
add_basic_auth_user $USER $PASSWORD $COMPONENT $PROJECT
|
add_basic_auth_user $USER $PASSWORD $COMPONENT $PROJECT
|
||||||
|
@@ -35,7 +35,7 @@ services:
|
|||||||
QUERIES_TO_CACHE: '/queries_to_cache.conf'
|
QUERIES_TO_CACHE: '/queries_to_cache.conf'
|
||||||
ENDPOINT_TYPE: ${FOCUS_ENDPOINT_TYPE:-blaze}
|
ENDPOINT_TYPE: ${FOCUS_ENDPOINT_TYPE:-blaze}
|
||||||
volumes:
|
volumes:
|
||||||
- /srv/docker/bridgehead/cce/queries_to_cache.conf:/queries_to_cache.conf:ro
|
- /srv/docker/bridgehead/cce/queries_to_cache.conf:/queries_to_cache.conf:ro,Z
|
||||||
depends_on:
|
depends_on:
|
||||||
- "beam-proxy"
|
- "beam-proxy"
|
||||||
- "blaze"
|
- "blaze"
|
||||||
@@ -57,12 +57,10 @@ services:
|
|||||||
- "forward_proxy"
|
- "forward_proxy"
|
||||||
volumes:
|
volumes:
|
||||||
- /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
|
- /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
|
||||||
- /srv/docker/bridgehead/cce/root.crt.pem:/conf/root.crt.pem:ro
|
- /srv/docker/bridgehead/cce/root.crt.pem:/conf/root.crt.pem:ro,Z
|
||||||
|
# secrets don't seem to allow us to specify Z
|
||||||
|
- /etc/bridgehead/pki/${SITE_ID}.priv.pem:/run/secrets/proxy.pem:ro
|
||||||
|
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
blaze-data:
|
blaze-data:
|
||||||
|
|
||||||
secrets:
|
|
||||||
proxy.pem:
|
|
||||||
file: /etc/bridgehead/pki/${SITE_ID}.priv.pem
|
|
||||||
|
87
cce/modules/exporter-compose.yml
Normal file
87
cce/modules/exporter-compose.yml
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
version: "3.7"
|
||||||
|
|
||||||
|
services:
|
||||||
|
|
||||||
|
exporter:
|
||||||
|
image: docker.verbis.dkfz.de/ccp/dktk-exporter:latest
|
||||||
|
container_name: bridgehead-cce-exporter
|
||||||
|
environment:
|
||||||
|
JAVA_OPTS: "-Xms1G -Xmx8G -XX:+UseG1GC"
|
||||||
|
LOG_LEVEL: "INFO"
|
||||||
|
EXPORTER_API_KEY: "${EXPORTER_API_KEY}" # Set in exporter-setup.sh
|
||||||
|
CROSS_ORIGINS: "https://${HOST}"
|
||||||
|
EXPORTER_DB_USER: "exporter"
|
||||||
|
EXPORTER_DB_PASSWORD: "${EXPORTER_DB_PASSWORD}" # Set in exporter-setup.sh
|
||||||
|
EXPORTER_DB_URL: "jdbc:postgresql://exporter-db:5432/exporter"
|
||||||
|
HTTP_RELATIVE_PATH: "/cce-exporter"
|
||||||
|
SITE: "${SITE_ID}"
|
||||||
|
HTTP_SERVLET_REQUEST_SCHEME: "https"
|
||||||
|
OPAL_PASSWORD: "${EXPORTER_OPAL_PASSWORD}"
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.exporter_cce.rule=PathPrefix(`/cce-exporter`)"
|
||||||
|
- "traefik.http.services.exporter_cce.loadbalancer.server.port=8092"
|
||||||
|
- "traefik.http.routers.exporter_cce.tls=true"
|
||||||
|
- "traefik.http.middlewares.exporter_cce_strip.stripprefix.prefixes=/cce-exporter"
|
||||||
|
- "traefik.http.routers.exporter_cce.middlewares=exporter_cce_strip"
|
||||||
|
# Main router
|
||||||
|
- "traefik.http.routers.exporter_cce.priority=20"
|
||||||
|
|
||||||
|
# API router
|
||||||
|
- "traefik.http.routers.exporter_cce_api.middlewares=exporter_cce_strip,exporter_auth"
|
||||||
|
- "traefik.http.routers.exporter_cce_api.rule=PathRegexp(`/cce-exporter/.+`)"
|
||||||
|
- "traefik.http.routers.exporter_cce_api.tls=true"
|
||||||
|
- "traefik.http.routers.exporter_cce_api.priority=25"
|
||||||
|
|
||||||
|
# Shared middlewares
|
||||||
|
- "traefik.http.middlewares.exporter_auth.basicauth.users=${EXPORTER_USER}"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- "/var/cache/bridgehead/cce/exporter-files:/app/exporter-files/output:z"
|
||||||
|
|
||||||
|
exporter-db:
|
||||||
|
image: docker.verbis.dkfz.de/cache/postgres:${POSTGRES_TAG}
|
||||||
|
container_name: bridgehead-cce-exporter-db
|
||||||
|
environment:
|
||||||
|
POSTGRES_USER: "exporter"
|
||||||
|
POSTGRES_PASSWORD: "${EXPORTER_DB_PASSWORD}" # Set in exporter-setup.sh
|
||||||
|
POSTGRES_DB: "exporter"
|
||||||
|
volumes:
|
||||||
|
# Consider removing this volume once we find a solution to save Lens-queries to be executed in the explorer.
|
||||||
|
- "/var/cache/bridgehead/cce/exporter-db:/var/lib/postgresql/data:Z"
|
||||||
|
|
||||||
|
reporter:
|
||||||
|
image: docker.verbis.dkfz.de/ccp/dktk-reporter:latest
|
||||||
|
container_name: bridgehead-cce-reporter
|
||||||
|
environment:
|
||||||
|
JAVA_OPTS: "-Xms1G -Xmx8G -XX:+UseG1GC"
|
||||||
|
LOG_LEVEL: "INFO"
|
||||||
|
CROSS_ORIGINS: "https://${HOST}"
|
||||||
|
HTTP_RELATIVE_PATH: "/cce-reporter"
|
||||||
|
SITE: "${SITE_ID}"
|
||||||
|
EXPORTER_API_KEY: "${EXPORTER_API_KEY}" # Set in exporter-setup.sh
|
||||||
|
EXPORTER_URL: "http://exporter:8092"
|
||||||
|
LOG_FHIR_VALIDATION: "false"
|
||||||
|
HTTP_SERVLET_REQUEST_SCHEME: "https"
|
||||||
|
|
||||||
|
# In this initial development state of the bridgehead, we are trying to have so many volumes as possible.
|
||||||
|
# However, in the first executions in the cce sites, this volume seems to be very important. A report is
|
||||||
|
# a process that can take several hours, because it depends on the exporter.
|
||||||
|
# There is a risk that the bridgehead restarts, losing the already created export.
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- "/var/cache/bridgehead/cce/reporter-files:/app/reports:z"
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.reporter_cce.rule=PathPrefix(`/cce-reporter`)"
|
||||||
|
- "traefik.http.services.reporter_cce.loadbalancer.server.port=8095"
|
||||||
|
- "traefik.http.routers.reporter_cce.tls=true"
|
||||||
|
- "traefik.http.middlewares.reporter_cce_strip.stripprefix.prefixes=/cce-reporter"
|
||||||
|
- "traefik.http.routers.reporter_cce.middlewares=reporter_cce_strip"
|
||||||
|
- "traefik.http.routers.reporter_cce.priority=20"
|
||||||
|
|
||||||
|
- "traefik.http.routers.reporter_cce_api.middlewares=reporter_cce_strip,exporter_auth"
|
||||||
|
- "traefik.http.routers.reporter_cce_api.rule=PathRegexp(`/cce-reporter/.+`)"
|
||||||
|
- "traefik.http.routers.reporter_cce_api.tls=true"
|
||||||
|
- "traefik.http.routers.reporter_cce_api.priority=25"
|
||||||
|
|
8
cce/modules/exporter-setup.sh
Normal file
8
cce/modules/exporter-setup.sh
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/bash -e
|
||||||
|
|
||||||
|
if [ "$ENABLE_EXPORTER" == true ]; then
|
||||||
|
log INFO "Exporter setup detected -- will start Exporter service."
|
||||||
|
OVERRIDE+=" -f ./$PROJECT/modules/exporter-compose.yml"
|
||||||
|
EXPORTER_DB_PASSWORD="$(echo \"This is a salt string to generate one consistent password for the exporter. It is not required to be secret.\" | sha1sum | openssl pkeyutl -sign -inkey /etc/bridgehead/pki/${SITE_ID}.priv.pem | base64 | head -c 30)"
|
||||||
|
EXPORTER_API_KEY="$(echo \"This is a salt string to generate one consistent API KEY for the exporter. It is not required to be secret.\" | sha1sum | openssl pkeyutl -sign -inkey /etc/bridgehead/pki/${SITE_ID}.priv.pem | base64 | head -c 64)"
|
||||||
|
fi
|
@@ -17,7 +17,6 @@ services:
|
|||||||
BEAM_PROXY_ID: ${SITE_ID}
|
BEAM_PROXY_ID: ${SITE_ID}
|
||||||
BEAM_BROKER_ID: ${BROKER_ID}
|
BEAM_BROKER_ID: ${BROKER_ID}
|
||||||
BEAM_APP_ID: "focus"
|
BEAM_APP_ID: "focus"
|
||||||
PROJECT_METADATA: "cce_supervisors"
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- "beam-proxy"
|
- "beam-proxy"
|
||||||
labels:
|
labels:
|
||||||
@@ -30,4 +29,4 @@ services:
|
|||||||
- "traefik.http.routers.spot.rule=Host(`${HOST}`) && PathPrefix(`/backend`)"
|
- "traefik.http.routers.spot.rule=Host(`${HOST}`) && PathPrefix(`/backend`)"
|
||||||
- "traefik.http.middlewares.stripprefix_spot.stripprefix.prefixes=/backend"
|
- "traefik.http.middlewares.stripprefix_spot.stripprefix.prefixes=/backend"
|
||||||
- "traefik.http.routers.spot.tls=true"
|
- "traefik.http.routers.spot.tls=true"
|
||||||
- "traefik.http.routers.spot.middlewares=corsheaders2,stripprefix_spot"
|
- "traefik.http.routers.spot.middlewares=corsheaders2,stripprefix_spot,auth"
|
||||||
|
69
cce/modules/teiler-compose.yml
Normal file
69
cce/modules/teiler-compose.yml
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
version: "3.7"
|
||||||
|
|
||||||
|
services:
|
||||||
|
|
||||||
|
teiler-orchestrator:
|
||||||
|
image: docker.verbis.dkfz.de/cache/samply/teiler-orchestrator:latest
|
||||||
|
container_name: bridgehead-teiler-orchestrator
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.teiler_orchestrator_cce.rule=PathPrefix(`/cce-teiler`)"
|
||||||
|
- "traefik.http.services.teiler_orchestrator_cce.loadbalancer.server.port=9000"
|
||||||
|
- "traefik.http.routers.teiler_orchestrator_cce.tls=true"
|
||||||
|
- "traefik.http.middlewares.teiler_orchestrator_cce_strip.stripprefix.prefixes=/cce-teiler"
|
||||||
|
- "traefik.http.routers.teiler_orchestrator_cce.middlewares=teiler_orchestrator_cce_strip"
|
||||||
|
environment:
|
||||||
|
TEILER_BACKEND_URL: "/cce-teiler-backend"
|
||||||
|
TEILER_DASHBOARD_URL: "/cce-teiler-dashboard"
|
||||||
|
DEFAULT_LANGUAGE: "${TEILER_DEFAULT_LANGUAGE_LOWER_CASE}"
|
||||||
|
HTTP_RELATIVE_PATH: "/cce-teiler"
|
||||||
|
|
||||||
|
teiler-dashboard:
|
||||||
|
image: docker.verbis.dkfz.de/cache/samply/teiler-dashboard:develop
|
||||||
|
container_name: bridgehead-teiler-dashboard
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.teiler_dashboard_cce.rule=PathPrefix(`/cce-teiler-dashboard`)"
|
||||||
|
- "traefik.http.services.teiler_dashboard_cce.loadbalancer.server.port=80"
|
||||||
|
- "traefik.http.routers.teiler_dashboard_cce.tls=true"
|
||||||
|
- "traefik.http.middlewares.teiler_dashboard_cce_strip.stripprefix.prefixes=/cce-teiler-dashboard"
|
||||||
|
- "traefik.http.routers.teiler_dashboard_cce.middlewares=teiler_dashboard_cce_strip"
|
||||||
|
environment:
|
||||||
|
DEFAULT_LANGUAGE: "${TEILER_DEFAULT_LANGUAGE}"
|
||||||
|
TEILER_BACKEND_URL: "/cce-teiler-backend"
|
||||||
|
TEILER_DASHBOARD_URL: "/cce-teiler-dashboard"
|
||||||
|
OIDC_URL: "${OIDC_URL}"
|
||||||
|
OIDC_CLIENT_ID: "${OIDC_PUBLIC_CLIENT_ID}"
|
||||||
|
OIDC_TOKEN_GROUP: "${OIDC_GROUP_CLAIM}"
|
||||||
|
TEILER_ADMIN_NAME: "${OPERATOR_FIRST_NAME} ${OPERATOR_LAST_NAME}"
|
||||||
|
TEILER_ADMIN_EMAIL: "${OPERATOR_EMAIL}"
|
||||||
|
TEILER_ADMIN_PHONE: "${OPERATOR_PHONE}"
|
||||||
|
TEILER_PROJECT: "${PROJECT}"
|
||||||
|
EXPORTER_API_KEY: "${EXPORTER_API_KEY}"
|
||||||
|
TEILER_ORCHESTRATOR_URL: "/cce-teiler"
|
||||||
|
TEILER_ORCHESTRATOR_HTTP_RELATIVE_PATH: "/cce-teiler"
|
||||||
|
TEILER_USER: "${OIDC_USER_GROUP}"
|
||||||
|
TEILER_ADMIN: "${OIDC_ADMIN_GROUP}"
|
||||||
|
REPORTER_DEFAULT_TEMPLATE_ID: "cce-qb"
|
||||||
|
EXPORTER_DEFAULT_TEMPLATE_ID: "cce"
|
||||||
|
|
||||||
|
|
||||||
|
teiler-backend:
|
||||||
|
image: docker.verbis.dkfz.de/ccp/cce-teiler-backend:latest
|
||||||
|
container_name: bridgehead-teiler-backend
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.teiler_backend_cce.rule=PathPrefix(`/cce-teiler-backend`)"
|
||||||
|
- "traefik.http.services.teiler_backend_cce.loadbalancer.server.port=8085"
|
||||||
|
- "traefik.http.routers.teiler_backend_cce.tls=true"
|
||||||
|
- "traefik.http.middlewares.teiler_backend_cce_strip.stripprefix.prefixes=/cce-teiler-backend"
|
||||||
|
- "traefik.http.routers.teiler_backend_cce.middlewares=teiler_backend_cce_strip"
|
||||||
|
environment:
|
||||||
|
LOG_LEVEL: "INFO"
|
||||||
|
APPLICATION_PORT: "8085"
|
||||||
|
DEFAULT_LANGUAGE: "${TEILER_DEFAULT_LANGUAGE}"
|
||||||
|
TEILER_ORCHESTRATOR_HTTP_RELATIVE_PATH: "/cce-teiler"
|
||||||
|
TEILER_ORCHESTRATOR_URL: "/cce-teiler"
|
||||||
|
TEILER_DASHBOARD_DE_URL: "/cce-teiler-dashboard/de"
|
||||||
|
TEILER_DASHBOARD_EN_URL: "/cce-teiler-dashboard/en"
|
||||||
|
HTTP_PROXY: "http://forward_proxy:3128"
|
8
cce/modules/teiler-setup.sh
Normal file
8
cce/modules/teiler-setup.sh
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/bash -e
|
||||||
|
|
||||||
|
if [ "$ENABLE_TEILER" == true ];then
|
||||||
|
log INFO "Teiler setup detected -- will start Teiler services."
|
||||||
|
OVERRIDE+=" -f ./$PROJECT/modules/teiler-compose.yml"
|
||||||
|
TEILER_DEFAULT_LANGUAGE=EN
|
||||||
|
TEILER_DEFAULT_LANGUAGE_LOWER_CASE=${TEILER_DEFAULT_LANGUAGE,,}
|
||||||
|
fi
|
@@ -35,7 +35,7 @@ services:
|
|||||||
QUERIES_TO_CACHE: '/queries_to_cache.conf'
|
QUERIES_TO_CACHE: '/queries_to_cache.conf'
|
||||||
ENDPOINT_TYPE: ${FOCUS_ENDPOINT_TYPE:-blaze}
|
ENDPOINT_TYPE: ${FOCUS_ENDPOINT_TYPE:-blaze}
|
||||||
volumes:
|
volumes:
|
||||||
- /srv/docker/bridgehead/ccp/queries_to_cache.conf:/queries_to_cache.conf:ro
|
- /srv/docker/bridgehead/ccp/queries_to_cache.conf:/queries_to_cache.conf:ro,Z
|
||||||
depends_on:
|
depends_on:
|
||||||
- "beam-proxy"
|
- "beam-proxy"
|
||||||
- "blaze"
|
- "blaze"
|
||||||
@@ -57,11 +57,9 @@ services:
|
|||||||
- "forward_proxy"
|
- "forward_proxy"
|
||||||
volumes:
|
volumes:
|
||||||
- /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
|
- /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
|
||||||
- /srv/docker/bridgehead/ccp/root.crt.pem:/conf/root.crt.pem:ro
|
- /srv/docker/bridgehead/ccp/root.crt.pem:/conf/root.crt.pem:ro,Z
|
||||||
|
# secrets don't seem to allow us to specify Z
|
||||||
|
- /etc/bridgehead/pki/${SITE_ID}.priv.pem:/run/secrets/proxy.pem:ro
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
blaze-data:
|
blaze-data:
|
||||||
|
|
||||||
secrets:
|
|
||||||
proxy.pem:
|
|
||||||
file: /etc/bridgehead/pki/${SITE_ID}.priv.pem
|
|
||||||
|
@@ -1,25 +1,6 @@
|
|||||||
version: "3.7"
|
version: "3.7"
|
||||||
|
|
||||||
services:
|
services:
|
||||||
rstudio:
|
|
||||||
container_name: bridgehead-rstudio
|
|
||||||
image: docker.verbis.dkfz.de/ccp/dktk-rstudio:latest
|
|
||||||
environment:
|
|
||||||
#DEFAULT_USER: "rstudio" # This line is kept for informational purposes
|
|
||||||
PASSWORD: "${RSTUDIO_ADMIN_PASSWORD}" # It is required, even if the authentication is disabled
|
|
||||||
DISABLE_AUTH: "true" # https://rocker-project.org/images/versioned/rstudio.html#how-to-use
|
|
||||||
HTTP_RELATIVE_PATH: "/rstudio"
|
|
||||||
ALL_PROXY: "http://forward_proxy:3128" # https://rocker-project.org/use/networking.html
|
|
||||||
labels:
|
|
||||||
- "traefik.enable=true"
|
|
||||||
- "traefik.http.routers.rstudio_ccp.rule=PathPrefix(`/rstudio`)"
|
|
||||||
- "traefik.http.services.rstudio_ccp.loadbalancer.server.port=8787"
|
|
||||||
- "traefik.http.middlewares.rstudio_ccp_strip.stripprefix.prefixes=/rstudio"
|
|
||||||
- "traefik.http.routers.rstudio_ccp.tls=true"
|
|
||||||
- "traefik.http.routers.rstudio_ccp.middlewares=oidcAuth,rstudio_ccp_strip"
|
|
||||||
networks:
|
|
||||||
- rstudio
|
|
||||||
|
|
||||||
opal:
|
opal:
|
||||||
container_name: bridgehead-opal
|
container_name: bridgehead-opal
|
||||||
image: docker.verbis.dkfz.de/ccp/dktk-opal:latest
|
image: docker.verbis.dkfz.de/ccp/dktk-opal:latest
|
||||||
@@ -54,10 +35,10 @@ services:
|
|||||||
BEAM_SECRET: ${TOKEN_MANAGER_SECRET}
|
BEAM_SECRET: ${TOKEN_MANAGER_SECRET}
|
||||||
BEAM_DATASHIELD_PROXY: request-manager
|
BEAM_DATASHIELD_PROXY: request-manager
|
||||||
volumes:
|
volumes:
|
||||||
- "/var/cache/bridgehead/ccp/opal-metadata-db:/srv" # Opal metadata
|
- "/var/cache/bridgehead/ccp/opal-metadata-db:/srv:Z" # Opal metadata
|
||||||
secrets:
|
# secrets don't seem to allow us to specify Z/z
|
||||||
- opal-cert.pem
|
- /tmp/bridgehead/opal-cert.pem:/run/secrets/opal-cert.pem:z
|
||||||
- opal-key.pem
|
- /tmp/bridgehead/opal-key.pem:/run/secrets/opal-key.pem:Z
|
||||||
|
|
||||||
opal-db:
|
opal-db:
|
||||||
container_name: bridgehead-opal-db
|
container_name: bridgehead-opal-db
|
||||||
@@ -67,7 +48,7 @@ services:
|
|||||||
POSTGRES_USER: "opal"
|
POSTGRES_USER: "opal"
|
||||||
POSTGRES_DB: "opal"
|
POSTGRES_DB: "opal"
|
||||||
volumes:
|
volumes:
|
||||||
- "/var/cache/bridgehead/ccp/opal-db:/var/lib/postgresql/data" # Opal project data (imported from exporter)
|
- "/var/cache/bridgehead/ccp/opal-db:/var/lib/postgresql/data:Z" # Opal project data (imported from exporter)
|
||||||
|
|
||||||
opal-rserver:
|
opal-rserver:
|
||||||
container_name: bridgehead-opal-rserver
|
container_name: bridgehead-opal-rserver
|
||||||
@@ -86,85 +67,14 @@ services:
|
|||||||
DISCOVERY_URL: "./map/central.json"
|
DISCOVERY_URL: "./map/central.json"
|
||||||
LOCAL_TARGETS_FILE: "./map/local.json"
|
LOCAL_TARGETS_FILE: "./map/local.json"
|
||||||
NO_AUTH: "true"
|
NO_AUTH: "true"
|
||||||
secrets:
|
|
||||||
- opal-cert.pem
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- beam-proxy
|
- beam-proxy
|
||||||
volumes:
|
volumes:
|
||||||
- /tmp/bridgehead/opal-map/:/map/:ro
|
- /tmp/bridgehead/opal-map/:/map/:ro,Z
|
||||||
networks:
|
# secrets don't seem to allow us to specify Z/z
|
||||||
- default
|
- /tmp/bridgehead/opal-cert.pem:/run/secrets/opal-cert.pem:z
|
||||||
- rstudio
|
|
||||||
|
|
||||||
traefik:
|
|
||||||
labels:
|
|
||||||
- "traefik.http.middlewares.oidcAuth.forwardAuth.address=http://oauth2-proxy:4180/"
|
|
||||||
- "traefik.http.middlewares.oidcAuth.forwardAuth.trustForwardHeader=true"
|
|
||||||
- "traefik.http.middlewares.oidcAuth.forwardAuth.authResponseHeaders=X-Auth-Request-Access-Token,Authorization"
|
|
||||||
networks:
|
|
||||||
- default
|
|
||||||
- rstudio
|
|
||||||
forward_proxy:
|
|
||||||
networks:
|
|
||||||
- default
|
|
||||||
- rstudio
|
|
||||||
|
|
||||||
beam-proxy:
|
beam-proxy:
|
||||||
environment:
|
environment:
|
||||||
APP_datashield-connect_KEY: ${DATASHIELD_CONNECT_SECRET}
|
APP_datashield-connect_KEY: ${DATASHIELD_CONNECT_SECRET}
|
||||||
APP_token-manager_KEY: ${TOKEN_MANAGER_SECRET}
|
APP_token-manager_KEY: ${TOKEN_MANAGER_SECRET}
|
||||||
|
|
||||||
# TODO: Allow users of group /DataSHIELD and OIDC_USER_GROUP at the same time:
|
|
||||||
# Maybe a solution would be (https://oauth2-proxy.github.io/oauth2-proxy/configuration/oauth_provider):
|
|
||||||
# --allowed-groups=/DataSHIELD,OIDC_USER_GROUP
|
|
||||||
oauth2-proxy:
|
|
||||||
image: docker.verbis.dkfz.de/cache/oauth2-proxy/oauth2-proxy:latest
|
|
||||||
container_name: bridgehead-oauth2proxy
|
|
||||||
command: >-
|
|
||||||
--allowed-group=DataSHIELD
|
|
||||||
--oidc-groups-claim=${OIDC_GROUP_CLAIM}
|
|
||||||
--auth-logging=true
|
|
||||||
--whitelist-domain=${HOST}
|
|
||||||
--http-address="0.0.0.0:4180"
|
|
||||||
--reverse-proxy=true
|
|
||||||
--upstream="static://202"
|
|
||||||
--email-domain="*"
|
|
||||||
--cookie-name="_BRIDGEHEAD_oauth2"
|
|
||||||
--cookie-secret="${OAUTH2_PROXY_SECRET}"
|
|
||||||
--cookie-expire="12h"
|
|
||||||
--cookie-secure="true"
|
|
||||||
--cookie-httponly="true"
|
|
||||||
#OIDC settings
|
|
||||||
--provider="keycloak-oidc"
|
|
||||||
--provider-display-name="VerbIS Login"
|
|
||||||
--client-id="${OIDC_PRIVATE_CLIENT_ID}"
|
|
||||||
--client-secret="${OIDC_CLIENT_SECRET}"
|
|
||||||
--redirect-url="https://${HOST}${OAUTH2_CALLBACK}"
|
|
||||||
--oidc-issuer-url="${OIDC_URL}"
|
|
||||||
--scope="openid email profile"
|
|
||||||
--code-challenge-method="S256"
|
|
||||||
--skip-provider-button=true
|
|
||||||
#X-Forwarded-Header settings - true/false depending on your needs
|
|
||||||
--pass-basic-auth=true
|
|
||||||
--pass-user-headers=false
|
|
||||||
--pass-access-token=false
|
|
||||||
labels:
|
|
||||||
- "traefik.enable=true"
|
|
||||||
- "traefik.http.routers.oauth2_proxy.rule=PathPrefix(`/oauth2`)"
|
|
||||||
- "traefik.http.services.oauth2_proxy.loadbalancer.server.port=4180"
|
|
||||||
- "traefik.http.routers.oauth2_proxy.tls=true"
|
|
||||||
environment:
|
|
||||||
http_proxy: "http://forward_proxy:3128"
|
|
||||||
https_proxy: "http://forward_proxy:3128"
|
|
||||||
depends_on:
|
|
||||||
forward_proxy:
|
|
||||||
condition: service_healthy
|
|
||||||
|
|
||||||
secrets:
|
|
||||||
opal-cert.pem:
|
|
||||||
file: /tmp/bridgehead/opal-cert.pem
|
|
||||||
opal-key.pem:
|
|
||||||
file: /tmp/bridgehead/opal-key.pem
|
|
||||||
|
|
||||||
networks:
|
|
||||||
rstudio:
|
|
||||||
|
@@ -5,17 +5,12 @@ if [ "$ENABLE_DATASHIELD" == true ]; then
|
|||||||
if [ -z "${ENABLE_EXPORTER}" ] || [ "${ENABLE_EXPORTER}" != "true" ]; then
|
if [ -z "${ENABLE_EXPORTER}" ] || [ "${ENABLE_EXPORTER}" != "true" ]; then
|
||||||
log WARN "The ENABLE_EXPORTER variable is either not set or not set to 'true'."
|
log WARN "The ENABLE_EXPORTER variable is either not set or not set to 'true'."
|
||||||
fi
|
fi
|
||||||
OAUTH2_CALLBACK=/oauth2/callback
|
|
||||||
OAUTH2_PROXY_SECRET="$(echo \"This is a salt string to generate one consistent encryption key for the oauth2_proxy. It is not required to be secret.\" | sha1sum | openssl pkeyutl -sign -inkey /etc/bridgehead/pki/${SITE_ID}.priv.pem | base64 | head -c 32)"
|
|
||||||
add_private_oidc_redirect_url "${OAUTH2_CALLBACK}"
|
|
||||||
|
|
||||||
log INFO "DataSHIELD setup detected -- will start DataSHIELD services."
|
log INFO "DataSHIELD setup detected -- will start DataSHIELD services."
|
||||||
OVERRIDE+=" -f ./$PROJECT/modules/datashield-compose.yml"
|
OVERRIDE+=" -f ./$PROJECT/modules/datashield-compose.yml"
|
||||||
EXPORTER_OPAL_PASSWORD="$(generate_password \"exporter in Opal\")"
|
EXPORTER_OPAL_PASSWORD="$(generate_password \"exporter in Opal\")"
|
||||||
TOKEN_MANAGER_OPAL_PASSWORD="$(generate_password \"Token Manager in Opal\")"
|
TOKEN_MANAGER_OPAL_PASSWORD="$(generate_password \"Token Manager in Opal\")"
|
||||||
OPAL_DB_PASSWORD="$(echo \"Opal DB\" | generate_simple_password)"
|
OPAL_DB_PASSWORD="$(echo \"Opal DB\" | generate_simple_password)"
|
||||||
OPAL_ADMIN_PASSWORD="$(generate_password \"admin password for Opal\")"
|
OPAL_ADMIN_PASSWORD="$(generate_password \"admin password for Opal\")"
|
||||||
RSTUDIO_ADMIN_PASSWORD="$(generate_password \"admin password for R-Studio\")"
|
|
||||||
DATASHIELD_CONNECT_SECRET="$(echo \"DataShield Connect\" | generate_simple_password)"
|
DATASHIELD_CONNECT_SECRET="$(echo \"DataShield Connect\" | generate_simple_password)"
|
||||||
TOKEN_MANAGER_SECRET="$(echo \"Token Manager\" | generate_simple_password)"
|
TOKEN_MANAGER_SECRET="$(echo \"Token Manager\" | generate_simple_password)"
|
||||||
if [ ! -e /tmp/bridgehead/opal-cert.pem ]; then
|
if [ ! -e /tmp/bridgehead/opal-cert.pem ]; then
|
||||||
@@ -23,18 +18,13 @@ if [ "$ENABLE_DATASHIELD" == true ]; then
|
|||||||
openssl req -x509 -newkey rsa:4096 -nodes -keyout /tmp/bridgehead/opal-key.pem -out /tmp/bridgehead/opal-cert.pem -days 3650 -subj "/CN=opal/C=DE"
|
openssl req -x509 -newkey rsa:4096 -nodes -keyout /tmp/bridgehead/opal-key.pem -out /tmp/bridgehead/opal-cert.pem -days 3650 -subj "/CN=opal/C=DE"
|
||||||
fi
|
fi
|
||||||
mkdir -p /tmp/bridgehead/opal-map
|
mkdir -p /tmp/bridgehead/opal-map
|
||||||
sites="$(cat ./$PROJECT/modules/datashield-sites.json)"
|
echo '{"sites": []}' >/tmp/bridgehead/opal-map/central.json
|
||||||
echo "$sites" | docker_jq -n --args '{"sites": input | map({
|
# Only allow connections from the central beam proxy that is used by all coder workspaces
|
||||||
"name": .,
|
echo '[{
|
||||||
"id": .,
|
"external": "'$SITE_ID':443",
|
||||||
"virtualhost": "\(.):443",
|
|
||||||
"beamconnect": "datashield-connect.\(.).'"$BROKER_ID"'"
|
|
||||||
})}' $sites >/tmp/bridgehead/opal-map/central.json
|
|
||||||
echo "$sites" | docker_jq -n --args '[{
|
|
||||||
"external": "'"$SITE_ID"':443",
|
|
||||||
"internal": "opal:8443",
|
"internal": "opal:8443",
|
||||||
"allowed": input | map("\(.).'"$BROKER_ID"'")
|
"allowed": ["central-ds-orchestrator.'$BROKER_ID'"]
|
||||||
}]' >/tmp/bridgehead/opal-map/local.json
|
}]' > /tmp/bridgehead/opal-map/local.json
|
||||||
if [ "$USER" == "root" ]; then
|
if [ "$USER" == "root" ]; then
|
||||||
chown -R bridgehead:docker /tmp/bridgehead
|
chown -R bridgehead:docker /tmp/bridgehead
|
||||||
chmod g+wr /tmp/bridgehead/opal-map/*
|
chmod g+wr /tmp/bridgehead/opal-map/*
|
||||||
|
@@ -1,15 +0,0 @@
|
|||||||
[
|
|
||||||
"berlin",
|
|
||||||
"muenchen-lmu",
|
|
||||||
"dresden",
|
|
||||||
"freiburg",
|
|
||||||
"muenchen-tum",
|
|
||||||
"tuebingen",
|
|
||||||
"mainz",
|
|
||||||
"frankfurt",
|
|
||||||
"essen",
|
|
||||||
"dktk-datashield-test",
|
|
||||||
"dktk-test",
|
|
||||||
"mannheim",
|
|
||||||
"central-ds-orchestrator"
|
|
||||||
]
|
|
@@ -25,7 +25,7 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
|
- /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
|
||||||
- /etc/bridgehead/dnpm/local_targets.json:/conf/connect_targets.json:ro
|
- /etc/bridgehead/dnpm/local_targets.json:/conf/connect_targets.json:ro
|
||||||
- /srv/docker/bridgehead/minimal/modules/dnpm-central-targets.json:/conf/central_targets.json:ro
|
- /srv/docker/bridgehead/minimal/modules/dnpm-central-targets.json:/conf/central_targets.json:ro,Z
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.dnpm-connect.rule=PathPrefix(`/dnpm-connect`)"
|
- "traefik.http.routers.dnpm-connect.rule=PathPrefix(`/dnpm-connect`)"
|
||||||
|
@@ -12,13 +12,13 @@ services:
|
|||||||
MYSQL_ROOT_HOST: "%"
|
MYSQL_ROOT_HOST: "%"
|
||||||
MYSQL_ROOT_PASSWORD: ${DNPM_MYSQL_ROOT_PASSWORD}
|
MYSQL_ROOT_PASSWORD: ${DNPM_MYSQL_ROOT_PASSWORD}
|
||||||
volumes:
|
volumes:
|
||||||
- /var/cache/bridgehead/dnpm/mysql:/var/lib/mysql
|
- /var/cache/bridgehead/dnpm/mysql:/var/lib/mysql:Z
|
||||||
|
|
||||||
dnpm-authup:
|
dnpm-authup:
|
||||||
image: authup/authup:latest
|
image: authup/authup:latest
|
||||||
container_name: bridgehead-dnpm-authup
|
container_name: bridgehead-dnpm-authup
|
||||||
volumes:
|
volumes:
|
||||||
- /var/cache/bridgehead/dnpm/authup:/usr/src/app/writable
|
- /var/cache/bridgehead/dnpm/authup:/usr/src/app/writable:Z
|
||||||
depends_on:
|
depends_on:
|
||||||
dnpm-mysql:
|
dnpm-mysql:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
@@ -68,7 +68,7 @@ services:
|
|||||||
- AUTHUP_URL=robot://system:${DNPM_AUTHUP_SECRET}@http://dnpm-authup:3000
|
- AUTHUP_URL=robot://system:${DNPM_AUTHUP_SECRET}@http://dnpm-authup:3000
|
||||||
volumes:
|
volumes:
|
||||||
- /etc/bridgehead/dnpm/config:/dnpm_config
|
- /etc/bridgehead/dnpm/config:/dnpm_config
|
||||||
- /var/cache/bridgehead/dnpm/backend-data:/dnpm_data
|
- /var/cache/bridgehead/dnpm/backend-data:/dnpm_data:Z
|
||||||
depends_on:
|
depends_on:
|
||||||
dnpm-authup:
|
dnpm-authup:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
|
@@ -24,7 +24,7 @@ services:
|
|||||||
- "traefik.http.middlewares.exporter_ccp_strip.stripprefix.prefixes=/ccp-exporter"
|
- "traefik.http.middlewares.exporter_ccp_strip.stripprefix.prefixes=/ccp-exporter"
|
||||||
- "traefik.http.routers.exporter_ccp.middlewares=exporter_ccp_strip"
|
- "traefik.http.routers.exporter_ccp.middlewares=exporter_ccp_strip"
|
||||||
volumes:
|
volumes:
|
||||||
- "/var/cache/bridgehead/ccp/exporter-files:/app/exporter-files/output"
|
- "/var/cache/bridgehead/ccp/exporter-files:/app/exporter-files/output:z"
|
||||||
|
|
||||||
exporter-db:
|
exporter-db:
|
||||||
image: docker.verbis.dkfz.de/cache/postgres:${POSTGRES_TAG}
|
image: docker.verbis.dkfz.de/cache/postgres:${POSTGRES_TAG}
|
||||||
@@ -35,7 +35,7 @@ services:
|
|||||||
POSTGRES_DB: "exporter"
|
POSTGRES_DB: "exporter"
|
||||||
volumes:
|
volumes:
|
||||||
# Consider removing this volume once we find a solution to save Lens-queries to be executed in the explorer.
|
# Consider removing this volume once we find a solution to save Lens-queries to be executed in the explorer.
|
||||||
- "/var/cache/bridgehead/ccp/exporter-db:/var/lib/postgresql/data"
|
- "/var/cache/bridgehead/ccp/exporter-db:/var/lib/postgresql/data:Z"
|
||||||
|
|
||||||
reporter:
|
reporter:
|
||||||
image: docker.verbis.dkfz.de/ccp/dktk-reporter:latest
|
image: docker.verbis.dkfz.de/ccp/dktk-reporter:latest
|
||||||
@@ -57,7 +57,7 @@ services:
|
|||||||
# There is a risk that the bridgehead restarts, losing the already created export.
|
# There is a risk that the bridgehead restarts, losing the already created export.
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
- "/var/cache/bridgehead/ccp/reporter-files:/app/reports"
|
- "/var/cache/bridgehead/ccp/reporter-files:/app/reports:z"
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.reporter_ccp.rule=PathPrefix(`/ccp-reporter`)"
|
- "traefik.http.routers.reporter_ccp.rule=PathPrefix(`/ccp-reporter`)"
|
||||||
|
@@ -22,8 +22,8 @@ services:
|
|||||||
POSTGRES_PASSWORD: "${DASHBOARD_DB_PASSWORD}" # Set in dashboard-setup.sh
|
POSTGRES_PASSWORD: "${DASHBOARD_DB_PASSWORD}" # Set in dashboard-setup.sh
|
||||||
POSTGRES_DB: "dashboard"
|
POSTGRES_DB: "dashboard"
|
||||||
volumes:
|
volumes:
|
||||||
- "/var/cache/bridgehead/ccp/dashboard-db:/var/lib/postgresql/data"
|
- "/var/cache/bridgehead/ccp/dashboard-db:/var/lib/postgresql/data:Z"
|
||||||
|
|
||||||
focus:
|
focus:
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_CONNECTION_STRING: "postgresql://dashboard:${DASHBOARD_DB_PASSWORD}@dashboard-db/dashboard"
|
POSTGRES_CONNECTION_STRING: "postgresql://dashboard:${DASHBOARD_DB_PASSWORD}@dashboard-db/dashboard"
|
||||||
|
@@ -62,7 +62,7 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- "patientlist-db-data:/var/lib/postgresql/data"
|
- "patientlist-db-data:/var/lib/postgresql/data"
|
||||||
# NOTE: Add backups here. This is only imported if /var/lib/bridgehead/data/patientlist/ is empty!!!
|
# NOTE: Add backups here. This is only imported if /var/lib/bridgehead/data/patientlist/ is empty!!!
|
||||||
- "/tmp/bridgehead/patientlist/:/docker-entrypoint-initdb.d/"
|
- "/tmp/bridgehead/patientlist/:/docker-entrypoint-initdb.d/:Z"
|
||||||
|
|
||||||
traefik-forward-auth:
|
traefik-forward-auth:
|
||||||
image: docker.verbis.dkfz.de/cache/oauth2-proxy/oauth2-proxy:latest
|
image: docker.verbis.dkfz.de/cache/oauth2-proxy/oauth2-proxy:latest
|
||||||
|
@@ -32,8 +32,8 @@ services:
|
|||||||
- "traefik.http.routers.mtba_ccp.tls=true"
|
- "traefik.http.routers.mtba_ccp.tls=true"
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
- /var/cache/bridgehead/ccp/mtba/input:/app/input
|
- /var/cache/bridgehead/ccp/mtba/input:/app/input:z
|
||||||
- /var/cache/bridgehead/ccp/mtba/persist:/app/persist
|
- /var/cache/bridgehead/ccp/mtba/persist:/app/persist:z
|
||||||
|
|
||||||
# TODO: Include CBioPortal in Deployment ...
|
# TODO: Include CBioPortal in Deployment ...
|
||||||
# NOTE: CBioPortal can't load data while the system is running. So after import of data bridgehead needs to be restarted!
|
# NOTE: CBioPortal can't load data while the system is running. So after import of data bridgehead needs to be restarted!
|
||||||
|
@@ -13,8 +13,8 @@ services:
|
|||||||
- "traefik.http.middlewares.teiler_orchestrator_ccp_strip.stripprefix.prefixes=/ccp-teiler"
|
- "traefik.http.middlewares.teiler_orchestrator_ccp_strip.stripprefix.prefixes=/ccp-teiler"
|
||||||
- "traefik.http.routers.teiler_orchestrator_ccp.middlewares=teiler_orchestrator_ccp_strip"
|
- "traefik.http.routers.teiler_orchestrator_ccp.middlewares=teiler_orchestrator_ccp_strip"
|
||||||
environment:
|
environment:
|
||||||
TEILER_BACKEND_URL: "https://${HOST}/ccp-teiler-backend"
|
TEILER_BACKEND_URL: "/ccp-teiler-backend"
|
||||||
TEILER_DASHBOARD_URL: "https://${HOST}/ccp-teiler-dashboard"
|
TEILER_DASHBOARD_URL: "/ccp-teiler-dashboard"
|
||||||
DEFAULT_LANGUAGE: "${TEILER_DEFAULT_LANGUAGE_LOWER_CASE}"
|
DEFAULT_LANGUAGE: "${TEILER_DEFAULT_LANGUAGE_LOWER_CASE}"
|
||||||
HTTP_RELATIVE_PATH: "/ccp-teiler"
|
HTTP_RELATIVE_PATH: "/ccp-teiler"
|
||||||
|
|
||||||
@@ -30,8 +30,8 @@ services:
|
|||||||
- "traefik.http.routers.teiler_dashboard_ccp.middlewares=teiler_dashboard_ccp_strip"
|
- "traefik.http.routers.teiler_dashboard_ccp.middlewares=teiler_dashboard_ccp_strip"
|
||||||
environment:
|
environment:
|
||||||
DEFAULT_LANGUAGE: "${TEILER_DEFAULT_LANGUAGE}"
|
DEFAULT_LANGUAGE: "${TEILER_DEFAULT_LANGUAGE}"
|
||||||
TEILER_BACKEND_URL: "https://${HOST}/ccp-teiler-backend"
|
TEILER_BACKEND_URL: "/ccp-teiler-backend"
|
||||||
TEILER_DASHBOARD_URL: "https://${HOST}/ccp-teiler-dashboard"
|
TEILER_DASHBOARD_URL: "/ccp-teiler-dashboard"
|
||||||
OIDC_URL: "${OIDC_URL}"
|
OIDC_URL: "${OIDC_URL}"
|
||||||
OIDC_CLIENT_ID: "${OIDC_PUBLIC_CLIENT_ID}"
|
OIDC_CLIENT_ID: "${OIDC_PUBLIC_CLIENT_ID}"
|
||||||
OIDC_TOKEN_GROUP: "${OIDC_GROUP_CLAIM}"
|
OIDC_TOKEN_GROUP: "${OIDC_GROUP_CLAIM}"
|
||||||
@@ -40,7 +40,7 @@ services:
|
|||||||
TEILER_ADMIN_PHONE: "${OPERATOR_PHONE}"
|
TEILER_ADMIN_PHONE: "${OPERATOR_PHONE}"
|
||||||
TEILER_PROJECT: "${PROJECT}"
|
TEILER_PROJECT: "${PROJECT}"
|
||||||
EXPORTER_API_KEY: "${EXPORTER_API_KEY}"
|
EXPORTER_API_KEY: "${EXPORTER_API_KEY}"
|
||||||
TEILER_ORCHESTRATOR_URL: "https://${HOST}/ccp-teiler"
|
TEILER_ORCHESTRATOR_URL: "/ccp-teiler"
|
||||||
TEILER_ORCHESTRATOR_HTTP_RELATIVE_PATH: "/ccp-teiler"
|
TEILER_ORCHESTRATOR_HTTP_RELATIVE_PATH: "/ccp-teiler"
|
||||||
TEILER_USER: "${OIDC_USER_GROUP}"
|
TEILER_USER: "${OIDC_USER_GROUP}"
|
||||||
TEILER_ADMIN: "${OIDC_ADMIN_GROUP}"
|
TEILER_ADMIN: "${OIDC_ADMIN_GROUP}"
|
||||||
@@ -61,12 +61,11 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
LOG_LEVEL: "INFO"
|
LOG_LEVEL: "INFO"
|
||||||
APPLICATION_PORT: "8085"
|
APPLICATION_PORT: "8085"
|
||||||
APPLICATION_ADDRESS: "${HOST}"
|
|
||||||
DEFAULT_LANGUAGE: "${TEILER_DEFAULT_LANGUAGE}"
|
DEFAULT_LANGUAGE: "${TEILER_DEFAULT_LANGUAGE}"
|
||||||
TEILER_ORCHESTRATOR_HTTP_RELATIVE_PATH: "/ccp-teiler"
|
TEILER_ORCHESTRATOR_HTTP_RELATIVE_PATH: "/ccp-teiler"
|
||||||
TEILER_ORCHESTRATOR_URL: "https://${HOST}/ccp-teiler"
|
TEILER_ORCHESTRATOR_URL: "/ccp-teiler"
|
||||||
TEILER_DASHBOARD_DE_URL: "https://${HOST}/ccp-teiler-dashboard/de"
|
TEILER_DASHBOARD_DE_URL: "/ccp-teiler-dashboard/de"
|
||||||
TEILER_DASHBOARD_EN_URL: "https://${HOST}/ccp-teiler-dashboard/en"
|
TEILER_DASHBOARD_EN_URL: "/ccp-teiler-dashboard/en"
|
||||||
HTTP_PROXY: "http://forward_proxy:3128"
|
HTTP_PROXY: "http://forward_proxy:3128"
|
||||||
ENABLE_MTBA: "${ENABLE_MTBA}"
|
ENABLE_MTBA: "${ENABLE_MTBA}"
|
||||||
ENABLE_DATASHIELD: "${ENABLE_DATASHIELD}"
|
ENABLE_DATASHIELD: "${ENABLE_DATASHIELD}"
|
||||||
|
@@ -33,7 +33,7 @@ services:
|
|||||||
EPSILON: 0.28
|
EPSILON: 0.28
|
||||||
QUERIES_TO_CACHE: '/queries_to_cache.conf'
|
QUERIES_TO_CACHE: '/queries_to_cache.conf'
|
||||||
volumes:
|
volumes:
|
||||||
- /srv/docker/bridgehead/dhki/queries_to_cache.conf:/queries_to_cache.conf:ro
|
- /srv/docker/bridgehead/dhki/queries_to_cache.conf:/queries_to_cache.conf:ro,Z
|
||||||
depends_on:
|
depends_on:
|
||||||
- "beam-proxy"
|
- "beam-proxy"
|
||||||
- "blaze"
|
- "blaze"
|
||||||
@@ -55,12 +55,10 @@ services:
|
|||||||
- "forward_proxy"
|
- "forward_proxy"
|
||||||
volumes:
|
volumes:
|
||||||
- /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
|
- /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
|
||||||
- /srv/docker/bridgehead/dhki/root.crt.pem:/conf/root.crt.pem:ro
|
- /srv/docker/bridgehead/dhki/root.crt.pem:/conf/root.crt.pem:ro,Z
|
||||||
|
# secrets don't seem to allow us to specify Z
|
||||||
|
- /etc/bridgehead/pki/${SITE_ID}.priv.pem:/run/secrets/proxy.pem:ro
|
||||||
|
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
blaze-data:
|
blaze-data:
|
||||||
|
|
||||||
secrets:
|
|
||||||
proxy.pem:
|
|
||||||
file: /etc/bridgehead/pki/${SITE_ID}.priv.pem
|
|
||||||
|
@@ -35,7 +35,7 @@ services:
|
|||||||
QUERIES_TO_CACHE: '/queries_to_cache.conf'
|
QUERIES_TO_CACHE: '/queries_to_cache.conf'
|
||||||
ENDPOINT_TYPE: ${FOCUS_ENDPOINT_TYPE:-blaze}
|
ENDPOINT_TYPE: ${FOCUS_ENDPOINT_TYPE:-blaze}
|
||||||
volumes:
|
volumes:
|
||||||
- /srv/docker/bridgehead/itcc/queries_to_cache.conf:/queries_to_cache.conf:ro
|
- /srv/docker/bridgehead/itcc/queries_to_cache.conf:/queries_to_cache.conf:ro,Z
|
||||||
depends_on:
|
depends_on:
|
||||||
- "beam-proxy"
|
- "beam-proxy"
|
||||||
- "blaze"
|
- "blaze"
|
||||||
@@ -51,18 +51,14 @@ services:
|
|||||||
ALL_PROXY: http://forward_proxy:3128
|
ALL_PROXY: http://forward_proxy:3128
|
||||||
TLS_CA_CERTIFICATES_DIR: /conf/trusted-ca-certs
|
TLS_CA_CERTIFICATES_DIR: /conf/trusted-ca-certs
|
||||||
ROOTCERT_FILE: /conf/root.crt.pem
|
ROOTCERT_FILE: /conf/root.crt.pem
|
||||||
secrets:
|
|
||||||
- proxy.pem
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- "forward_proxy"
|
- "forward_proxy"
|
||||||
volumes:
|
volumes:
|
||||||
- /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
|
- /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
|
||||||
- /srv/docker/bridgehead/itcc/root.crt.pem:/conf/root.crt.pem:ro
|
- /srv/docker/bridgehead/itcc/root.crt.pem:/conf/root.crt.pem:ro,Z
|
||||||
|
# secrets don't seem to allow us to specify Z
|
||||||
|
- /etc/bridgehead/pki/${SITE_ID}.priv.pem:/run/secrets/proxy.pem:ro
|
||||||
|
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
blaze-data:
|
blaze-data:
|
||||||
|
|
||||||
secrets:
|
|
||||||
proxy.pem:
|
|
||||||
file: /etc/bridgehead/pki/${SITE_ID}.priv.pem
|
|
||||||
|
@@ -17,7 +17,6 @@ services:
|
|||||||
BEAM_PROXY_ID: ${SITE_ID}
|
BEAM_PROXY_ID: ${SITE_ID}
|
||||||
BEAM_BROKER_ID: ${BROKER_ID}
|
BEAM_BROKER_ID: ${BROKER_ID}
|
||||||
BEAM_APP_ID: "focus"
|
BEAM_APP_ID: "focus"
|
||||||
PROJECT_METADATA: "dktk_supervisors"
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- "beam-proxy"
|
- "beam-proxy"
|
||||||
labels:
|
labels:
|
||||||
@@ -30,4 +29,4 @@ services:
|
|||||||
- "traefik.http.routers.spot.rule=Host(`${HOST}`) && PathPrefix(`/backend`)"
|
- "traefik.http.routers.spot.rule=Host(`${HOST}`) && PathPrefix(`/backend`)"
|
||||||
- "traefik.http.middlewares.stripprefix_spot.stripprefix.prefixes=/backend"
|
- "traefik.http.middlewares.stripprefix_spot.stripprefix.prefixes=/backend"
|
||||||
- "traefik.http.routers.spot.tls=true"
|
- "traefik.http.routers.spot.tls=true"
|
||||||
- "traefik.http.routers.spot.middlewares=corsheaders2,stripprefix_spot"
|
- "traefik.http.routers.spot.middlewares=corsheaders2,stripprefix_spot,auth"
|
||||||
|
@@ -56,12 +56,10 @@ services:
|
|||||||
- "forward_proxy"
|
- "forward_proxy"
|
||||||
volumes:
|
volumes:
|
||||||
- /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
|
- /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
|
||||||
- /srv/docker/bridgehead/kr/root.crt.pem:/conf/root.crt.pem:ro
|
- /srv/docker/bridgehead/kr/root.crt.pem:/conf/root.crt.pem:ro,Z
|
||||||
|
# secrets don't seem to allow us to specify Z
|
||||||
|
- /etc/bridgehead/pki/${SITE_ID}.priv.pem:/run/secrets/proxy.pem:ro
|
||||||
|
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
blaze-data:
|
blaze-data:
|
||||||
|
|
||||||
secrets:
|
|
||||||
proxy.pem:
|
|
||||||
file: /etc/bridgehead/pki/${SITE_ID}.priv.pem
|
|
||||||
|
@@ -24,7 +24,7 @@ services:
|
|||||||
- "traefik.http.middlewares.exporter_ccp_strip.stripprefix.prefixes=/ccp-exporter"
|
- "traefik.http.middlewares.exporter_ccp_strip.stripprefix.prefixes=/ccp-exporter"
|
||||||
- "traefik.http.routers.exporter_ccp.middlewares=exporter_ccp_strip"
|
- "traefik.http.routers.exporter_ccp.middlewares=exporter_ccp_strip"
|
||||||
volumes:
|
volumes:
|
||||||
- "/var/cache/bridgehead/ccp/exporter-files:/app/exporter-files/output"
|
- "/var/cache/bridgehead/ccp/exporter-files:/app/exporter-files/output:z"
|
||||||
|
|
||||||
exporter-db:
|
exporter-db:
|
||||||
image: docker.verbis.dkfz.de/cache/postgres:${POSTGRES_TAG}
|
image: docker.verbis.dkfz.de/cache/postgres:${POSTGRES_TAG}
|
||||||
@@ -35,7 +35,7 @@ services:
|
|||||||
POSTGRES_DB: "exporter"
|
POSTGRES_DB: "exporter"
|
||||||
volumes:
|
volumes:
|
||||||
# Consider removing this volume once we find a solution to save Lens-queries to be executed in the explorer.
|
# Consider removing this volume once we find a solution to save Lens-queries to be executed in the explorer.
|
||||||
- "/var/cache/bridgehead/ccp/exporter-db:/var/lib/postgresql/data"
|
- "/var/cache/bridgehead/ccp/exporter-db:/var/lib/postgresql/data:Z"
|
||||||
|
|
||||||
reporter:
|
reporter:
|
||||||
image: docker.verbis.dkfz.de/ccp/dktk-reporter:latest
|
image: docker.verbis.dkfz.de/ccp/dktk-reporter:latest
|
||||||
@@ -57,7 +57,7 @@ services:
|
|||||||
# There is a risk that the bridgehead restarts, losing the already created export.
|
# There is a risk that the bridgehead restarts, losing the already created export.
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
- "/var/cache/bridgehead/ccp/reporter-files:/app/reports"
|
- "/var/cache/bridgehead/ccp/reporter-files:/app/reports:z"
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.reporter_ccp.rule=PathPrefix(`/ccp-reporter`)"
|
- "traefik.http.routers.reporter_ccp.rule=PathPrefix(`/ccp-reporter`)"
|
||||||
|
@@ -71,9 +71,6 @@ services:
|
|||||||
HTTP_PROXY: "http://forward_proxy:3128"
|
HTTP_PROXY: "http://forward_proxy:3128"
|
||||||
ENABLE_MTBA: "${ENABLE_MTBA}"
|
ENABLE_MTBA: "${ENABLE_MTBA}"
|
||||||
ENABLE_DATASHIELD: "${ENABLE_DATASHIELD}"
|
ENABLE_DATASHIELD: "${ENABLE_DATASHIELD}"
|
||||||
secrets:
|
volumes:
|
||||||
- ccp.conf
|
# secrets don't seem to allow us to specify Z
|
||||||
|
- /etc/bridgehead/ccp.conf:/run/secrets/ccp.conf:ro
|
||||||
secrets:
|
|
||||||
ccp.conf:
|
|
||||||
file: /etc/bridgehead/ccp.conf
|
|
||||||
|
@@ -36,6 +36,32 @@ setupProxy() {
|
|||||||
export HTTPS_PROXY_HOST HTTPS_PROXY_PORT HTTPS_PROXY_FULL_URL
|
export HTTPS_PROXY_HOST HTTPS_PROXY_PORT HTTPS_PROXY_FULL_URL
|
||||||
}
|
}
|
||||||
|
|
||||||
|
checkAndSetSelinux() {
|
||||||
|
# This is needed for the systemd service to start on SELinux systems.
|
||||||
|
if ! command -v sestatus > /dev/null 2>&1; then
|
||||||
|
echo "SELinux not available; nothing to do"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
if ! sestatus | grep "SELinux status:" | grep enabled > /dev/null; then
|
||||||
|
echo "SELinux disabled; nothing to do"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
current_mode="$(sestatus | grep 'Current mode:' | tr -s ' ' | cut -d' ' -f 3)"
|
||||||
|
echo "SELinux is active and ${current_mode}, checking for labels..."
|
||||||
|
# TODO: perhaps split this into checkSelinux (without the need for root) and setSelinux (needing root)
|
||||||
|
# "stat /srv/docker/bridgehead/bridgehead --printf %C" could be used for a check that doesn't need root
|
||||||
|
exitIfNotRoot
|
||||||
|
labels_for_srv="$(semanage fcontext --list | grep -e ^/srv)"
|
||||||
|
echo "Found the following labels for /srv:"
|
||||||
|
echo "${labels_for_srv}"
|
||||||
|
if ! echo "${labels_for_srv}" | grep -e ^/srv/docker/bridgehead/bridgehead > /dev/null; then
|
||||||
|
echo "Adding a label for /srv/docker/bridgehead/bridgehead..."
|
||||||
|
semanage fcontext --add --type bin_t /srv/docker/bridgehead/bridgehead
|
||||||
|
fi
|
||||||
|
restorecon -v /srv/docker/bridgehead/bridgehead # this survives a reboot
|
||||||
|
# TODO: check if this survives updates
|
||||||
|
}
|
||||||
|
|
||||||
exitIfNotRoot() {
|
exitIfNotRoot() {
|
||||||
if [ "$EUID" -ne 0 ]; then
|
if [ "$EUID" -ne 0 ]; then
|
||||||
log "ERROR" "Please run as root"
|
log "ERROR" "Please run as root"
|
||||||
@@ -436,7 +462,3 @@ generate_simple_password(){
|
|||||||
local combined_text="This is a salt string to generate one consistent password for ${seed_text}. It is not required to be secret."
|
local combined_text="This is a salt string to generate one consistent password for ${seed_text}. It is not required to be secret."
|
||||||
echo "${combined_text}" | sha1sum | openssl pkeyutl -sign -inkey "/etc/bridgehead/pki/${SITE_ID}.priv.pem" 2> /dev/null | base64 | head -c 26 | sed 's/[+\/]/A/g'
|
echo "${combined_text}" | sha1sum | openssl pkeyutl -sign -inkey "/etc/bridgehead/pki/${SITE_ID}.priv.pem" 2> /dev/null | base64 | head -c 26 | sed 's/[+\/]/A/g'
|
||||||
}
|
}
|
||||||
|
|
||||||
docker_jq() {
|
|
||||||
docker run --rm -i docker.verbis.dkfz.de/cache/jqlang/jq:latest "$@"
|
|
||||||
}
|
|
||||||
|
@@ -3,6 +3,7 @@
|
|||||||
source lib/functions.sh
|
source lib/functions.sh
|
||||||
|
|
||||||
exitIfNotRoot
|
exitIfNotRoot
|
||||||
|
checkAndSetSelinux
|
||||||
|
|
||||||
if [ $# -eq 0 ]; then
|
if [ $# -eq 0 ]; then
|
||||||
log "ERROR" "Please provide a Project as argument"
|
log "ERROR" "Please provide a Project as argument"
|
||||||
@@ -49,8 +50,8 @@ if [ -z "$TRANSFAIR_AUTH" ]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "$EXPORTER_USER" ]; then
|
if [ "$ENABLE_EXPORTER" == "true" ] && [ -z "$EXPORTER_USER" ]; then
|
||||||
log "INFO" "Now generating basic auth for the exporter and reporter (see adduser in bridgehead for more information). "
|
log "INFO" "Now generating basic auth for the exporter and reporter (see adduser in bridgehead for more information)."
|
||||||
generated_passwd="$(cat /proc/sys/kernel/random/uuid | sed 's/[-]//g' | head -c 32)"
|
generated_passwd="$(cat /proc/sys/kernel/random/uuid | sed 's/[-]//g' | head -c 32)"
|
||||||
add_basic_auth_user $PROJECT $generated_passwd "EXPORTER_USER" $PROJECT
|
add_basic_auth_user $PROJECT $generated_passwd "EXPORTER_USER" $PROJECT
|
||||||
fi
|
fi
|
||||||
|
@@ -25,6 +25,12 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- 80:80
|
- 80:80
|
||||||
- 443:443
|
- 443:443
|
||||||
|
security_opt:
|
||||||
|
# allow access to the docker socket on systems with SELinux
|
||||||
|
- "label:type:container_runtime_t"
|
||||||
|
cap_add:
|
||||||
|
# Allow binding to ports <1024 without root
|
||||||
|
- NET_BIND_SERVICE
|
||||||
volumes:
|
volumes:
|
||||||
- /etc/bridgehead/traefik-tls:/certs:ro
|
- /etc/bridgehead/traefik-tls:/certs:ro
|
||||||
- ../lib/traefik-configuration/:/configuration:ro
|
- ../lib/traefik-configuration/:/configuration:ro
|
||||||
|
@@ -12,13 +12,13 @@ services:
|
|||||||
ALL_PROXY: http://forward_proxy:3128
|
ALL_PROXY: http://forward_proxy:3128
|
||||||
TLS_CA_CERTIFICATES_DIR: ./conf/trusted-ca-certs
|
TLS_CA_CERTIFICATES_DIR: ./conf/trusted-ca-certs
|
||||||
ROOTCERT_FILE: ./conf/root.crt.pem
|
ROOTCERT_FILE: ./conf/root.crt.pem
|
||||||
secrets:
|
|
||||||
- proxy.pem
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- "forward_proxy"
|
- "forward_proxy"
|
||||||
volumes:
|
volumes:
|
||||||
- /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
|
- /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
|
||||||
- /srv/docker/bridgehead/ccp/root.crt.pem:/conf/root.crt.pem:ro
|
- /srv/docker/bridgehead/ccp/root.crt.pem:/conf/root.crt.pem:ro,Z
|
||||||
|
# secrets don't seem to allow us to specify Z
|
||||||
|
- /etc/bridgehead/pki/${SITE_ID}.priv.pem:/run/secrets/proxy.pem:ro
|
||||||
|
|
||||||
dnpm-beam-connect:
|
dnpm-beam-connect:
|
||||||
depends_on: [ dnpm-beam-proxy ]
|
depends_on: [ dnpm-beam-proxy ]
|
||||||
@@ -41,7 +41,7 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
|
- /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
|
||||||
- /etc/bridgehead/dnpm/local_targets.json:/conf/connect_targets.json:ro
|
- /etc/bridgehead/dnpm/local_targets.json:/conf/connect_targets.json:ro
|
||||||
- /srv/docker/bridgehead/minimal/modules/dnpm-central-targets.json:/conf/central_targets.json:ro
|
- /srv/docker/bridgehead/minimal/modules/dnpm-central-targets.json:/conf/central_targets.json:ro,Z
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
- "traefik.http.routers.dnpm-connect.rule=PathPrefix(`/dnpm-connect`)"
|
- "traefik.http.routers.dnpm-connect.rule=PathPrefix(`/dnpm-connect`)"
|
||||||
@@ -53,7 +53,3 @@ services:
|
|||||||
dnpm-echo:
|
dnpm-echo:
|
||||||
image: docker.verbis.dkfz.de/cache/samply/bridgehead-echo:latest
|
image: docker.verbis.dkfz.de/cache/samply/bridgehead-echo:latest
|
||||||
container_name: bridgehead-dnpm-echo
|
container_name: bridgehead-dnpm-echo
|
||||||
|
|
||||||
secrets:
|
|
||||||
proxy.pem:
|
|
||||||
file: /etc/bridgehead/pki/${SITE_ID}.priv.pem
|
|
||||||
|
@@ -12,13 +12,13 @@ services:
|
|||||||
MYSQL_ROOT_HOST: "%"
|
MYSQL_ROOT_HOST: "%"
|
||||||
MYSQL_ROOT_PASSWORD: ${DNPM_MYSQL_ROOT_PASSWORD}
|
MYSQL_ROOT_PASSWORD: ${DNPM_MYSQL_ROOT_PASSWORD}
|
||||||
volumes:
|
volumes:
|
||||||
- /var/cache/bridgehead/dnpm/mysql:/var/lib/mysql
|
- /var/cache/bridgehead/dnpm/mysql:/var/lib/mysql:Z
|
||||||
|
|
||||||
dnpm-authup:
|
dnpm-authup:
|
||||||
image: authup/authup:latest
|
image: authup/authup:latest
|
||||||
container_name: bridgehead-dnpm-authup
|
container_name: bridgehead-dnpm-authup
|
||||||
volumes:
|
volumes:
|
||||||
- /var/cache/bridgehead/dnpm/authup:/usr/src/app/writable
|
- /var/cache/bridgehead/dnpm/authup:/usr/src/app/writable:Z
|
||||||
depends_on:
|
depends_on:
|
||||||
dnpm-mysql:
|
dnpm-mysql:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
@@ -68,7 +68,7 @@ services:
|
|||||||
- AUTHUP_URL=robot://system:${DNPM_AUTHUP_SECRET}@http://dnpm-authup:3000
|
- AUTHUP_URL=robot://system:${DNPM_AUTHUP_SECRET}@http://dnpm-authup:3000
|
||||||
volumes:
|
volumes:
|
||||||
- /etc/bridgehead/dnpm/config:/dnpm_config
|
- /etc/bridgehead/dnpm/config:/dnpm_config
|
||||||
- /var/cache/bridgehead/dnpm/backend-data:/dnpm_data
|
- /var/cache/bridgehead/dnpm/backend-data:/dnpm_data:Z
|
||||||
depends_on:
|
depends_on:
|
||||||
dnpm-authup:
|
dnpm-authup:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
|
@@ -10,8 +10,4 @@ services:
|
|||||||
SSH_TUNNEL_PORT: "${SSH_TUNNEL_PORT:-22}"
|
SSH_TUNNEL_PORT: "${SSH_TUNNEL_PORT:-22}"
|
||||||
volumes:
|
volumes:
|
||||||
- "/etc/bridgehead/ssh-tunnel.conf:/ssh-tunnel.conf:ro"
|
- "/etc/bridgehead/ssh-tunnel.conf:/ssh-tunnel.conf:ro"
|
||||||
secrets:
|
- "/etc/bridgehead/pki/ssh-tunnel.priv.pem:/run/secrets/privkey:ro"
|
||||||
- privkey
|
|
||||||
secrets:
|
|
||||||
privkey:
|
|
||||||
file: /etc/bridgehead/pki/ssh-tunnel.priv.pem
|
|
||||||
|
@@ -27,7 +27,7 @@ services:
|
|||||||
- NO_PROXY=${TRANSFAIR_NO_PROXIES}
|
- NO_PROXY=${TRANSFAIR_NO_PROXIES}
|
||||||
- ALL_PROXY=http://forward_proxy:3128
|
- ALL_PROXY=http://forward_proxy:3128
|
||||||
volumes:
|
volumes:
|
||||||
- /var/cache/bridgehead/${PROJECT}/transfair:/transfair
|
- /var/cache/bridgehead/${PROJECT}/transfair:/transfair:Z
|
||||||
- /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
|
- /etc/bridgehead/trusted-ca-certs:/conf/trusted-ca-certs:ro
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
|
Reference in New Issue
Block a user