Merge branch 'main' into documentation/gba_additions

This commit is contained in:
Croft 2023-11-08 10:05:00 +01:00
commit 5558d4fefc
13 changed files with 130 additions and 37 deletions

View File

@ -59,21 +59,37 @@ Ensure the following software (or newer) is installed:
We recommend to install Docker(-compose) from its official sources as described on the [Docker website](https://docs.docker.com). We recommend to install Docker(-compose) from its official sources as described on the [Docker website](https://docs.docker.com).
Note for Ubuntu: Please note that snap versions of Docker are not supported. > 📝 Note for Ubuntu: Snap versions of Docker are not supported.
Note for git and Docker: if you have a local proxy, you will need to adjust your setup appropriately, see [git proxy](https://gist.github.com/evantoli/f8c23a37eb3558ab8765) and [docker proxy](https://docs.docker.com/network/proxy/).
### Network ### Network
A running Bridgehead requires an outgoing HTTPS proxy to communicate with the central components. A Bridgehead communicates to all central components via outgoing HTTPS connections.
Additionally, your site might use its own proxy. You should discuss this with your local systems administration. If a proxy is being used, you will need to note down the URL of the proxy. If it is a secure proxy, then you will also need to make a note of its username and password. This information will be used later on during the installation process. Your site might require an outgoing proxy (i.e. HTTPS forward proxy) to connect to external servers; you should discuss this with your local systems administration. In that case, you will need to note down the URL of the proxy. If the proxy requires authentication, you will also need to make a note of its username and password. This information will be used later on during the installation process. TLS terminating proxies are also supported, see [here](#tls-terminating-proxies). Apart from the Bridgehead itself, you may also need to configure the proxy server in [git](https://gist.github.com/evantoli/f8c23a37eb3558ab8765) and [docker](https://docs.docker.com/network/proxy/).
Note that git and Docker may also need to be configured to use this proxy. This is a job for your systems administrators. The following URLs need to be accessible (prefix with `https://`):
* To fetch code and configuration from git repositories
* github.com
* git.verbis.dkfz.de
* To fetch docker images
* docker.verbis.dkfz.de
* Official Docker, Inc. URLs (subject to change, see [official list](https://docs.docker.com/desktop/all))
* hub.docker.com
* registry-1.docker.io
* production.cloudflare.docker.com
* To report bridgeheads operational status
* healthchecks.verbis.dkfz.de
* only for DKTK/CCP
* broker.ccp-it.dktk.dkfz.de
* only for BBMRI-ERIC
* broker.bbmri.samply.de
* gitlab.bbmri-eric.eu
* only for German Biobank Node
* broker.bbmri.de
If there is a site firewall, this needs to be configured so that outgoing calls to the following URLs are allowed: *.dkfz.de, github.com, docker.io, *.docker.io, *.samply.de. GBA sites will also need to allow *.bbmri.de. > 📝 This URL list is subject to change. Instead of the individual names, we highly recommend whitelisting wildcard domains: *.dkfz.de, github.com, *.docker.com, *.docker.io, *.samply.de, *.bbmri.de.
Note for Ubuntu: Please note that the uncomplicated firewall (ufw) is known to conflict with Docker [here](https://github.com/chaifeng/ufw-docker). > 📝 Ubuntu's pre-installed uncomplicated firewall (ufw) is known to conflict with Docker, more info [here](https://github.com/chaifeng/ufw-docker).
## Deployment ## Deployment
@ -342,8 +358,28 @@ Installation under WSL ought to work, but we have not tested this.
### Docker Daemon Proxy Configuration ### Docker Daemon Proxy Configuration
Docker has a background daemon, responsible for downloading images and starting them. Sometimes, proxy configuration from your system won't carry over and it will fail to download images. In that case, configure the proxy for this daemon as described in the [official documentation](https://docs.docker.com). Docker has a background daemon, responsible for downloading images and starting them. Sometimes, proxy configuration from your system won't carry over and it will fail to download images. In that case, you'll need to configure the proxy inside the system unit of docker by creating the file `/etc/systemd/system/docker.service.d/proxy.conf` with the following content:
``` ini
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:3128"
Environment="HTTPS_PROXY=https://proxy.example.com:3128"
Environment="NO_PROXY=localhost,127.0.0.1,some-local-docker-registry.example.com,.corp"
```
After saving the configuration file, you'll need to reload the system daemon for the changes to take effect:
``` shell
sudo systemctl daemon-reload
```
and restart the docker daemon:
``` shell
sudo systemctl restart docker
```
For more information, please consult the [official documentation](https://docs.docker.com/config/daemon/systemd/#httphttps-proxy).
### Monitoring ### Monitoring

View File

@ -65,6 +65,7 @@ loadVars() {
fi fi
detectCompose detectCompose
setHostname setHostname
setupProxy
} }
case "$ACTION" in case "$ACTION" in

View File

@ -0,0 +1,18 @@
version: "3.7"
services:
adt2fhir-rest:
container_name: bridgehead-adt2fhir-rest
image: docker.verbis.dkfz.de/ccp/adt2fhir-rest:main
environment:
IDTYPE: BK_${IDMANAGEMENT_FRIENDLY_ID}_L-ID
MAINZELLISTE_APIKEY: ${IDMANAGER_LOCAL_PATIENTLIST_APIKEY}
SALT: ${LOCAL_SALT}
restart: always
labels:
- "traefik.enable=true"
- "traefik.http.routers.adt2fhir-rest.rule=PathPrefix(`/adt2fhir-rest`)"
- "traefik.http.middlewares.adt2fhir-rest_strip.stripprefix.prefixes=/adt2fhir-rest"
- "traefik.http.services.adt2fhir-rest.loadbalancer.server.port=8080"
- "traefik.http.routers.adt2fhir-rest.tls=true"
- "traefik.http.routers.adt2fhir-rest.middlewares=adt2fhir-rest_strip,auth"

View File

@ -0,0 +1,13 @@
#!/bin/bash
function adt2fhirRestSetup() {
if [ -n "$ENABLE_ADT2FHIR_REST" ]; then
log INFO "ADT2FHIR-REST setup detected -- will start adt2fhir-rest API."
if [ ! -n "$IDMANAGER_LOCAL_PATIENTLIST_APIKEY" ]; then
log ERROR "Missing ID-Management Module! Fix this by setting up ID Management:"
exit 1;
fi
OVERRIDE+=" -f ./$PROJECT/modules/adt2fhir-rest-compose.yml"
LOCAL_SALT="$(echo \"local-random-salt\" | openssl pkeyutl -sign -inkey /etc/bridgehead/pki/${SITE_ID}.priv.pem | base64 | head -c 30)"
fi
}

View File

@ -39,6 +39,7 @@ function applySpecialCases() {
result="$1"; result="$1";
result="${result/Lmu/LMU}"; result="${result/Lmu/LMU}";
result="${result/Tum/TUM}"; result="${result/Tum/TUM}";
result="${result/Dktk Test/Teststandort}";
echo "$result"; echo "$result";
} }

View File

@ -1,13 +1,12 @@
#!/bin/bash #!/bin/bash
function mtbaSetup() { function mtbaSetup() {
# TODO: Check if ID-Management Module is activated! if [ -n "$ENABLE_MTBA" ];then
if [ -n "$ENABLE_MTBA" ];then log INFO "MTBA setup detected -- will start MTBA Service and CBioPortal."
log INFO "MTBA setup detected -- will start MTBA Service and CBioPortal." if [ ! -n "$IDMANAGER_UPLOAD_APIKEY" ]; then
if [ ! -n "$IDMANAGER_UPLOAD_APIKEY" ]; then log ERROR "Missing ID-Management Module! Fix this by setting up ID Management:"
log ERROR "Detected MTBA Module configuration but ID-Management Module seems not to be configured!" exit 1;
exit 1; fi
fi OVERRIDE+=" -f ./$PROJECT/modules/mtba-compose.yml"
OVERRIDE+=" -f ./$PROJECT/modules/mtba-compose.yml" fi
fi
} }

View File

@ -1,8 +1,6 @@
#!/bin/bash #!/bin/bash
function nngmSetup() { if [ -n "$NNGM_CTS_APIKEY" ]; then
if [ -n "$NNGM_CTS_APIKEY" ]; then log INFO "nNGM setup detected -- will start nNGM Connector."
log INFO "nNGM setup detected -- will start nNGM Connector." OVERRIDE+=" -f ./$PROJECT/modules/nngm-compose.yml"
OVERRIDE+=" -f ./$PROJECT/modules/nngm-compose.yml" fi
fi
}

View File

@ -16,5 +16,5 @@ do
done done
idManagementSetup idManagementSetup
nngmSetup
mtbaSetup mtbaSetup
adt2fhirRestSetup

View File

@ -9,6 +9,33 @@ detectCompose() {
fi fi
} }
setupProxy() {
### Note: As the current data protection concepts do not allow communication via HTTP,
### we are not setting a proxy for HTTP requests.
local http="no"
local https="no"
if [ $HTTPS_PROXY_URL ]; then
local proto="$(echo $HTTPS_PROXY_URL | grep :// | sed -e 's,^\(.*://\).*,\1,g')"
local fqdn="$(echo ${HTTPS_PROXY_URL/$proto/})"
local hostport=$(echo $HTTPS_PROXY_URL | sed -e "s,$proto,,g" | cut -d/ -f1)
HTTPS_PROXY_HOST="$(echo $hostport | sed -e 's,:.*,,g')"
HTTPS_PROXY_PORT="$(echo $hostport | sed -e 's,^.*:,:,g' -e 's,.*:\([0-9]*\).*,\1,g' -e 's,[^0-9],,g')"
if [[ ! -z "$HTTPS_PROXY_USERNAME" && ! -z "$HTTPS_PROXY_PASSWORD" ]]; then
local proto="$(echo $HTTPS_PROXY_URL | grep :// | sed -e 's,^\(.*://\).*,\1,g')"
local fqdn="$(echo ${HTTPS_PROXY_URL/$proto/})"
HTTPS_PROXY_FULL_URL="$(echo $proto$HTTPS_PROXY_USERNAME:$HTTPS_PROXY_PASSWORD@$fqdn)"
https="authenticated"
else
HTTPS_PROXY_FULL_URL=$HTTPS_PROXY_URL
https="unauthenticated"
fi
fi
log INFO "Configuring proxy servers: $http http proxy (we're not supporting unencrypted comms), $https https proxy"
export HTTPS_PROXY_HOST HTTPS_PROXY_PORT HTTPS_PROXY_FULL_URL
}
exitIfNotRoot() { exitIfNotRoot() {
if [ "$EUID" -ne 0 ]; then if [ "$EUID" -ne 0 ]; then
log "ERROR" "Please run as root" log "ERROR" "Please run as root"
@ -49,7 +76,7 @@ fetchVarsFromVault() {
set +e set +e
PASS=$(BW_MASTERPASS="$BW_MASTERPASS" BW_CLIENTID="$BW_CLIENTID" BW_CLIENTSECRET="$BW_CLIENTSECRET" docker run --rm -e BW_MASTERPASS -e BW_CLIENTID -e BW_CLIENTSECRET -e http_proxy samply/bridgehead-vaultfetcher $@) PASS=$(BW_MASTERPASS="$BW_MASTERPASS" BW_CLIENTID="$BW_CLIENTID" BW_CLIENTSECRET="$BW_CLIENTSECRET" docker run --rm -e BW_MASTERPASS -e BW_CLIENTID -e BW_CLIENTSECRET -e http_proxy docker.verbis.dkfz.de/cache/samply/bridgehead-vaultfetcher:latest $@)
RET=$? RET=$?
if [ $RET -ne 0 ]; then if [ $RET -ne 0 ]; then
@ -188,7 +215,7 @@ function do_enroll_inner {
PARAMS+="--admin-email $SUPPORT_EMAIL" PARAMS+="--admin-email $SUPPORT_EMAIL"
fi fi
docker run --rm -v /etc/bridgehead/pki:/etc/bridgehead/pki samply/beam-enroll:latest --output-file $PRIVATEKEYFILENAME --proxy-id $MANUAL_PROXY_ID $PARAMS docker run --rm -v /etc/bridgehead/pki:/etc/bridgehead/pki docker.verbis.dkfz.de/cache/samply/beam-enroll:latest --output-file $PRIVATEKEYFILENAME --proxy-id $MANUAL_PROXY_ID $PARAMS
chmod 600 $PRIVATEKEYFILENAME chmod 600 $PRIVATEKEYFILENAME
} }

View File

@ -47,8 +47,8 @@ function hc_send(){
if [ -n "$2" ]; then if [ -n "$2" ]; then
MSG="$2\n\nDocker stats:\n$UPTIME" MSG="$2\n\nDocker stats:\n$UPTIME"
echo -e "$MSG" | https_proxy=$HTTPS_PROXY_URL curl --max-time 5 -A "$USER_AGENT" -s -o /dev/null -X POST --data-binary @- "$HCURL"/"$1" || log WARN "Monitoring failed: Unable to send data to $HCURL/$1" echo -e "$MSG" | https_proxy=$HTTPS_PROXY_FULL_URL curl --max-time 5 -A "$USER_AGENT" -s -o /dev/null -X POST --data-binary @- "$HCURL"/"$1" || log WARN "Monitoring failed: Unable to send data to $HCURL/$1"
else else
https_proxy=$HTTPS_PROXY_URL curl --max-time 5 -A "$USER_AGENT" -s -o /dev/null "$HCURL"/"$1" || log WARN "Monitoring failed: Unable to send data to $HCURL/$1" https_proxy=$HTTPS_PROXY_FULL_URL curl --max-time 5 -A "$USER_AGENT" -s -o /dev/null "$HCURL"/"$1" || log WARN "Monitoring failed: Unable to send data to $HCURL/$1"
fi fi
} }

View File

@ -68,7 +68,7 @@ source /etc/bridgehead/${PROJECT}.conf
source ${PROJECT}/vars source ${PROJECT}/vars
set +e set +e
SERVERTIME="$(https_proxy=$HTTPS_PROXY_URL curl -m 5 -s -I $BROKER_URL_FOR_PREREQ 2>&1 | grep -i -e '^Date: ' | sed -e 's/^Date: //i')" SERVERTIME="$(https_proxy=$HTTPS_PROXY_FULL_URL curl -m 5 -s -I $BROKER_URL_FOR_PREREQ 2>&1 | grep -i -e '^Date: ' | sed -e 's/^Date: //i')"
RET=$? RET=$?
set -e set -e
if [ $RET -ne 0 ]; then if [ $RET -ne 0 ]; then

View File

@ -50,12 +50,12 @@ for DIR in /etc/bridgehead $(pwd); do
git -C $DIR config credential.helper "$CREDHELPER" git -C $DIR config credential.helper "$CREDHELPER"
fi fi
old_git_hash="$(git -C $DIR rev-parse --verify HEAD)" old_git_hash="$(git -C $DIR rev-parse --verify HEAD)"
if [ -z "$HTTP_PROXY_URL" ]; then if [ -z "$HTTPS_PROXY_FULL_URL" ]; then
log "INFO" "Git is using no proxy!" log "INFO" "Git is using no proxy!"
OUT=$(retry 5 git -C $DIR fetch 2>&1 && retry 5 git -C $DIR pull 2>&1) OUT=$(retry 5 git -C $DIR fetch 2>&1 && retry 5 git -C $DIR pull 2>&1)
else else
log "INFO" "Git is using proxy ${HTTP_PROXY_URL} from ${CONFFILE}" log "INFO" "Git is using proxy ${HTTPS_PROXY_URL} from ${CONFFILE}"
OUT=$(retry 5 git -c http.proxy=$HTTP_PROXY_URL -c https.proxy=$HTTPS_PROXY_URL -C $DIR fetch 2>&1 && retry 5 git -c http.proxy=$HTTP_PROXY_URL -c https.proxy=$HTTPS_PROXY_URL -C $DIR pull 2>&1) OUT=$(retry 5 git -c http.proxy=$HTTPS_PROXY_FULL_URL -c https.proxy=$HTTPS_PROXY_FULL_URL -C $DIR fetch 2>&1 && retry 5 git -c http.proxy=$HTTPS_PROXY_FULL_URL -c https.proxy=$HTTPS_PROXY_FULL_URL -C $DIR pull 2>&1)
fi fi
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
report_error log "Unable to update git $DIR: $OUT" report_error log "Unable to update git $DIR: $OUT"

View File

@ -35,8 +35,8 @@ services:
image: docker.verbis.dkfz.de/cache/samply/bridgehead-forward-proxy:latest image: docker.verbis.dkfz.de/cache/samply/bridgehead-forward-proxy:latest
environment: environment:
HTTPS_PROXY: ${HTTPS_PROXY_URL} HTTPS_PROXY: ${HTTPS_PROXY_URL}
USERNAME: ${HTTPS_PROXY_USERNAME} HTTPS_PROXY_USERNAME: ${HTTPS_PROXY_USERNAME}
PASSWORD: ${HTTPS_PROXY_PASSWORD} HTTPS_PROXY_PASSWORD: ${HTTPS_PROXY_PASSWORD}
tmpfs: tmpfs:
- /var/log/squid - /var/log/squid
- /var/spool/squid - /var/spool/squid
@ -45,7 +45,7 @@ services:
landing: landing:
container_name: bridgehead-landingpage container_name: bridgehead-landingpage
image: docker.verbis.dkfz.de/cache/samply/bridgehead-landingpage:master image: docker.verbis.dkfz.de/cache/samply/bridgehead-landingpage:main
labels: labels:
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.http.routers.landing.rule=PathPrefix(`/`)" - "traefik.http.routers.landing.rule=PathPrefix(`/`)"