From ecfc3f5338a4ac6c7104e79ba12038f95d75cdef Mon Sep 17 00:00:00 2001 From: prasadtalasila Date: Tue, 5 Mar 2024 02:41:33 +0100 Subject: [PATCH] Prepares codebase for release v0.4.0 --- SECURITY.md | 3 +- deploy/single-script-install.sh | 2 +- docker/.env | 9 -- docker/README.md | 168 -------------------------------- docker/compose.local.yml | 94 ------------------ docker/compose.server.yml | 94 ------------------ docker/conf.local | 8 -- docker/conf.server | 10 -- docker/dev/.env | 9 -- docker/dev/README.md | 86 ---------------- docker/dev/client.dockerfile | 28 ------ docker/dev/compose.dev.yml | 99 ------------------- docker/dev/libms.dockerfile | 14 --- docker/traefik-forward-auth.png | Bin 98712 -> 0 bytes docs/redirect-page.html | 5 + 15 files changed, 8 insertions(+), 621 deletions(-) delete mode 100644 docker/.env delete mode 100644 docker/README.md delete mode 100644 docker/compose.local.yml delete mode 100644 docker/compose.server.yml delete mode 100644 docker/conf.local delete mode 100644 docker/conf.server delete mode 100644 docker/dev/.env delete mode 100644 docker/dev/README.md delete mode 100644 docker/dev/client.dockerfile delete mode 100644 docker/dev/compose.dev.yml delete mode 100644 docker/dev/libms.dockerfile delete mode 100644 docker/traefik-forward-auth.png diff --git a/SECURITY.md b/SECURITY.md index 91aed179a..ff01daa05 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -6,7 +6,8 @@ We are currently providing security updates for: | Version | Supported | | ------- | ------------------ | -| 0.3.0 | :white_check_mark: | +| 0.4.0 | :white_check_mark: | +| 0.3.0 | :x: | | 0.2.0 | :x: | | 0.1.0 | :x: | diff --git a/deploy/single-script-install.sh b/deploy/single-script-install.sh index adb380463..2ebade589 100755 --- a/deploy/single-script-install.sh +++ b/deploy/single-script-install.sh @@ -138,7 +138,7 @@ else git clone https://github.com/INTO-CPS-Association/DTaaS.git DTaaS cd DTaaS || exit git fetch --all - git checkout feature/distributed-demo + git checkout release-v0.4 fi TOP_DIR=$(pwd) diff --git a/docker/.env b/docker/.env deleted file mode 100644 index 07a7962a7..000000000 --- a/docker/.env +++ /dev/null @@ -1,9 +0,0 @@ -DTAAS_DIR='/home/Desktop/DTaaS' -SERVER_DNS='foo.com' -OAUTH_URL='https://gitlab.foo.com' -CLIENT_ID='xx' -CLIENT_SECRET='xx' -OAUTH_SECRET='random-secret-string' -CLIENT_CONFIG='/home/Desktop/DTaaS/deploy/config/client/env.local.js' -username1='user1' -username2='user2' \ No newline at end of file diff --git a/docker/README.md b/docker/README.md deleted file mode 100644 index 1b7b506e1..000000000 --- a/docker/README.md +++ /dev/null @@ -1,168 +0,0 @@ -# Docker Compose for DTaaS with Backend Authorization - -This directory contains docker compose files for running the DTaaS with -backend authorization. The authorization happens at traefik using -[Traefik forward-auth](https://github.com/thomseddon/traefik-forward-auth). -The Traefik forward-auth uses OAuth2 for protecting all routes to user workspaces. - -## Design - -An illustration of the docker containers used and the authorization -setup is shown here. - -![Traefik OAuth](./traefik-forward-auth.png) - -In the new application configuration, there are two OAuth2 applications. - -- The React single page application (SPA). The details of - this Oauth2 app are in - [client docs](../../docs/admin/client/auth.md). -- The Oauth2 server-side or web application for traefik forward-auth container. - The details are in [server docs](../../docs/admin/servers/auth.md). - -## Requirements - -The installation requirements to run this docker version of the DTaaS are: - -- docker with compose plugin -- [gitlab oauth provider](https://docs.gitlab.com/ee/integration/oauth_provider.html#create-an-instance-wide-application) -- DNS name (optional, required only when the DTaaS is to be deployed on a web server) -- User accounts - -### Create User Accounts - -Create user accounts in gitlab for all the usernames mentioned in -`.env` and `conf` files. -The _trial_ installation script comes with two default -usernames - _user1_ and _user2_. For all other installation scenarios, -accounts with specific usernames need to be created on gitlab. - -## Configuration - -### Traefik forward-auth - -The first step is to finish the configuration for -the traefik forward-auth container. -The details are in [server docs](../../docs/admin/servers/auth.md). - -### Docker Compose - -The docker compose configuration is in `.env`; it is a sample file. -It contains environment variables -that are used by the docker compose files. - -Edit all the fields according to your specific case. - - | URL Path | Access Granted to |Access Granted to | - |:------------|:---------------|:---------------| - | DTAAS_DIR | '/home/Desktop/DTaaS' | Full path to the DTaaS directory. This is an absolute path with no trailing slash. | - | SERVER_DNS | _foo.com_ or _localhost_ | The server DNS, if you are deploying with a dedicated server. Remember not use http(s) at the beginning of the DNS string | - | BASE_URL | _gitlab.foo.com_ | The URL of your Gitlab instance | - | CLIENT_ID | 'xx' | The ID of your OAuth application | - | CLIENT_SECRET | 'xx' | The Secret of your OAuth application | - | OAUTH_SECRET | 'random-secret-string' | Any private random string | - | username1 | 'user1' | The gitlab instance username of a user of DTaaS | - | username2 | 'user2' | The gitlab instance username of a user of DTaaS | - | CLIENT_CONFIG | '/home/Desktop/DTaaS/deploy/config/client/env.js' | Full path to env.js file for client | - -Note: The Server DNS can also be an IP address. -However, for proper working it is neccessary to use the -same convention (IP/DNS) in the `CLIENT_CONFIG` file as well. - -### Website Client - -- Assign the correct client config file to `CLIENT_CONFIG` and - update the values. - - | Deployment Scenario | client env file | - |:-------|:------| - | localhost | deploy/config/client/env.local.js | - | trial | deploy/config/client/env.trial.js | - - This file has to be configured properly. - - Further explanation on the client configuration is available in - [client config page](../../docs/admin/client/CLIENT.md). - -### Lib MS - -No configuration change is needed for a general use case to bring up the LibMS. - -In a specific case, -you can change the configuration of the LibMS by editing the file: - -- deploy/config/lib.docker - -This is not recommended for a general use. -It should be done with care, making relevant changes -in all other related files, -and the compose file being used. - -### Caveat - -The usernames in the `.env` file need to match those in the conf file. -The conf.local is used by compose.local.yml and -conf.server is used by compose.server.yml. - -Traefik routes are controlled by the `.env` file -Authentication on these routes is controlled by the `conf` file. -If a route is not specified in `conf` file but an authorisation is -requested by traefik for this unknown route, the default behavior of -traefik forward-auth kicks in. This default behavior is to enable -endpoint being available to any signed in user. - -If there are extra routes in `conf` file but these are not in `.env` file, -such routes are not served by traefik; it will give **404 server response**. - -## Run - -There are two usage scenarios, namely **localhost** and **trial** installation. - -Both the installation scenarios use the images already built and -deployed on docker hub, for the ML-workspace, client, and LibMS. -Both incorporate traefik forward-auth microservice for backend authorization. - -### Localhost - -The commands to start and stop the appliation are: - -```bash -docker compose -f compose.local.yml --env-file .env up -d -docker compose -f compose.local.yml --env-file .env down -``` - -To restart only a specific container, for example `client`` - -```bash -docker compose -f compose.local.yml --env-file .env up -d --force-recreate client -``` - -## Trial Server Installation - -The commands to start and stop the appliation are: - -```bash -docker compose -f compose.server.yml --env-file .env up -d -docker compose -f compose.server.yml --env-file .env down -``` - -To restart only a specific container, for example `client`` - -```bash -docker compose -f compose.server.yml --env-file .env up -d --force-recreate client -``` - -## Use - -| Deployment Scenario | URL | -|:----|:----| -| localhost | _localhost_ | -| trial server | _foo.com_ | - -Sign in to gitlab instance with the your account. - -All the functionality of DTaaS should be available to you -through the single page client now. - -You may have to click Sign in to Gitlab on the Client page -and authorize access to the shown application. diff --git a/docker/compose.local.yml b/docker/compose.local.yml deleted file mode 100644 index 88c212671..000000000 --- a/docker/compose.local.yml +++ /dev/null @@ -1,94 +0,0 @@ -version: '3' -services: - traefik: - image: traefik:v2.10 - command: - - "--api.insecure=true" - - "--providers.docker=true" - - "--entryPoints.web.address=:80" - - "--entrypoints.web.forwardedHeaders.insecure=true" - - "--entrypoints.web.proxyProtocol.insecure=true" - ports: - - "80:80" - volumes: - - /var/run/docker.sock:/var/run/docker.sock - - libms: - image: intocps/libms:latest - volumes: - - ${DTAAS_DIR}/deploy/config/lib.docker:/dtaas/libms/.env - - ${DTAAS_DIR}/files:/dtaas/libms/files - labels: - - "traefik.enable=true" - - "traefik.http.routers.libms.entryPoints=web" - - "traefik.http.services.libms.loadbalancer.server.port=4001" - - "traefik.http.routers.libms.rule= PathPrefix(`/lib`)" - - "traefik.http.routers.libms.middlewares=traefik-forward-auth" - - client: - image: intocps/dtaas-web:latest - volumes: - - ${CLIENT_CONFIG}:/dtaas/client/build/env.js - labels: - - "traefik.enable=true" - - "traefik.http.routers.client.entryPoints=web" - - "traefik.http.services.client.loadbalancer.server.port=4000" - - "traefik.http.routers.client.middlewares=traefik-forward-auth" - - "traefik.http.routers.client.rule=PathPrefix(`/`)" - - user1: - image: mltooling/ml-workspace-minimal:0.13.2 - volumes: - - ${DTAAS_DIR}/files/common:/workspace/common - - ${DTAAS_DIR}/files/${username1}:/workspace - environment: - - AUTHENTICATE_VIA_JUPYTER= - - WORKSPACE_BASE_URL=${username1} - shm_size: 512m - labels: - - "traefik.enable=true" - - "traefik.http.routers.u1.entryPoints=web" - - "traefik.http.routers.u1.rule=PathPrefix(`/${username1}`) " - - "traefik.http.routers.u1.middlewares=traefik-forward-auth" - - user2: - image: mltooling/ml-workspace-minimal:0.13.2 - volumes: - - ${DTAAS_DIR}/files/common:/workspace/common - - ${DTAAS_DIR}/files/${username2}:/workspace - environment: - - AUTHENTICATE_VIA_JUPYTER= - - WORKSPACE_BASE_URL=${username2} - shm_size: 512m - labels: - - "traefik.enable=true" - - "traefik.http.routers.u2.entryPoints=web" - - "traefik.http.routers.u2.rule=PathPrefix(`/${username2}`) " - - "traefik.http.routers.u2.middlewares=traefik-forward-auth" - - traefik-forward-auth: - image: thomseddon/traefik-forward-auth:latest - volumes: - - ${DTAAS_DIR}/docker/conf.local:/conf - environment: - - DEFAULT_PROVIDER=generic-oauth - - PROVIDERS_GENERIC_OAUTH_AUTH_URL=${OAUTH_URL}/oauth/authorize - - PROVIDERS_GENERIC_OAUTH_TOKEN_URL=${OAUTH_URL}/oauth/token - - PROVIDERS_GENERIC_OAUTH_USER_URL=${OAUTH_URL}/api/v4/user - - PROVIDERS_GENERIC_OAUTH_CLIENT_ID=${CLIENT_ID} - - PROVIDERS_GENERIC_OAUTH_CLIENT_SECRET=${CLIENT_SECRET} - - PROVIDERS_GENERIC_OAUTH_SCOPE=read_user - - SECRET= ${OAUTH_SECRET} - # INSECURE_COOKIE is required if not using a https entrypoint - - INSECURE_COOKIE=true - - CONFIG=/conf - labels: - - "traefik.enable=true" - - - "traefik.http.routers.redirect.entryPoints=web" - - "traefik.http.routers.redirect.rule=PathPrefix(`/_oauth`)" - - "traefik.http.routers.redirect.middlewares=traefik-forward-auth" - - - "traefik.http.middlewares.traefik-forward-auth.forwardauth.address=http://traefik-forward-auth:4181" - - "traefik.http.middlewares.traefik-forward-auth.forwardauth.authResponseHeaders=X-Forwarded-User" - - "traefik.http.services.traefik-forward-auth.loadbalancer.server.port=4181" diff --git a/docker/compose.server.yml b/docker/compose.server.yml deleted file mode 100644 index 9848d088a..000000000 --- a/docker/compose.server.yml +++ /dev/null @@ -1,94 +0,0 @@ -version: '3' -services: - traefik: - image: traefik:v2.10 - command: - - "--api.insecure=true" - - "--providers.docker=true" - - "--entryPoints.web.address=:80" - - "--entrypoints.web.forwardedHeaders.insecure=true" - - "--entrypoints.web.proxyProtocol.insecure=true" - ports: - - "80:80" - volumes: - - /var/run/docker.sock:/var/run/docker.sock - - libms: - image: intocps/libms:latest - volumes: - - ${DTAAS_DIR}/deploy/config/lib.docker:/dtaas/libms/.env - - ${DTAAS_DIR}/files:/dtaas/libms/files - labels: - - "traefik.enable=true" - - "traefik.http.routers.libms.entryPoints=web" - - "traefik.http.services.libms.loadbalancer.server.port=4001" - - "traefik.http.routers.libms.rule=Host(`${SERVER_DNS}`)&&PathPrefix(`/lib`)" - - "traefik.http.routers.libms.middlewares=traefik-forward-auth" - - client: - image: intocps/dtaas-web:latest - volumes: - - ${CLIENT_CONFIG}:/dtaas/client/build/env.js - labels: - - "traefik.enable=true" - - "traefik.http.routers.client.entryPoints=web" - - "traefik.http.services.client.loadbalancer.server.port=4000" - - "traefik.http.routers.client.middlewares=traefik-forward-auth" - - "traefik.http.routers.client.rule=Host(`${SERVER_DNS}`)&&PathPrefix(`/`)" - - user1: - image: mltooling/ml-workspace-minimal:0.13.2 - volumes: - - ${DTAAS_DIR}/files/common:/workspace/common - - ${DTAAS_DIR}/files/${username1}:/workspace - environment: - - AUTHENTICATE_VIA_JUPYTER= - - WORKSPACE_BASE_URL=${username1} - shm_size: 512m - labels: - - "traefik.enable=true" - - "traefik.http.routers.u1.entryPoints=web" - - "traefik.http.routers.u1.rule=Host(`${SERVER_DNS}`)&&PathPrefix(`/${username1}`)" - - "traefik.http.routers.u1.middlewares=traefik-forward-auth" - - user2: - image: mltooling/ml-workspace-minimal:0.13.2 - volumes: - - ${DTAAS_DIR}/files/common:/workspace/common - - ${DTAAS_DIR}/files/${username2}:/workspace - environment: - - AUTHENTICATE_VIA_JUPYTER= - - WORKSPACE_BASE_URL=${username2} - shm_size: 512m - labels: - - "traefik.enable=true" - - "traefik.http.routers.u2.entryPoints=web" - - "traefik.http.routers.u2.rule=Host(`${SERVER_DNS}`)&&PathPrefix(`/${username2}`)" - - "traefik.http.routers.u2.middlewares=traefik-forward-auth" - - traefik-forward-auth: - image: thomseddon/traefik-forward-auth:latest - volumes: - - ${DTAAS_DIR}/docker/conf.server:/conf - environment: - - DEFAULT_PROVIDER=generic-oauth - - PROVIDERS_GENERIC_OAUTH_AUTH_URL=${OAUTH_URL}/oauth/authorize - - PROVIDERS_GENERIC_OAUTH_TOKEN_URL=${OAUTH_URL}/oauth/token - - PROVIDERS_GENERIC_OAUTH_USER_URL=${OAUTH_URL}/api/v4/user - - PROVIDERS_GENERIC_OAUTH_CLIENT_ID=${CLIENT_ID} - - PROVIDERS_GENERIC_OAUTH_CLIENT_SECRET=${CLIENT_SECRET} - - PROVIDERS_GENERIC_OAUTH_SCOPE=read_user - - SECRET= ${OAUTH_SECRET} - # INSECURE_COOKIE is required if not using a https entrypoint - - INSECURE_COOKIE=true - - CONFIG=/conf - labels: - - "traefik.enable=true" - - - "traefik.http.routers.redirect.entryPoints=web" - - "traefik.http.routers.redirect.rule=Host(`${SERVER_DNS}`)&&PathPrefix(`/_oauth`)" - - "traefik.http.routers.redirect.middlewares=traefik-forward-auth" - - - "traefik.http.middlewares.traefik-forward-auth.forwardauth.address=http://traefik-forward-auth:4181" - - "traefik.http.middlewares.traefik-forward-auth.forwardauth.authResponseHeaders=X-Forwarded-User" - - "traefik.http.services.traefik-forward-auth.loadbalancer.server.port=4181" diff --git a/docker/conf.local b/docker/conf.local deleted file mode 100644 index 971d212a3..000000000 --- a/docker/conf.local +++ /dev/null @@ -1,8 +0,0 @@ -rule.libms.action=allow -rule.libms.rule=PathPrefix(`/lib`) - -rule.onlyu1.action=allow -rule.onlyu1.rule=PathPrefix(`/user1`) - -rule.onlyu2.action=allow -rule.onlyu2.rule=PathPrefix(`/user2`) \ No newline at end of file diff --git a/docker/conf.server b/docker/conf.server deleted file mode 100644 index 32add3506..000000000 --- a/docker/conf.server +++ /dev/null @@ -1,10 +0,0 @@ -rule.libms.action=auth -rule.libms.rule=PathPrefix(`/lib`) - -rule.onlyu1.action=auth -rule.onlyu1.rule=PathPrefix(`/user1`) -rule.onlyu1.whitelist = user1@emailservice.com - -rule.onlyu2.action=auth -rule.onlyu2.rule=PathPrefix(`/user2`) -rule.onlyu2.whitelist = user2@emailservice.com \ No newline at end of file diff --git a/docker/dev/.env b/docker/dev/.env deleted file mode 100644 index 80b1ec640..000000000 --- a/docker/dev/.env +++ /dev/null @@ -1,9 +0,0 @@ -DTAAS_DIR='/home/Desktop/DTaaS' -SERVER_DNS='foo.com' -OAUTH_URL='https://gitlab.foo.com' -CLIENT_ID='xx' -CLIENT_SECRET='xx' -OAUTH_SECRET='random-secret-string' -OAUTH_CONF_FILEPATH='/home/Desktop/DTaaS/docker/conf.local' -username1='user1' -username2='user2' diff --git a/docker/dev/README.md b/docker/dev/README.md deleted file mode 100644 index 450667fa7..000000000 --- a/docker/dev/README.md +++ /dev/null @@ -1,86 +0,0 @@ -# Docker workflow for DTaaS - -This readme will explain the building and use of different docker files -for use in development and installation of the DTaaS software. - -**NOTE**: A local docker and docker-compose installation is a pre-requisite -for using docker workflows. - -## Folder Structure - -There are two dockerfiles for building the containers: - -- **client.dockerfile**: Dockerfile for building - the client application container. -- **libms.dockerfile**: Dockerfile for building the library microservice container. - -There is a specific compose file for development: - -- **compose.dev.yml:** Docker Compose configuration for development environment. - -## Build and Publish Docker Images - -### Users - -Build and publish the docker images. This step is required only for -the publication of images to Docker Hub. This publishing step is managed -only by project maintainers. Regular users can skip this step. - -```sh -docker login -u -p -docker build -t intocps/libms:latest -f ./docker/libms.dockerfile . -docker tag intocps/libms:latest intocps/libms:version -docker push intocps/libms:latest -docker push intocps/libms:version - -docker build -t intocps/dtaas-web:latest -f ./docker/client.dockerfile . -docker tag intocps/dtaas-web:latest intocps/dtaas-web:version -docker push intocps/dtaas-web:latest -docker push intocps/dtaas-web:version -``` - -To tag version 0.3.1 for example, use - -```sh -docker tag intocps/dtaas-web:latest intocps/dtaas-web:0.3.1 -``` - -### Developers - -Use of docker images is handy for developers as well. It is suggested -that developers build the required images locally on their computer and -use them for development purposes. The images can be built using - -```sh -docker-compose -f compose.dev.yml build -``` - -## Running Docker Containers - -Follow these steps to use the application with docker. - -The DTaaS application requires multiple configuration files. The list of -configuration files to be modified are given for each scenario. - -### Development Environment - -This scenario is for software developers: - -### Client Website & Lib Configuration - -The configuration files to be updated are: - -1. client/config/local.js -1. deploy/config/lib.docker (optional) - -The relevant docker commands are: - -```bash -docker-compose -f compose.dev.yml up -d #start the application -docker-compose -f compose.dev.yml down #terminate the application -``` - -### Access the Application - -You should access the application through the PORT mapped to the Traefik container. -e.g. `localhost` diff --git a/docker/dev/client.dockerfile b/docker/dev/client.dockerfile deleted file mode 100644 index 6a5c37f7d..000000000 --- a/docker/dev/client.dockerfile +++ /dev/null @@ -1,28 +0,0 @@ -#! docker should be run from the root directory of the project -FROM node:20.10.0-slim as build - -# Set the working directory inside the container -WORKDIR /dtaas/client - -# Copy package.json and package-lock.json to the working directory -COPY ./client/package.json ./ - -# Install dependencies -RUN yarn install --immutable --immutable-cache --check-cache - -# Copy the rest of the application code to the working directory -COPY ./client/ . - -# Build the React app -RUN yarn build - - -FROM node:20.10.0-slim -# Copy the build output to serve -COPY --from=build /dtaas/client/build /dtaas/client/build -COPY --from=build /dtaas/client/package.json /dtaas/client/package.json - -WORKDIR /dtaas/client -RUN npm i -g serve -# Define the command to run your app -CMD ["yarn", "start"] \ No newline at end of file diff --git a/docker/dev/compose.dev.yml b/docker/dev/compose.dev.yml deleted file mode 100644 index 02f206a9f..000000000 --- a/docker/dev/compose.dev.yml +++ /dev/null @@ -1,99 +0,0 @@ -version: '3' -services: - traefik: - image: traefik:v2.10 - command: - - "--api.insecure=true" - - "--providers.docker=true" - - "--entryPoints.web.address=:80" - - "--entrypoints.web.forwardedHeaders.insecure=true" - - "--entrypoints.web.proxyProtocol.insecure=true" - ports: - - "80:80" - volumes: - - /var/run/docker.sock:/var/run/docker.sock - - client: - build: - context: ${DTAAS_DIR}/ - dockerfile: ${DTAAS_DIR}/docker/dev/client.dockerfile - volumes: - - "${DTAAS_DIR}/client/config/local.js:/dtaas/client/build/env.js" - labels: - - "traefik.enable=true" - - "traefik.http.routers.client.entryPoints=web" - - "traefik.http.services.client.loadbalancer.server.port=4000" - - "traefik.http.routers.client.middlewares=traefik-forward-auth" - - "traefik.http.routers.client.rule=PathPrefix(`/`)" - - libms: - image: intocps/libms:latest - build: - context: ${DTAAS_DIR}/ - dockerfile: ${DTAAS_DIR}/docker/libms.dockerfile - volumes: - - ${DTAAS_DIR}/deploy/config/lib.docker:/dtaas/libms/.env - - ${DTAAS_DIR}/files:/dtaas/libms/files - labels: - - "traefik.enable=true" - - "traefik.http.routers.libms.entryPoints=web" - - "traefik.http.services.libms.loadbalancer.server.port=4001" - - "traefik.http.routers.libms.rule= PathPrefix(`/lib`)" - - "traefik.http.routers.libms.middlewares=traefik-forward-auth" - - user1: - image: mltooling/ml-workspace-minimal:0.13.2 - volumes: - - ${DTAAS_DIR}/files/common:/workspace/common - - ${DTAAS_DIR}/files/${username1}:/workspace - environment: - - AUTHENTICATE_VIA_JUPYTER= - - WORKSPACE_BASE_URL=${username1} - shm_size: 512m - labels: - - "traefik.enable=true" - - "traefik.http.routers.u1.entryPoints=web" - - "traefik.http.routers.u1.rule=PathPrefix(`/${username1}`) " - - "traefik.http.routers.u1.middlewares=traefik-forward-auth" - - user2: - image: mltooling/ml-workspace-minimal:0.13.2 - volumes: - - ${DTAAS_DIR}/files/common:/workspace/common - - ${DTAAS_DIR}/files/${username2}:/workspace - environment: - - AUTHENTICATE_VIA_JUPYTER= - - WORKSPACE_BASE_URL=${username2} - shm_size: 512m - labels: - - "traefik.enable=true" - - "traefik.http.routers.u2.entryPoints=web" - - "traefik.http.routers.u2.rule=PathPrefix(`/${username2}`) " - - "traefik.http.routers.u2.middlewares=traefik-forward-auth" - - traefik-forward-auth: - image: thomseddon/traefik-forward-auth:latest - volumes: - - ${OAUTH_CONF_FILEPATH}:/conf - environment: - - DEFAULT_PROVIDER=generic-oauth - - PROVIDERS_GENERIC_OAUTH_AUTH_URL=${OAUTH_URL}/oauth/authorize - - PROVIDERS_GENERIC_OAUTH_TOKEN_URL=${OAUTH_URL}/oauth/token - - PROVIDERS_GENERIC_OAUTH_USER_URL=${OAUTH_URL}/api/v4/user - - PROVIDERS_GENERIC_OAUTH_CLIENT_ID=${CLIENT_ID} - - PROVIDERS_GENERIC_OAUTH_CLIENT_SECRET=${CLIENT_SECRET} - - PROVIDERS_GENERIC_OAUTH_SCOPE=read_user - - SECRET= ${OAUTH_SECRET} - # INSECURE_COOKIE is required if not using a https entrypoint - - INSECURE_COOKIE=true - - CONFIG=/conf - labels: - - "traefik.enable=true" - - - "traefik.http.routers.redirect.entryPoints=web" - - "traefik.http.routers.redirect.rule=PathPrefix(`/_oauth`)" - - "traefik.http.routers.redirect.middlewares=traefik-forward-auth" - - - "traefik.http.middlewares.traefik-forward-auth.forwardauth.address=http://traefik-forward-auth:4181" - - "traefik.http.middlewares.traefik-forward-auth.forwardauth.authResponseHeaders=X-Forwarded-User" - - "traefik.http.services.traefik-forward-auth.loadbalancer.server.port=4181" diff --git a/docker/dev/libms.dockerfile b/docker/dev/libms.dockerfile deleted file mode 100644 index 45e5ab5d2..000000000 --- a/docker/dev/libms.dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM node:20.10.0-slim - -#! docker should be run from the root directory of the project - -# Set the working directory inside the container -WORKDIR /dtaas/libms - -# pull the libms package from npm registry -RUN npm i -g @into-cps-association/libms@0.3.1 - -COPY ./deploy/config/lib . - -# Define the command to run your app -CMD ["libms"] diff --git a/docker/traefik-forward-auth.png b/docker/traefik-forward-auth.png deleted file mode 100644 index d1eb11623471a5de1400adebde4ba3a6ff136a9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98712 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 diff --git a/docs/redirect-page.html b/docs/redirect-page.html index d53a7ed1d..742a397bb 100644 --- a/docs/redirect-page.html +++ b/docs/redirect-page.html @@ -60,6 +60,11 @@ Online PDF + + Version 0.4.0 + Online + PDF + Version 0.3.0 Online