From 360bcf1fdd18c42ffe950a7cc62a367f822ae709 Mon Sep 17 00:00:00 2001
From: Martin Weise <martin.weise@tuwien.ac.at>
Date: Sun, 13 Apr 2025 16:39:58 +0200
Subject: [PATCH] Accidentaly deleted the docker compose

Signed-off-by: Martin Weise <martin.weise@tuwien.ac.at>
---
 .docker/.env               |   9 +
 .docker/docker-compose.yml | 663 +++++++++++++++++++++++++++++++++++++
 .gitignore                 |   9 -
 3 files changed, 672 insertions(+), 9 deletions(-)
 create mode 100644 .docker/.env
 create mode 100644 .docker/docker-compose.yml

diff --git a/.docker/.env b/.docker/.env
new file mode 100644
index 0000000000..e50d4f6b5b
--- /dev/null
+++ b/.docker/.env
@@ -0,0 +1,9 @@
+MARIADB_VERSION=11.3.2
+POSTGRES_VERSION=17.0.0
+KEYCLOAK_VERSION=26.0.4
+RABBITMQ_VERSION=3.13.7
+OPENSEARCH_VERSION=2.10.0
+NGINX_VERSION=1.27.3-alpine3.20-slim
+OPENLDAP_VERSION=2.6.8
+SEAWEEDFS_VERSION=3.71.0
+PROMETHEUS_VERSION=2.54.1
\ No newline at end of file
diff --git a/.docker/docker-compose.yml b/.docker/docker-compose.yml
new file mode 100644
index 0000000000..49c5261b6c
--- /dev/null
+++ b/.docker/docker-compose.yml
@@ -0,0 +1,663 @@
+x-resources-nano: &resources-nano
+  resources:
+    reservations:
+      cpus: '0.1'
+      memory: 128M
+    limits:
+      cpus: '0.15'
+      memory: 192M
+
+x-resources-micro: &resources-micro
+  resources:
+    reservations:
+      cpus: '0.25'
+      memory: 256M
+    limits:
+      cpus: '0.375'
+      memory: 384M
+
+x-resources-nano-hm: &resources-micro-hm
+  resources:
+    reservations:
+      cpus: '0.25'
+      memory: 256M
+    limits:
+      cpus: '0.375'
+      memory: 4096M
+
+x-resources-small: &resources-small
+  resources:
+    reservations:
+      cpus: '0.5'
+      memory: 512M
+    limits:
+      cpus: '0.75'
+      memory: 768M
+
+x-resources-medium: &resources-medium
+  resources:
+    reservations:
+      cpus: '0.5'
+      memory: 1024M
+    limits:
+      cpus: '0.75'
+      memory: 1536M
+
+x-resources-large: &resources-large
+  resources:
+    reservations:
+      cpus: '1'
+      memory: 2048M
+    limits:
+      cpus: '1.5'
+      memory: 3072M
+
+x-healthcheck-params: &healthcheck-params
+  interval: 30s
+  timeout: 10s
+  retries: 15
+
+volumes:
+  metadata-db-data:
+  data-db-data:
+  auth-db-data:
+  broker-service-data:
+  search-db-data:
+  identity-service-data:
+  metric-db-data:
+  dashboard-ui-data:
+
+services:
+  dbrepo-metadata-db:
+    restart: "no"
+    container_name: dbrepo-metadata-db
+    hostname: metadata-db
+    image: docker.io/bitnami/mariadb:${MARIADB_VERSION}
+    volumes:
+      - metadata-db-data:/var/lib/mysql
+      - ./config/1_setup-schema.sql:/docker-entrypoint-initdb.d/1_setup-schema.sql
+      - ./config/2_setup-data.sql:/docker-entrypoint-initdb.d/2_setup-data.sql
+    ports:
+      - "3306:3306"
+    environment:
+      MARIADB_DATABASE: "${METADATA_DB:-dbrepo}"
+      MARIADB_EXTRA_FLAGS: "${METADATA_DB_EXTRA_FLAGS:---max_connections=155 --max-statement-time=60}"
+      MARIADB_ROOT_PASSWORD: "${METADATA_DB_PASSWORD:-dbrepo}"
+    healthcheck:
+      test: /opt/bitnami/scripts/mariadb/healthcheck.sh --connect --innodb_initialized
+      <<: *healthcheck-params
+    deploy:
+      <<: *resources-micro-hm
+    platform: linux/amd64
+    logging:
+      driver: json-file
+
+  dbrepo-data-db:
+    restart: "no"
+    container_name: dbrepo-data-db
+    hostname: data-db
+    image: docker.io/bitnami/mariadb:${MARIADB_VERSION}
+    volumes:
+      - data-db-data:/var/lib/mysql
+      - ./config/1_grant-user.sql:/docker-entrypoint-initdb.d/1_grant-user.sql
+    ports:
+      - "3307:3306"
+    environment:
+      MARIADB_EXTRA_FLAGS: "${DATA_DB_EXTRA_FLAGS:---max_connections=155 --max-statement-time=60}"
+      MARIADB_PASSWORD: "${READONLY_PASSWORD:-readonly}"
+      MARIADB_ROOT_PASSWORD: "${DATA_DB_PASSWORD:-dbrepo}"
+      MARIADB_USER: "${READONLY_USERNAME:-readonly}"
+    healthcheck:
+      test: /opt/bitnami/scripts/mariadb/healthcheck.sh --connect --innodb_initialized
+      <<: *healthcheck-params
+    deploy:
+      <<: *resources-micro-hm
+    platform: linux/amd64
+    logging:
+      driver: json-file
+
+  dbrepo-auth-db:
+    restart: "no"
+    container_name: dbrepo-auth-db
+    hostname: auth-db
+    image: docker.io/bitnami/postgresql:${POSTGRES_VERSION}
+    volumes:
+      - auth-db-data:/bitnami/postgresql
+    environment:
+      POSTGRESQL_DATABASE: "${AUTH_DB_NAME:-keycloak}"
+      POSTGRESQL_USERNAME: "${AUTH_DB_USERNAME:-keycloak}"
+      POSTGRESQL_PASSWORD: "${AUTH_DB_PASSWORD:-dbrepo}"
+      PGPASSWORD: "${AUTH_DB_PASSWORD:-dbrepo}"
+    healthcheck:
+      test: "psql -U ${AUTH_DB_USERNAME:-keycloak} -h 127.0.0.1 -p 5432 -d ${AUTH_DB_NAME:-keycloak} -c 'select version();'"
+      <<: *healthcheck-params
+    deploy:
+      <<: *resources-micro
+    platform: linux/amd64
+    logging:
+      driver: json-file
+
+  dbrepo-auth-service:
+    restart: "no"
+    container_name: dbrepo-auth-service
+    hostname: auth-service
+    image: docker.io/bitnami/keycloak:${KEYCLOAK_VERSION}
+    volumes:
+      - ./config/import-realms.sh:/docker-entrypoint-initdb.d/import-realms.sh
+      - ./config/master-realm.json:/opt/keycloak/data/import/master-realm.json
+      - ./config/dbrepo-realm.json:/opt/keycloak/data/import/dbrepo-realm.json
+      - ./config/create-event-listener.jar:/opt/bitnami/keycloak/providers/create-event-listener.jar
+    ports:
+      - "8080:8080"
+    environment:
+      LDAP_ROOT: "${IDENTITY_SERVICE_ROOT:-dc=dbrepo,dc=at}"
+      LDAP_ADMIN_DN: "${IDENTITY_SERVICE_ADMIN_DN:-cn=admin,dc=dbrepo,dc=at}"
+      LDAP_ADMIN_PASSWORD: "${IDENTITY_SERVICE_ADMIN_PASSWORD:-admin}"
+      KEYCLOAK_ENABLE_HEALTH_ENDPOINTS: "true"
+      KEYCLOAK_ENABLE_HTTPS: "false"
+      KEYCLOAK_ENABLE_STATISTICS: "true"
+      KEYCLOAK_DATABASE_HOST: "auth-db"
+      KEYCLOAK_DATABASE_NAME: "${AUTH_DB_NAME:-keycloak}"
+      KEYCLOAK_DATABASE_USER: "${AUTH_DB_USERNAME:-keycloak}"
+      KEYCLOAK_DATABASE_PASSWORD: "${AUTH_DB_PASSWORD:-dbrepo}"
+      KEYCLOAK_HOSTNAME: "${BASE_URL:-http://localhost}"
+      KEYCLOAK_HOSTNAME_ADMIN: "http://localhost:8080"
+      METADATA_SERVICE_ENDPOINT: "${METADATA_SERVICE_ENDPOINT:-http://metadata-service:8080}"
+      SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}"
+      SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}"
+    healthcheck:
+      test: curl -fsS localhost:8080/realms/master
+      <<: *healthcheck-params
+    deploy:
+      <<: *resources-medium
+    platform: linux/amd64
+    depends_on:
+      dbrepo-identity-service:
+        condition: service_healthy
+      dbrepo-auth-db:
+        condition: service_healthy
+    logging:
+      driver: json-file
+
+  dbrepo-auth-service-init:
+    init: true
+    restart: "no"
+    container_name: dbrepo-auth-service-init
+    image: registry.datalab.tuwien.ac.at/dbrepo/auth-service-init:1.8.1
+    environment:
+      AUTH_SERVICE_ENDPOINT: ${AUTH_SERVICE_ENDPOINT:-http://auth-service:8080}
+      METADATA_DB: "${METADATA_DB:-dbrepo}"
+      METADATA_DB_PASSWORD: "${METADATA_DB_PASSWORD:-dbrepo}"
+      METADATA_USERNAME: "root"
+      READONLY_USERNAME: "${READONLY_USERNAME:-readonly}"
+      SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}"
+      SYSTEM_PASSWORD: ${SYSTEM_PASSWORD:-admin}
+    deploy:
+      <<: *resources-nano
+    platform: linux/amd64
+    depends_on:
+      dbrepo-auth-service:
+        condition: service_healthy
+      dbrepo-gateway-service:
+        condition: service_healthy
+      dbrepo-metadata-db:
+        condition: service_healthy
+    logging:
+      driver: json-file
+
+  dbrepo-metadata-service:
+    restart: "no"
+    container_name: dbrepo-metadata-service
+    hostname: metadata-service
+    image: registry.datalab.tuwien.ac.at/dbrepo/metadata-service:1.8.1
+    environment:
+      ADMIN_EMAIL: "${ADMIN_EMAIL:-noreply@localhost}"
+      ANALYSE_SERVICE_ENDPOINT: "${ANALYSE_SERVICE_ENDPOINT:-http://analyse-service:8080}"
+      AUTH_SERVICE_CLIENT: ${AUTH_SERVICE_CLIENT:-dbrepo-client}
+      AUTH_SERVICE_CLIENT_SECRET: ${AUTH_SERVICE_CLIENT_SECRET:-MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG}
+      AUTH_SERVICE_ENDPOINT: ${AUTH_SERVICE_ENDPOINT:-http://auth-service:8080}
+      BASE_URL: "${BASE_URL:-http://localhost}"
+      BROKER_EXCHANGE_NAME: ${BROKER_EXCHANGE_NAME:-dbrepo}
+      BROKER_QUEUE_NAME: ${BROKER_QUEUE_NAME:-dbrepo}
+      BROKER_HOST: "${BROKER_ENDPOINT:-broker-service}"
+      BROKER_PASSWORD: ${SYSTEM_PASSWORD:-admin}
+      BROKER_PORT: ${BROKER_PORT:-5672}
+      BROKER_SERVICE_ENDPOINT: ${BROKER_SERVICE_ENDPOINT:-http://broker-service:15672}
+      BROKER_USERNAME: ${SYSTEM_USERNAME:-admin}
+      BROKER_VIRTUALHOST: "${BROKER_VIRTUALHOST:-dbrepo}"
+      CROSSREF_ENDPOINT: "${CROSSREF_ENDPOINT:-http://data.crossref.org}"
+      DASHBOARD_SERVICE_ENDPOINT: "${DASHBOARD_SERVICE_ENDPOINT:-http://dashboard-service:8080}"
+      DATA_SERVICE_ENDPOINT: ${DATA_SERVICE_ENDPOINT:-http://data-service:8080}
+      DELETED_RECORD: "${DELETED_RECORD:-persistent}"
+      GRANULARITY: "${GRANULARITY:-YYYY-MM-DDThh:mm:ssZ}"
+      JWT_PUBKEY: "${JWT_PUBKEY:-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB}"
+      LOG_LEVEL: ${LOG_LEVEL:-info}
+      METADATA_DB: "${METADATA_DB:-dbrepo}"
+      METADATA_DB_PASSWORD: "${METADATA_DB_PASSWORD:-dbrepo}"
+      METADATA_HOST: "${METADATA_HOST:-metadata-db}"
+      METADATA_JDBC_EXTRA_ARGS: "${METADATA_JDBC_EXTRA_ARGS:-}"
+      METADATA_PORT: "${METADATA_PORT:-3306}"
+      METADATA_USERNAME: root
+      REPOSITORY_NAME: "${REPOSITORY_NAME:-Database Repository}"
+      ROR_ENDPOINT: "${ROR_ENDPOINT:-https://api.ror.org}"
+      SEARCH_SERVICE_ENDPOINT: "${SEARCH_SERVICE_ENDPOINT:-http://search-service:8080}"
+      S3_ACCESS_KEY_ID: "${S3_ACCESS_KEY_ID:-seaweedfsadmin}"
+      S3_BUCKET: "${S3_BUCKET:-dbrepo}"
+      S3_ENDPOINT: "${S3_ENDPOINT:-http://storage-service:9000}"
+      S3_SECRET_ACCESS_KEY: "${S3_SECRET_ACCESS_KEY:-seaweedfsadmin}"
+      SPARQL_CONNECTION_TIMEOUT: "${SPARQL_CONNECTION_TIMEOUT:-10000}"
+      SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}"
+      SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}"
+    healthcheck:
+      test: curl -sSL localhost:8080/actuator/health/liveness | grep 'UP' || exit 1
+      <<: *healthcheck-params
+    deploy:
+      <<: *resources-small
+    platform: linux/amd64
+    depends_on:
+      dbrepo-auth-service:
+        condition: service_healthy
+      dbrepo-broker-service:
+        condition: service_healthy
+      dbrepo-data-service:
+        condition: service_healthy
+      dbrepo-dashboard-service:
+        condition: service_healthy
+      dbrepo-search-service:
+        condition: service_healthy
+      dbrepo-metadata-db:
+        condition: service_healthy
+    logging:
+      driver: json-file
+
+  dbrepo-analyse-service:
+    restart: "no"
+    container_name: dbrepo-analyse-service
+    hostname: analyse-service
+    image: registry.datalab.tuwien.ac.at/dbrepo/analyse-service:1.8.1
+    environment:
+      AUTH_SERVICE_CLIENT: ${AUTH_SERVICE_CLIENT:-dbrepo-client}
+      AUTH_SERVICE_CLIENT_SECRET: ${AUTH_SERVICE_CLIENT:-MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG}
+      AUTH_SERVICE_ENDPOINT: ${AUTH_SERVICE_ENDPOINT:-http://auth-service:8080}
+      JWT_PUBKEY: "${JWT_PUBKEY:-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB}"
+      S3_ACCESS_KEY_ID: "${S3_ACCESS_KEY_ID:-seaweedfsadmin}"
+      S3_BUCKET: "${S3_BUCKET:-dbrepo}"
+      S3_ENDPOINT: "${S3_ENDPOINT:-storage-service:9000}"
+      S3_PROTO: "${S3_PROTO:-http}"
+      S3_SECRET_ACCESS_KEY: "${S3_SECRET_ACCESS_KEY:-seaweedfsadmin}"
+      METADATA_SERVICE_ENDPOINT: ${METADATA_SERVICE_ENDPOINT:-http://metadata-service:8080}
+      SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}"
+      SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}"
+    healthcheck:
+      test: curl -sSL localhost:8080/health | grep 'UP' || exit 1
+      <<: *healthcheck-params
+    deploy:
+      <<: *resources-micro
+    platform: linux/amd64
+    logging:
+      driver: json-file
+
+  dbrepo-broker-service:
+    restart: "no"
+    container_name: dbrepo-broker-service
+    hostname: broker-service
+    image: docker.io/bitnami/rabbitmq:${RABBITMQ_VERSION}
+    ports:
+      - 5672:5672
+      - 1883:1883
+    volumes:
+      - ./config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf
+      - ./config/advanced.config:/etc/rabbitmq/advanced.config
+      - ./config/enabled_plugins:/etc/rabbitmq/enabled_plugins
+      - ./config/definitions.json:/app/definitions.json
+      - broker-service-data:/bitnami/rabbitmq/mnesia
+    environment:
+      RABBITMQ_FEATURE_FLAGS: mqtt_v5
+    depends_on:
+      dbrepo-identity-service:
+        condition: service_healthy
+    healthcheck:
+      test: rabbitmq-diagnostics -q is_running | grep 'is fully booted and running'
+      <<: *healthcheck-params
+    deploy:
+      <<: *resources-micro
+    platform: linux/amd64
+    logging:
+      driver: json-file
+
+  dbrepo-search-db:
+    restart: "no"
+    container_name: dbrepo-search-db
+    hostname: search-db
+    image: docker.io/bitnami/opensearch:${OPENSEARCH_VERSION}
+    volumes:
+      - search-db-data:/bitnami/opensearch/data
+    ports:
+      - "9200:9200"
+    healthcheck:
+      test: curl -sSL 127.0.0.1:9200
+      <<: *healthcheck-params
+    deploy:
+      <<: *resources-medium
+    platform: linux/amd64
+    logging:
+      driver: json-file
+
+  dbrepo-search-service:
+    restart: "no"
+    container_name: dbrepo-search-service
+    hostname: search-service
+    image: registry.datalab.tuwien.ac.at/dbrepo/search-service:1.8.1
+    environment:
+      AUTH_SERVICE_CLIENT: ${AUTH_SERVICE_CLIENT:-dbrepo-client}
+      AUTH_SERVICE_CLIENT_SECRET: ${AUTH_SERVICE_CLIENT_SECRET:-MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG}
+      AUTH_SERVICE_ENDPOINT: ${AUTH_SERVICE_ENDPOINT:-http://auth-service:8080}
+      COLLECTION: ${COLLECTION:-['database','table','column','identifier','unit','concept','user','view']}
+      LOG_LEVEL: ${LOG_LEVEL:-info}
+      METADATA_SERVICE_ENDPOINT: ${METADATA_SERVICE_ENDPOINT:-http://metadata-service:8080}
+      OPENSEARCH_HOST: ${OPENSEARCH_HOST:-search-db}
+      OPENSEARCH_PORT: ${OPENSEARCH_PORT:-9200}
+      SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}"
+      SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}"
+    healthcheck:
+      test: curl -sSL localhost:8080/health | grep 'UP' || exit 1
+      <<: *healthcheck-params
+    deploy:
+      <<: *resources-micro
+    platform: linux/amd64
+    logging:
+      driver: json-file
+
+  dbrepo-ui:
+    restart: "no"
+    container_name: dbrepo-ui
+    hostname: ui
+    image: registry.datalab.tuwien.ac.at/dbrepo/ui:1.8.1
+    environment:
+      NUXT_PUBLIC_API_CLIENT: "${BASE_URL:-http://localhost}"
+      NUXT_PUBLIC_API_SERVER: "${BASE_URL:-http://gateway-service}"
+      NUXT_PUBLIC_DASHBOARD_URL: "${BASE_URL:-http://localhost}/dashboard"
+      NUXT_OIDC_PROVIDERS_KEYCLOAK_BASE_URL: "${BASE_URL:-http://localhost}/realms/dbrepo"
+      NUXT_OIDC_PROVIDERS_KEYCLOAK_AUTHORIZATION_URL: "${BASE_URL:-http://localhost}/realms/dbrepo/protocol/openid-connect/auth"
+      NUXT_OIDC_PROVIDERS_KEYCLOAK_CLIENT_ID: "${AUTH_SERVICE_CLIENT:-dbrepo-client}"
+      NUXT_OIDC_PROVIDERS_KEYCLOAK_CLIENT_SECRET: "${AUTH_SERVICE_CLIENT:-MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG}"
+      NUXT_OIDC_PROVIDERS_KEYCLOAK_LOGOUT_REDIRECT_URI: "${BASE_URL:-http://localhost}"
+      NUXT_OIDC_PROVIDERS_KEYCLOAK_LOGOUT_URL: "${BASE_URL:-http://localhost}/realms/dbrepo/protocol/openid-connect/logout"
+      NUXT_OIDC_PROVIDERS_KEYCLOAK_REDIRECT_URI: "${BASE_URL:-http://localhost}/auth/keycloak/callback"
+      NUXT_OIDC_PROVIDERS_KEYCLOAK_TOKEN_URL: "${BASE_URL:-http://localhost}/realms/dbrepo/protocol/openid-connect/token"
+      NUXT_OIDC_PROVIDERS_KEYCLOAK_USER_INFO_URL: "${BASE_URL:-http://localhost}/realms/dbrepo/protocol/openid-connect/userinfo"
+    healthcheck:
+      test: curl -fsSL 127.0.0.1:3000 && curl -fsSL 127.0.0.1:3000/health
+      <<: *healthcheck-params
+    deploy:
+      <<: *resources-micro
+    platform: linux/amd64
+    depends_on:
+      dbrepo-search-service:
+        condition: service_healthy
+    extra_hosts:
+      - "localhost:host-gateway"
+    logging:
+      driver: json-file
+
+  dbrepo-gateway-service:
+    restart: "no"
+    container_name: dbrepo-gateway-service
+    hostname: gateway-service
+    image: docker.io/nginx:${NGINX_VERSION}
+    ports:
+      - "80:8080"
+    volumes:
+      - ./config/dbrepo.conf:/etc/nginx/conf.d/default.conf
+    healthcheck:
+      test: lsof -i TCP:80 || exit 1
+      <<: *healthcheck-params
+    deploy:
+      <<: *resources-nano
+    platform: linux/amd64
+    depends_on:
+      dbrepo-analyse-service:
+        condition: service_healthy
+      dbrepo-broker-service:
+        condition: service_healthy
+      dbrepo-metadata-service:
+        condition: service_healthy
+      dbrepo-search-db:
+        condition: service_healthy
+      dbrepo-dashboard-service:
+        condition: service_healthy
+      dbrepo-dashboard-ui:
+        condition: service_healthy
+      dbrepo-ui:
+        condition: service_healthy
+    logging:
+      driver: json-file
+
+  dbrepo-identity-service:
+    restart: "no"
+    container_name: dbrepo-identity-service
+    hostname: identity-service
+    image: bitnami/openldap:2.6.8-debian-12-r1
+    environment:
+      LDAP_ADMIN_USERNAME: "${IDENTITY_SERVICE_ADMIN_USERNAME:-admin}"
+      LDAP_ADMIN_PASSWORD: "${IDENTITY_SERVICE_ADMIN_PASSWORD:-admin}"
+      LDAP_USERS: "${SYSTEM_USERNAME:-admin},${READONLY_USERNAME:-readonly}"
+      LDAP_PASSWORDS: "${SYSTEM_PASSWORD:-admin},${READONLY_PASSWORD:-readonly}"
+      LDAP_GROUP: "${ADMIN_GROUP:-system}"
+      LDAP_ROOT: "${IDENTITY_SERVICE_ROOT:-dc=dbrepo,dc=at}"
+      LDAP_ADMIN_DN: "${IDENTITY_SERVICE_ADMIN_DN:-cn=admin,dc=dbrepo,dc=at}"
+    volumes:
+      - identity-service-data:/bitnami/openldap
+    healthcheck:
+      test: "ldapwhoami -H ldap://localhost:1389 -D ${IDENTITY_SERVICE_ADMIN_DN:-cn=admin,dc=dbrepo,dc=at} -w ${IDENTITY_SERVICE_ADMIN_PASSWORD:-admin} || exit 1"
+      <<: *healthcheck-params
+    deploy:
+      <<: *resources-nano
+    platform: linux/amd64
+    logging:
+      driver: json-file
+
+  dbrepo-search-service-init:
+    restart: "no"
+    init: true
+    container_name: dbrepo-search-service-init
+    hostname: search-service-init
+    image: registry.datalab.tuwien.ac.at/dbrepo/search-service-init:1.8.1
+    environment:
+      LOG_LEVEL: ${LOG_LEVEL:-info}
+      METADATA_SERVICE_ENDPOINT: ${METADATA_SERVICE_ENDPOINT:-http://metadata-service:8080}
+      OPENSEARCH_HOST: ${OPENSEARCH_HOST:-search-db}
+      OPENSEARCH_PORT: ${OPENSEARCH_PORT:-9200}
+      SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}"
+      SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}"
+    deploy:
+      <<: *resources-nano
+    platform: linux/amd64
+    depends_on:
+      dbrepo-search-db:
+        condition: service_healthy
+      dbrepo-metadata-service:
+        condition: service_healthy
+    logging:
+      driver: json-file
+
+  dbrepo-dashboard-service-init:
+    restart: "no"
+    init: true
+    container_name: dbrepo-dashboard-service-init
+    hostname: search-dashboard-init
+    image: registry.datalab.tuwien.ac.at/dbrepo/dashboard-service-init:1.8.1
+    environment:
+      LOG_LEVEL: ${LOG_LEVEL:-info}
+      DASHBOARD_UI_ENDPOINT: "${DASHBOARD_UI_ENDPOINT:-http://dashboard-ui:3000}"
+      METADATA_SERVICE_ENDPOINT: ${METADATA_SERVICE_ENDPOINT:-http://metadata-service:8080}
+      SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}"
+      SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}"
+    deploy:
+      <<: *resources-nano
+    platform: linux/amd64
+    depends_on:
+      dbrepo-dashboard-ui:
+        condition: service_healthy
+      dbrepo-metadata-service:
+        condition: service_healthy
+    logging:
+      driver: json-file
+
+  dbrepo-storage-service:
+    restart: "no"
+    container_name: dbrepo-storage-service
+    hostname: storage-service
+    image: docker.io/bitnami/seaweedfs:${SEAWEEDFS_VERSION}
+    command: [ "server", "-s3", "-s3.port=9000", "-s3.config=/app/s3_config.json", "-metricsPort=9090" ]
+    volumes:
+      - ./config/s3_config.json:/app/s3_config.json
+    ports:
+      - "9000:9000"
+      - "8888:8888"
+    healthcheck:
+      test: echo "cluster.check" | weed shell | grep "checking master.*ok" || exit 1
+      <<: *healthcheck-params
+    deploy:
+      <<: *resources-nano
+    platform: linux/amd64
+    logging:
+      driver: json-file
+
+  dbrepo-metric-db:
+    restart: "no"
+    container_name: dbrepo-metric-db
+    hostname: metric-db
+    image: docker.io/bitnami/prometheus:${PROMETHEUS_VERSION}
+    volumes:
+      - ./config/prometheus.yml:/etc/prometheus/prometheus.yml
+      - metric-db-data:/opt/bitnami/prometheus/data
+    healthcheck:
+      test: promtool check healthy
+      <<: *healthcheck-params
+    deploy:
+      <<: *resources-nano
+    platform: linux/amd64
+    logging:
+      driver: json-file
+
+  dbrepo-storage-service-init:
+    restart: "no"
+    init: true
+    container_name: dbrepo-storage-service-init
+    hostname: storage-service-init
+    image: registry.datalab.tuwien.ac.at/dbrepo/storage-service-init:1.8.1
+    environment:
+      S3_ACCESS_KEY_ID: ${S3_ACCESS_KEY_ID:-seaweedfsadmin}
+      S3_BUCKET: "${S3_BUCKET:-dbrepo}"
+      S3_SECRET_ACCESS_KEY: ${S3_SECRET_ACCESS_KEY:-seaweedfsadmin}
+      STORAGE_ENDPOINT: ${STORAGE_ENDPOINT:-http://storage-service:9000}
+    deploy:
+      <<: *resources-nano
+    platform: linux/amd64
+    depends_on:
+      dbrepo-storage-service:
+        condition: service_healthy
+    logging:
+      driver: json-file
+
+  dbrepo-data-service:
+    restart: "no"
+    container_name: dbrepo-data-service
+    hostname: data-service
+    image: registry.datalab.tuwien.ac.at/dbrepo/data-service:1.8.1
+    environment:
+      AUTH_SERVICE_CLIENT: "${AUTH_SERVICE_CLIENT:-dbrepo-client}"
+      AUTH_SERVICE_CLIENT_SECRET: "${AUTH_SERVICE_CLIENT:-MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG}"
+      AUTH_SERVICE_ENDPOINT: "${AUTH_SERVICE_ENDPOINT:-http://auth-service:8080}"
+      BASE_URL: "${BASE_URL:-http://localhost}"
+      BROKER_EXCHANGE_NAME: "${BROKER_EXCHANGE_NAME:-dbrepo}"
+      BROKER_QUEUE_NAME: "${BROKER_QUEUE_NAME:-dbrepo}"
+      BROKER_HOST: "${BROKER_ENDPOINT:-broker-service}"
+      BROKER_PASSWORD: "${SYSTEM_PASSWORD:-admin}"
+      BROKER_PORT: ${BROKER_PORT:-5672}
+      BROKER_SERVICE_ENDPOINT: "${BROKER_SERVICE_ENDPOINT:-http://broker-service:15672}"
+      BROKER_USERNAME: "${SYSTEM_USERNAME:-admin}"
+      BROKER_VIRTUALHOST: "${BROKER_VIRTUALHOST:-dbrepo}"
+      CONNECTION_TIMEOUT: ${CONNECTION_TIMEOUT:-60000}
+      COMPUTE_SERVICE_ENDPOINT: "${COMPUTE_SERVICE_ENDPOINT:-local[2]}"
+      EXCHANGE_NAME: "${EXCHANGE_NAME:-dbrepo}"
+      METADATA_SERVICE_ENDPOINT: "${METADATA_SERVICE_ENDPOINT:-http://metadata-service:8080}"
+      GRANT_DEFAULT_READ: "${GRANT_DEFAULT_READ:-SELECT}"
+      GRANT_DEFAULT_WRITE: "${GRANT_DEFAULT_WRITE:-SELECT, CREATE, CREATE VIEW, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, INDEX, TRIGGER, INSERT, UPDATE, DELETE}"
+      JWT_PUBKEY: "${JWT_PUBKEY:-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB}"
+      LOG_LEVEL: ${LOG_LEVEL:-info}
+      QUEUE_NAME: ${QUEUE_NAME:-dbrepo}
+      REQUEUE_REJECTED: ${REQUEUE_REJECTED:-false}
+      ROUTING_KEY: "${ROUTING_KEY:-dbrepo.#}"
+      S3_ACCESS_KEY_ID: "${S3_ACCESS_KEY_ID:-seaweedfsadmin}"
+      S3_BUCKET: "${S3_BUCKET:-dbrepo}"
+      S3_ENDPOINT: "${S3_ENDPOINT:-http://storage-service:9000}"
+      S3_SECRET_ACCESS_KEY: "${S3_SECRET_ACCESS_KEY:-seaweedfsadmin}"
+      SPARK_USER: "${COMPUTE_SERVICE_USERNAME:-spark}"
+      SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}"
+      SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}"
+    healthcheck:
+      test: curl -sSL localhost:8080/actuator/health/liveness | grep 'UP' || exit 1
+      <<: *healthcheck-params
+    deploy:
+      <<: *resources-large
+    platform: linux/amd64
+    depends_on:
+      dbrepo-data-db:
+        condition: service_healthy
+    logging:
+      driver: json-file
+
+  dbrepo-dashboard-ui:
+    restart: "no"
+    container_name: dbrepo-dashboard-ui
+    hostname: dashboard-ui
+    image: registry.datalab.tuwien.ac.at/dbrepo/dashboard-ui:1.8.1
+    ports:
+      - "3000:3000"
+    volumes:
+      - dashboard-ui-data:/opt/bitnami/grafana/data
+    environment:
+      BASE_URL: "${BASE_URL:-http://localhost}"
+      GF_SERVER_ROOT_URL: http://dashboard-ui:3000/dashboard/
+      GF_INSTALL_PLUGINS: "yesoreyeram-infinity-datasource"
+      GF_SECURITY_DISABLE_INITIAL_ADMIN_CREATION: "true"
+      LDAP_ADMIN_USERNAME: "${IDENTITY_SERVICE_ADMIN_USERNAME:-admin}"
+      LDAP_ADMIN_PASSWORD: "${IDENTITY_SERVICE_ADMIN_PASSWORD:-admin}"
+      LDAP_ROOT: "${IDENTITY_SERVICE_ROOT:-dc=dbrepo,dc=at}"
+    healthcheck:
+      test: curl -fsSL --head 127.0.0.1:3000
+      <<: *healthcheck-params
+    deploy:
+      <<: *resources-nano
+    platform: linux/amd64
+    extra_hosts:
+      - "localhost:host-gateway"
+    logging:
+      driver: json-file
+
+  dbrepo-dashboard-service:
+    restart: "no"
+    container_name: dbrepo-dashboard-service
+    hostname: dashboard-service
+    image: registry.datalab.tuwien.ac.at/dbrepo/dashboard-service:1.8.1
+    ports:
+      - "4070:8080"
+    environment:
+      AUTH_SERVICE_ENDPOINT: ${AUTH_SERVICE_ENDPOINT:-http://auth-service:8080}
+      BASE_URL: "${BASE_URL:-http://localhost}"
+      DASHBOARD_UI_ENDPOINT: "${DASHBOARD_UI_ENDPOINT:-http://dashboard-ui:3000}"
+      SYSTEM_USERNAME: "${SYSTEM_USERNAME:-admin}"
+      SYSTEM_PASSWORD: "${SYSTEM_PASSWORD:-admin}"
+    healthcheck:
+      test: curl -fsSL --head 127.0.0.1:8080/health
+      <<: *healthcheck-params
+    deploy:
+      <<: *resources-micro
+    platform: linux/amd64
+    depends_on:
+      dbrepo-dashboard-ui:
+        condition: service_healthy
+    logging:
+      driver: json-file
diff --git a/.gitignore b/.gitignore
index c3dd8341c5..1d310a8893 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,6 @@ target/
 !**/src/main/**/target/
 !**/src/test/**/target/
 
-.docker/
 # generated
 ready
 schema.xsd
@@ -21,7 +20,6 @@ tmp.yaml
 .docs/.swagger/dist/
 .docs/.swagger/site/
 site/
-final/
 
 .$*
 dbrepo-somapper/
@@ -30,9 +28,6 @@ dbrepo-somapper/
 .pytest_cache/
 __pycache__/
 
-# docs
-site/
-
 # Previous directories
 fda-analyse-service/
 fda-authentication-service/
@@ -53,9 +48,6 @@ fda-ui/
 # demo
 .demo
 
-# Generated
-ready
-
 # Certificates
 *.crt
 *.p12
@@ -106,7 +98,6 @@ table.md
 /dist/
 /nbdist/
 /.nb-gradle/
-build/
 !**/src/main/**/build/
 !**/src/test/**/build/
 
-- 
GitLab