From 12d0322355028e92c74befeb091f1ebcb1b0977a Mon Sep 17 00:00:00 2001 From: Rubel <rubel.mozumder@outlook.com> Date: Wed, 7 Feb 2024 15:09:43 +0100 Subject: [PATCH] Interactive rebase --- .gitmodules | 3 + docker/sts/OasisSetup/PalmasLab/.dockerignore | 9 + .../OasisSetup/PalmasLab/configs/nginx.conf | 83 +++++++ .../OasisSetup/PalmasLab/configs/nomad.yaml | 26 +++ .../OasisSetup/PalmasLab/docker-compose.yaml | 221 ++++++++++++++++++ .../PalmasLab/dockerfiles/Dockerfile | 27 +++ docker/sts/OasisSetup/pynxtools-stm | 1 + 7 files changed, 370 insertions(+) create mode 100644 docker/sts/OasisSetup/PalmasLab/.dockerignore create mode 100644 docker/sts/OasisSetup/PalmasLab/configs/nginx.conf create mode 100644 docker/sts/OasisSetup/PalmasLab/configs/nomad.yaml create mode 100644 docker/sts/OasisSetup/PalmasLab/docker-compose.yaml create mode 100644 docker/sts/OasisSetup/PalmasLab/dockerfiles/Dockerfile create mode 160000 docker/sts/OasisSetup/pynxtools-stm diff --git a/.gitmodules b/.gitmodules index 95ffce7..2d48c99 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "docker/webtop/north-guacamole-client"] path = docker/webtop/north-guacamole-client url = https://github.com/nomad-coe/north-guacamole-client.git +[submodule "docker/sts/OasisSetup/pynxtools-stm"] + path = docker/sts/OasisSetup/pynxtools-stm + url = https://github.com/FAIRmat-NFDI/pynxtools-stm.git diff --git a/docker/sts/OasisSetup/PalmasLab/.dockerignore b/docker/sts/OasisSetup/PalmasLab/.dockerignore new file mode 100644 index 0000000..379ebb7 --- /dev/null +++ b/docker/sts/OasisSetup/PalmasLab/.dockerignore @@ -0,0 +1,9 @@ +.gitignore +.git +.pytest_cache +__pycache__ +test +.vscode +.yarn +.cache + diff --git a/docker/sts/OasisSetup/PalmasLab/configs/nginx.conf b/docker/sts/OasisSetup/PalmasLab/configs/nginx.conf new file mode 100644 index 0000000..74084c9 --- /dev/null +++ b/docker/sts/OasisSetup/PalmasLab/configs/nginx.conf @@ -0,0 +1,83 @@ +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} + +server { + listen 80; + server_name localhost; + proxy_set_header Host $host; + + gzip_min_length 1000; + gzip_buffers 4 8k; + gzip_http_version 1.0; + gzip_disable "msie6"; + gzip_vary on; + gzip on; + gzip_proxied any; + gzip_types + text/css + text/javascript + text/xml + text/plain + application/javascript + application/x-javascript + application/json; + + location / { + proxy_pass http://app:8000; + } + + location ~ /nomad-oasis\/?(gui)?$ { + rewrite ^ /nomad-oasis/gui/ permanent; + } + + location /nomad-oasis/gui/ { + proxy_intercept_errors on; + error_page 404 = @redirect_to_index; + proxy_pass http://app:8000; + } + + location @redirect_to_index { + rewrite ^ /nomad-oasis/gui/index.html break; + proxy_pass http://app:8000; + } + + location ~ \/gui\/(service-worker\.js|meta\.json)$ { + add_header Last-Modified $date_gmt; + add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0'; + if_modified_since off; + expires off; + etag off; + proxy_pass http://app:8000; + } + + location ~ /api/v1/uploads(/?$|.*/raw|.*/bundle?$) { + client_max_body_size 35g; + proxy_request_buffering off; + proxy_pass http://app:8000; + } + + location ~ /api/v1/.*/download { + proxy_buffering off; + proxy_pass http://app:8000; + } + + location /nomad-oasis/north/ { + client_max_body_size 500m; + proxy_pass http://north:9000; + + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + # websocket headers + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header X-Scheme $scheme; + + proxy_buffering off; + } +} + diff --git a/docker/sts/OasisSetup/PalmasLab/configs/nomad.yaml b/docker/sts/OasisSetup/PalmasLab/configs/nomad.yaml new file mode 100644 index 0000000..a031140 --- /dev/null +++ b/docker/sts/OasisSetup/PalmasLab/configs/nomad.yaml @@ -0,0 +1,26 @@ +services: + api_host: 'localhost' + api_base_path: '/nomad-oasis' + upload_limit: 10000 + +oasis: + is_oasis: true + uses_central_user_management: true + +north: + jupyterhub_crypt_key: '978bfb2e13a8448a253c629d8dd84ff89587f30e635b753153960930cad9d36d' + +meta: + deployment: 'oasis' + deployment_url: 'https://my-oasis.org/api' + maintainer_email: 'me@my-oasis.org' + +logstash: + enabled: false + +mongo: + db_name: nomad_oasis_v1 + +elastic: + entries_index: nomad_oasis_entries_v1 + materials_index: nomad_oasis_materials_v1 diff --git a/docker/sts/OasisSetup/PalmasLab/docker-compose.yaml b/docker/sts/OasisSetup/PalmasLab/docker-compose.yaml new file mode 100644 index 0000000..6c3a772 --- /dev/null +++ b/docker/sts/OasisSetup/PalmasLab/docker-compose.yaml @@ -0,0 +1,221 @@ +version: "3" +## ++++++++++++++++ +# Note +# The image `demo-h5web-in-searchresults_sts_palma_lab_l`has been created (using) locally from +# Nomad-fair gitlab branch demo-h5web-in-searchresults_sts_palma_lab +## ++++++++++++++++ +services: + # broker for celery + rabbitmq: + restart: unless-stopped + image: rabbitmq:3.11.5 + container_name: nomad_oasis_rabbitmq + environment: + - RABBITMQ_ERLANG_COOKIE=SWQOKODSQALRPCLNMEQG + - RABBITMQ_DEFAULT_USER=rabbitmq + - RABBITMQ_DEFAULT_PASS=rabbitmq + - RABBITMQ_DEFAULT_VHOST=/ + volumes: + - rabbitmq:/var/lib/rabbitmq + healthcheck: + test: ["CMD", "rabbitmq-diagnostics", "--silent", "--quiet", "ping"] + interval: 10s + timeout: 10s + retries: 30 + start_period: 10s + + # the search engine + elastic: + restart: unless-stopped + image: docker.elastic.co/elasticsearch/elasticsearch:7.17.1 + container_name: nomad_oasis_elastic + environment: + - ES_JAVA_OPTS=-Xms512m -Xmx512m + - discovery.type=single-node + volumes: + - elastic:/usr/share/elasticsearch/data + healthcheck: + test: + - "CMD" + - "curl" + - "--fail" + - "--silent" + - "http://elastic:9200/_cat/health" + interval: 10s + timeout: 10s + retries: 30 + start_period: 60s + + # the user data db + mongo: + restart: unless-stopped + image: mongo:5.0.6 + container_name: nomad_oasis_mongo + environment: + - MONGO_DATA_DIR=/data/db + - MONGO_LOG_DIR=/dev/null + volumes: + - mongo:/data/db + - ./.volumes/mongo:/backup + command: mongod --logpath=/dev/null # --quiet + healthcheck: + test: + - "CMD" + - "mongo" + - "mongo:27017/test" + - "--quiet" + - "--eval" + - "'db.runCommand({ping:1}).ok'" + interval: 10s + timeout: 10s + retries: 30 + start_period: 10s + + # nomad worker (processing) + worker: + restart: unless-stopped + image: gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-fair:demo-h5web-in-searchresults_sts_palma_lab_l + container_name: nomad_oasis_worker + environment: + NOMAD_SERVICE: nomad_oasis_worker + NOMAD_RABBITMQ_HOST: rabbitmq + NOMAD_ELASTIC_HOST: elastic + NOMAD_MONGO_HOST: mongo + NOMAD_LOGSTASH_HOST: logtransfer + depends_on: + rabbitmq: + condition: service_healthy + elastic: + condition: service_healthy + mongo: + condition: service_healthy + volumes: + - ./configs/nomad.yaml:/app/nomad.yaml + - ./.volumes/fs:/app/.volumes/fs + command: python -m celery -A nomad.processing worker -l info -Q celery + + # nomad app (api + proxy) + app: + restart: unless-stopped + image: gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-fair:demo-h5web-in-searchresults_sts_palma_lab_l + container_name: nomad_oasis_app + environment: + NOMAD_SERVICE: nomad_oasis_app + NOMAD_SERVICES_API_PORT: 80 + NOMAD_FS_EXTERNAL_WORKING_DIRECTORY: "$PWD" + NOMAD_RABBITMQ_HOST: rabbitmq + NOMAD_ELASTIC_HOST: elastic + NOMAD_MONGO_HOST: mongo + NOMAD_LOGSTASH_HOST: logtransfer + NOMAD_NORTH_HUB_HOST: north + depends_on: + rabbitmq: + condition: service_healthy + elastic: + condition: service_healthy + mongo: + condition: service_healthy + north: + condition: service_started + volumes: + - ./configs/nomad.yaml:/app/nomad.yaml + - ./.volumes/fs:/app/.volumes/fs + command: ./run.sh + healthcheck: + test: + - "CMD" + - "curl" + - "--fail" + - "--silent" + - "http://localhost:8000/-/health" + interval: 10s + timeout: 10s + retries: 30 + start_period: 10s + + # nomad remote tools hub (JupyterHUB, e.g. for AI Toolkit) + north: + restart: unless-stopped + image: gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-fair:demo-h5web-in-searchresults_sts_palma_lab_l + container_name: nomad_oasis_north + environment: + NOMAD_SERVICE: nomad_oasis_north + NOMAD_NORTH_DOCKER_NETWORK: nomad_oasis_network + NOMAD_NORTH_HUB_CONNECT_IP: north + NOMAD_NORTH_HUB_IP: "0.0.0.0" + NOMAD_NORTH_HUB_HOST: north + NOMAD_SERVICES_API_HOST: app + NOMAD_FS_EXTERNAL_WORKING_DIRECTORY: "$PWD" + NOMAD_RABBITMQ_HOST: rabbitmq + NOMAD_ELASTIC_HOST: elastic + NOMAD_MONGO_HOST: mongo + volumes: + - ./configs/nomad.yaml:/app/nomad.yaml + - ./.volumes/fs:/app/.volumes/fs + - /var/run/docker.sock:/var/run/docker.sock + user: '1000:999' + command: python -m nomad.cli admin run hub + healthcheck: + test: + - "CMD" + - "curl" + - "--fail" + - "--silent" + - "http://localhost:8081/nomad-oasis/north/hub/health" + interval: 10s + timeout: 10s + retries: 30 + start_period: 10s + + # nomad logtransfer + # to enable the logtransfer service run "docker compose --profile with_logtransfer up" + logtransfer: + restart: unless-stopped + image: gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-fair:demo-h5web-in-searchresults_sts_palma_lab_l + container_name: nomad_oasis_logtransfer + environment: + NOMAD_SERVICE: nomad_oasis_logtransfer + NOMAD_ELASTIC_HOST: elastic + NOMAD_MONGO_HOST: mongo + depends_on: + elastic: + condition: service_healthy + mongo: + condition: service_healthy + volumes: + - ./configs/nomad.yaml:/app/nomad.yaml + - ./.volumes/fs:/app/.volumes/fs + command: python -m nomad.cli admin run logtransfer + profiles: ["with_logtransfer"] + + # nomad proxy (a reverse proxy for nomad) + proxy: + restart: unless-stopped + image: nginx:1.13.9-alpine + container_name: nomad_oasis_proxy + command: nginx -g 'daemon off;' + volumes: + - ./configs/nginx.conf:/etc/nginx/conf.d/default.conf + depends_on: + app: + condition: service_healthy + worker: + condition: service_started # TODO: service_healthy + north: + condition: service_healthy + ports: + - 80:80 + +volumes: + mongo: + name: "nomad_oasis_mongo" + elastic: + name: "nomad_oasis_elastic" + rabbitmq: + name: "nomad_oasis_rabbitmq" + keycloak: + name: "nomad_oasis_keycloak" + +networks: + default: + name: nomad_oasis_network diff --git a/docker/sts/OasisSetup/PalmasLab/dockerfiles/Dockerfile b/docker/sts/OasisSetup/PalmasLab/dockerfiles/Dockerfile new file mode 100644 index 0000000..7663c16 --- /dev/null +++ b/docker/sts/OasisSetup/PalmasLab/dockerfiles/Dockerfile @@ -0,0 +1,27 @@ +## ++++++++++++++++ +# Note +# The image `demo-h5web-in-searchresults_sts_palma_lab_l`has been created locally from +# Nomad-fair gitlab branch demo-h5web-in-searchresults_sts_palma_lab +## ++++++++++++++++ +FROM gitlab-registry.mpcdf.mpg.de/nomad-lab/nomad-fair:demo-h5web-in-searchresults_sts_palma_lab_l + +# root access +USER root +RUN pip install --no-cache-dir --upgrade pip + +# Install from PyPI +RUN pip install pynxtools-stm==1.0.4 + +# Install from source +# COPY ../pynxtools-stm /app/pynxtools-stm +# RUN apt-get update && apt-get install -y \ +# git + +# # RUN pip install --upgrade pip \ +# # && pip install git+https://github.com/FAIRmat-NFDI/pynxtools-stm.git +# WORKDIR /app/pynxtools-stm + +# RUN python -m build --sdist +# RUN pip install dist/pynxtools-stm-0.0.0.tar.gz +WORKDIR /app +USER nomad diff --git a/docker/sts/OasisSetup/pynxtools-stm b/docker/sts/OasisSetup/pynxtools-stm new file mode 160000 index 0000000..6bbd71b --- /dev/null +++ b/docker/sts/OasisSetup/pynxtools-stm @@ -0,0 +1 @@ +Subproject commit 6bbd71b8e39f5ef6b66756cf54995f12b453a186 -- GitLab