Эх сурвалжийг харах

SearXNG ja Open WebUI integratsioon

ardo 3 сар өмнө
parent
commit
d0a0a9d6bb

+ 3 - 0
.gitignore

@@ -5,3 +5,6 @@ data/
 models/
 pytorch-workspace/
 notebooks/
+open-webui-docs/
+open-webui-uploads/
+searxng/

+ 13 - 0
LOEMIND.md

@@ -46,3 +46,16 @@ docker-compose logs -f rag-api
 ### 4. Testi
 curl http://localhost:8072/health
 curl "http://localhost:8072/search-simple?q=young+driver+risk"
+
+| Teenus          | URL                          | Kasutaja                  | Parool                      |
+| --------------- | ---------------------------- | ------------------------- | --------------------------- |
+| Open WebUI      | http://100.87.1.24:3000      | (loo esimesel käivitusel) | -                           |
+| SearXNG         | http://100.87.1.24:8887      | -                         | -                           |
+| Portainer       | http://100.87.1.24:9000      | admin                     | (määra esimesel käivitusel) |
+| Jupyter         | http://100.87.1.24:8889      | -                         | Token: ai_server_2026       |
+| PyTorch Jupyter | http://100.87.1.24:8890      | -                         | Token: ai_pytorch_2026      |
+| Ollama          | http://100.87.1.24:11434     | -                         | -                           |
+| Weaviate        | http://100.87.1.24:8080      | -                         | -                           |
+| RAG API         | http://100.87.1.24:8072/docs | -                         | -                           |
+
+

+ 0 - 0
README/Erinevused PyTorch (ROCm) ja JupyterLab konteineritel.md → README/PyTorch_ROCm_vs_JupyterLab.md


+ 48 - 0
README/README_ollama.md

@@ -0,0 +1,48 @@
+# Ollama
+## Kuidas lisada mudeleid ollama jaoks.
+
+Osad mudelid, mis töötavad sul palja llama.cpp + ROCm/Vulkaniga võivad Ollama + ROCm + iGPU (gfx1151) peal ROCm‑backendiga „ROCm0 buffer“ vea anda, sest Ollama kasutab teisi mäluheuristikaid ja piiranguid kui sinu käsitsi kompileeritud llama.cpp.
+
+### Kuidas kasutada suuremaid mudeleid?
+Lae alla suurem mudel
+Kuida kombineerida GGUF-i URL-i:
+1. Otsi https://huggingface.co pealt sobiv mudel
+2. Otsi valik "Use this model" -> llama-cpp-python
+3. Võta sealt:
+  3.1 repo_id="BSC-LT/ALIA-40b-instruct-2512-GGUF"
+  3.2 filename="ALIA-40b-instruct-2512-Q8_0.gguf"
+4. Ühenda kõik see info nagu allpool koodis
+
+```bash
+mkdir -p /models/alia-40b
+cd /models/alia-40b
+
+wget https://huggingface.co/BSC-LT/ALIA-40b-instruct-2512-GGUF/resolve/main/ALIA-40b-instruct-2512-Q8_0.gguf \
+  -O ALIA-40b-instruct-2512-Q8_0.gguf
+
+# Loo Modelfile
+cat > Modelfile << 'EOF'
+FROM ./ALIA-40b-instruct-2512-Q8_0.gguf
+
+PARAMETER temperature 0.7
+PARAMETER top_p 0.9
+PARAMETER top_k 40
+PARAMETER repeat_penalty 1.1
+PARAMETER num_gpu 18
+
+TEMPLATE """You are a helpful multilingual assistant. Always answer in Estonian unless the user explicitly asks for another language.
+
+{{ .Prompt }}"""
+EOF
+# Docker'i konteineri
+docker exec -it ollama bash
+
+cd /models/alia-40b
+ollama create ALIA-40b-instruct-est-2512-Q8_0 -f /models/Modelfiles/Modelfile
+
+ollama list
+ollama run ALIA-40b-instruct-est-2512-Q8_0
+
+
+```
+

+ 271 - 0
README/README_searxng.md

@@ -0,0 +1,271 @@
+# SearXNG ja Open WebUI integratsioon 
+
+```markdown
+# SearXNG + Open WebUI integratsioon (ohmu server)
+
+See juhend kirjeldab, kuidas SearXNG töötab koos Open WebUI‑ga ja milliseid seadeid me muutsime.
+
+## 1. Asukoht ja käivitamine
+
+Projektikataloog:
+
+```bash
+cd /opt/docker-compose/main
+```
+
+Põhikäsklused:
+
+```bash
+# Kõik teenused taustal
+docker-compose up -d
+
+# Ainult SearXNG
+docker-compose up -d searxng
+
+# Ainult Open WebUI
+docker-compose up -d open-webui
+
+# Logid
+docker logs -f searxng
+docker logs -f open-webui
+```
+
+
+---
+
+## 2. SearXNG seadistus
+
+### 2.1 Docker Compose teenus
+
+Fail: `docker-compose.yml`
+
+```yaml
+searxng:
+  image: searxng/searxng:latest
+  container_name: searxng
+  restart: always
+  ports:
+    - "8888:8080"
+  volumes:
+    - ./searxng:/etc/searxng:rw
+  environment:
+    - SEARXNG_BASE_URL=http://100.87.1.24:8888/
+    - SEARXNG_SECRET=searxng_secret_key_change_me_2026_random_string
+    - TZ=Europe/Tallinn
+  networks:
+    - ai_network
+  healthcheck:
+    test: ["CMD", "wget", "--spider", "-q", "http://localhost:8080/healthz"]
+    interval: 30s
+    timeout: 10s
+    retries: 3
+    start_period: 30s
+```
+
+
+### 2.2 `settings.yml` olulisemad read
+
+Fail: `./searxng/settings.yml` (mount’itud konteinerisse `/etc/searxng/settings.yml`)
+
+```yaml
+server:
+  port: 8080          # sisemine port konteineris
+  bind_address: "0.0.0.0"
+  base_url: false
+  limiter: false      # rate limiting / botdetection välja
+  public_instance: false
+  method: "GET"
+
+formats:
+  - html
+  - json              # vajalik, et Open WebUI saaks JSON-tulemusi
+```
+
+DuckDuckGo CAPTCHAd vältimiseks on DDG mootorid soovi korral keelatud:
+
+```yaml
+- name: duckduckgo
+  engine: duckduckgo
+  shortcut: ddg
+  disabled: true
+```
+
+(jne kõik ddg‑* mootorid `disabled: true`).
+
+### 2.3 Limiter konfiguratsioon (valikuline)
+
+Fail: `./searxng/limiter.toml`
+
+```toml
+[botdetection.ip_limit]
+filter_link_local = false
+link_token = false
+
+[botdetection.ip_lists]
+pass_ip = [
+  "172.16.0.0/12",
+  "10.0.0.0/8",
+  "192.168.0.0/16"
+]
+```
+
+NB! Kuigi logides on hoiatus `X-Forwarded-For nor X-Real-IP header is set!`, tänu `limiter: false` ei blokita päringuid – seda hoiatust võib ignoreerida.
+
+---
+
+## 3. Open WebUI seadistus SearXNG jaoks
+
+### 3.1 Docker Compose teenus
+
+Fail: `docker-compose.yml` – `open-webui` teenuse `environment` ploki kõige olulisemad read.
+
+```yaml
+open-webui:
+  image: ghcr.io/open-webui/open-webui:main
+  container_name: open-webui
+  restart: always
+  ports:
+    - "3000:8080"
+  volumes:
+    - open-webui_data:/app/backend/data
+    - ./open-webui-uploads:/app/backend/data/uploads
+    - ./open-webui-docs:/app/backend/data/docs
+  environment:
+    # Põhiseaded
+    - WEBUI_SECRET_KEY=ai_webui_secret_2026_change_me_to_random_string
+    - TZ=Europe/Tallinn
+    - OLLAMA_BASE_URL=http://ollama:11434
+
+    # RAG & embeddingud
+    - ENABLE_RAG_WEB_SEARCH=true
+    - RAG_EMBEDDING_ENGINE=ollama
+    - RAG_EMBEDDING_MODEL=nomic-embed-text:latest
+
+    # Web search SearXNG kaudu (OLULINE!)
+    - RAG_WEB_SEARCH_ENGINE=searxng
+    - SEARXNG_QUERY_URL=http://searxng:8080/search?q=<query>&format=json&categories=general,science
+    - RAG_WEB_SEARCH_RESULT_COUNT=3
+    - RAG_WEB_SEARCH_CONCURRENT_REQUESTS=5
+```
+
+**Oluline viga, mille parandasime:**
+alguses oli
+
+```yaml
+SEARXNG_QUERY_URL=http://searxng:8080/search?q=&categories=general,science
+```
+
+See ei sisestanud päringut ja SearXNG logisse ei tekkinud ühtegi `search` päringut.
+Õige on **`q=<query>&format=json`**.
+
+---
+
+## 4. Web search kasutamine Open WebUI-s
+
+### 4.1 Kuidas käivitada veebiotsing
+
+Vestluses:
+
+```text
+#web Milline ilm on täna Hiiumaal?
+```
+
+või
+
+```text
+#web Millised on viimased uudised Eestist?
+```
+
+`#web` sümbol sunnib Open WebUI’d kasutama RAG web search’i SearXNG kaudu.
+
+### 4.2 Kuidas kontrollida, kas SearXNG päriselt töötab
+
+1. Ava terminal:
+
+```bash
+docker logs -f searxng
+```
+
+2. Teises aknas Open WebUI-s tee `#web ...` päring.
+3. Kui integratsioon töötab, ilmuvad SearXNG logidesse uued read (vead / hoiatused / info) täpselt päringu ajal.
+Lisaks saab käsitsi testida:
+
+```bash
+curl "http://100.87.1.24:8888/search?q=hiiumaa&format=json" | jq '.results[0:2]'
+docker exec open-webui curl -s "http://searxng:8080/search?q=test&format=json" | jq '.results.title'
+```
+
+
+---
+
+## 5. Tüüpilised probleemid ja lahendused
+
+1. **Open WebUI vastused on „vana info“, SearXNG logi ei muutu**
+→ kontrolli, et `SEARXNG_QUERY_URL` sisaldab `<query>` ja `format=json`.
+2. **SearXNG logis DuckDuckGo CAPTCHA vead**
+→ keela DuckDuckGo mootorid `settings.yml`‑is (`disabled: true`).
+3. **SearXNG logis pidevalt `X-Forwarded-For nor X-Real-IP`**
+→ hoiatus; kuna `limiter: false`, võib seda ignoreerida.
+4. **Tahad rohkem / vähem veebi tulemusi**
+→ muuda Open WebUI env:
+
+```yaml
+- RAG_WEB_SEARCH_RESULT_COUNT=3  # 3–5 on mõistlik
+- RAG_WEB_SEARCH_CONCURRENT_REQUESTS=5  # 5–8, olenevalt koormusest
+```
+
+
+---
+
+## 6. Kiire „reset“ integratsioonile
+
+Kui tulevikus miski läheb segamini:
+
+```bash
+cd /opt/docker-compose/main
+
+# Stoppi ainult need kaks
+docker-compose stop open-webui searxng
+
+# Käivita SearXNG
+docker-compose up -d searxng
+
+# Kui SearXNG on terve:
+docker-compose up -d open-webui
+```
+
+Seejärel testi:
+
+```bash
+docker exec open-webui curl -s "http://searxng:8080/search?q=test&format=json" | jq '.results.title'
+```
+
+Kui see töötab, on SearXNG ja Open WebUI integratsioon korras.
+
+```
+<span style="display:none">[^1][^10][^11][^12][^13][^14][^15][^16][^17][^18][^19][^2][^20][^21][^3][^4][^5][^6][^7][^8][^9]</span>
+
+<div align="center">⁂</div>
+
+[^1]: docker-compose.yml
+[^2]: docker-compose.yml
+[^3]: image.jpg
+[^4]: image.jpg
+[^5]: docker-compose.yml
+[^6]: image.jpg
+[^7]: docker-compose.yml
+[^8]: image.jpg
+[^9]: paste.txt
+[^10]: docker-compose.yml
+[^11]: image.jpg
+[^12]: image.jpg
+[^13]: image.jpg
+[^14]: image.jpg
+[^15]: settings.yml
+[^16]: docker-compose.yml
+[^17]: settings.yml
+[^18]: limiter.toml
+[^19]: image.jpg
+[^20]: image.jpg
+[^21]: image.jpg```
+

+ 230 - 42
docker-compose.yml

@@ -1,6 +1,7 @@
 version: '3.8'
 
 services:
+
   portainer:
     image: portainer/portainer-ce:latest
     container_name: portainer
@@ -41,6 +42,28 @@ services:
     networks:
       - ai_network
 
+  mariadb:
+    image: mariadb:11
+    container_name: mariadb
+    restart: always
+    ports:
+      - "3306:3306"
+    environment:
+      MYSQL_ROOT_PASSWORD: ai_root_pass_2026
+      MYSQL_DATABASE: research_mariadb
+      MYSQL_USER: ai_mariadb_user
+      MYSQL_PASSWORD: ai_mariadb_pass_2026
+      TZ: Europe/Tallinn
+    volumes:
+      - mariadb_data:/var/lib/mysql
+    healthcheck:
+      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uai_mariadb_user", "-pai_mariadb_pass_2026"]
+      interval: 10s
+      timeout: 5s
+      retries: 5
+    networks:
+      - ai_network
+
   weaviate:
     image: semitechnologies/weaviate:latest
     container_name: weaviate
@@ -60,29 +83,194 @@ services:
       - ai_network
 
   ollama:
-    image: ollama/ollama:latest
+    image: ollama/ollama:rocm
     container_name: ollama
     restart: always
     ports:
       - "11434:11434"
     volumes:
       - ollama_data:/root/.ollama
+      - /models/ollama:/models
     environment:
+      - OLLAMA_LLM_LIBRARY=rocm
+      - HSA_OVERRIDE_GFX_VERSION=11.0.0
+      - HCC_AMDGPU_TARGET=gfx1100
       - OLLAMA_HOST=0.0.0.0:11434
-      - NVIDIA_VISIBLE_DEVICES=all
-      - CUDA_VISIBLE_DEVICES=0
     devices:
       - /dev/kfd:/dev/kfd
       - /dev/dri:/dev/dri
     networks:
       - ai_network
+    # ═══════════════════════════════════════════════════════════
+    # HEALTHCHECK - Vajalik Open WebUI depends_on jaoks
+    # ═══════════════════════════════════════════════════════════
+    healthcheck:
+      test: ["CMD-SHELL", "ollama list || exit 1"]
+      interval: 30s
+      timeout: 10s
+      retries: 3
+      start_period: 45s
+
+  # ═══════════════════════════════════════════════════════════════════════════════
+  # SEARXNG - Privaatne metaotsingumotor (Google, Bing, DuckDuckGo, arXiv, PubMed)
+  # ═══════════════════════════════════════════════════════════════════════════════
+  searxng:
+    image: searxng/searxng:latest
+    container_name: searxng
+    restart: always
+    ports:
+      - "8888:8080"
+    volumes:
+      - ./searxng:/etc/searxng:rw
+    environment:
+      - SEARXNG_BASE_URL=http://100.87.1.24:8888/
+      - SEARXNG_SECRET=searxng_secret_key_change_me_2026_random_string
+      - TZ=Europe/Tallinn
+      - SEARXNG_LIMITER=false
+    networks:
+      - ai_network
+    healthcheck:
+      test: ["CMD", "wget", "--spider", "-q", "http://localhost:8080/healthz"]
+      interval: 30s
+      timeout: 10s
+      retries: 3
+      start_period: 30s
+
+  # ═══════════════════════════════════════════════════════════════
+  # OPEN WEBUI - Professionaalne LLM liides
+  # ═══════════════════════════════════════════════════════════════
+  open-webui:
+    image: ghcr.io/open-webui/open-webui:main
+    container_name: open-webui
+    restart: always
+    ports:
+      - "3000:8080"
+    volumes:
+      - open-webui_data:/app/backend/data
+      - ./open-webui-uploads:/app/backend/data/uploads
+      - ./open-webui-docs:/app/backend/data/docs
+      
+    environment:
+      # ═══════════════════════════════════════════════════════════
+      # PÕHISEADED
+      # ═══════════════════════════════════════════════════════════
+      - WEBUI_SECRET_KEY=ai_webui_secret_2026_change_me_to_random_string
+      - TZ=Europe/Tallinn
+      - OLLAMA_BASE_URL=http://ollama:11434
+      - OPENAI_API_BASE_URLS=http://100.87.1.24:8070/v1
+      - OPENAI_API_KEYS=sk-dummy-key-not-required
+      
+      # ═══════════════════════════════════════════════════════════
+      # WEBSOCKET & STREAMING
+      # ═══════════════════════════════════════════════════════════
+      - ENABLE_CHAT_STREAMING=true
+      - WEBSOCKET_MANAGER_ENABLED=true
+      - POLLING_INTERVAL=500
+      
+      # ═══════════════════════════════════════════════════════════
+      # RAG & EMBEDDINGS (ILMA VECTOR_DB MUUTUJATA!)
+      # ═══════════════════════════════════════════════════════════
+      - ENABLE_RAG_WEB_SEARCH=true
+      - RAG_EMBEDDING_ENGINE=ollama
+      - RAG_EMBEDDING_MODEL=nomic-embed-text:latest
+      - CHUNK_SIZE=2000
+      - CHUNK_OVERLAP=200
+      - RAG_TOP_K=10
+      - RAG_RELEVANCE_THRESHOLD=0.5
+      - PDF_EXTRACT_IMAGES=true
+      - ENABLE_RAG_LOCAL_WEB_FETCH=true
+
+    # ═══════════════════════════════════════════════════════════
+      # WEB SEARCH (SearXNG integratsioon)
+      # ═══════════════════════════════════════════════════════════
+      #- RAG_WEB_SEARCH_ENGINE=duckduckgo
+      - RAG_WEB_SEARCH_ENGINE=searxng
+      #- SEARXNG_QUERY_URL=http://searxng:8080/search?q=<query>&categories=general,science
+      - SEARXNG_QUERY_URL=http://searxng:8080/search?q=<query>&format=json&categories=general,news,science
+      - RAG_WEB_SEARCH_RESULT_COUNT=5
+      - RAG_WEB_SEARCH_CONCURRENT_REQUESTS=8
+
+      # ═══════════════════════════════════════════════════════════
+      # WEAVIATE - KOMMENTEERITUD VÄLJA
+      # ═══════════════════════════════════════════════════════════
+      # - VECTOR_DB=weaviate              # <- EEMALDA SEE RIDA!
+      # - WEAVIATE_HOST=weaviate          # <- EEMALDA
+      # - WEAVIATE_PORT=8080              # <- EEMALDA
+      # - WEAVIATE_GRPC_HOST=weaviate     # <- EEMALDA
+      # - WEAVIATE_GRPC_PORT=50051        # <- EEMALDA
+      # - WEAVIATE_USE_AUTH=false         # <- EEMALDA
+      # - WEAVIATE_TIMEOUT=30             # <- EEMALDA
+      
+      # ═══════════════════════════════════════════════════════════
+      # AUTENTIMINE
+      # ═══════════════════════════════════════════════════════════
+      - WEBUI_AUTH=true
+      - ENABLE_SIGNUP=false
+      - DEFAULT_USER_ROLE=user
+      - ENABLE_LOGIN_FORM=true
+      - ENABLE_API_KEY=true
+      
+      # ═══════════════════════════════════════════════════════════
+      # FAILID
+      # ═══════════════════════════════════════════════════════════
+      - UPLOAD_DIR=/app/backend/data/uploads
+      - ENABLE_IMAGE_GENERATION=false
+      - ENABLE_FILE_UPLOAD=true
+      - FILE_UPLOAD_MAX_SIZE=100
+      - FILE_UPLOAD_ALLOWED_TYPES=.pdf,.txt,.md,.csv,.json,.xml
+      
+      # ═══════════════════════════════════════════════════════════
+      # VESTLUSED
+      # ═══════════════════════════════════════════════════════════
+      - ENABLE_MESSAGE_RATING=true
+      - ENABLE_COMMUNITY_SHARING=false
+      - ENABLE_ADMIN_EXPORT=true
+      - ENABLE_ADMIN_CHAT_ACCESS=false
+      - CHAT_CONTEXT_WINDOW=8192
+      - TASK_MODEL=qwen2.5:7b
+      - TASK_MODEL_EXTERNAL=http://100.87.1.24:8070/v1
+      
+      # ═══════════════════════════════════════════════════════════
+      # CORS & MUUD
+      # ═══════════════════════════════════════════════════════════
+      - CORS_ALLOW_ORIGIN=*
+      - AUDIO_STT_ENGINE=whisper
+      - AUDIO_TTS_ENGINE=openedai-speech
+      - AUDIO_STT_OPENAI_API_BASE_URL=http://100.87.1.24:8070/v1
+      - ENABLE_MODEL_FILTER=true
+      - BYPASS_MODEL_ACCESS_CONTROL=false
+      - SHOW_ADMIN_DETAILS=true
+      - GLOBAL_LOG_LEVEL=INFO
+      - WEBUI_SESSION_COOKIE_SECURE=false
+      - WEBUI_SESSION_COOKIE_SAME_SITE=lax
+      - DATABASE_URL=postgresql://ai_user:ai_secure_pass_2026@postgres:5432/openwebui_db
+      
+    depends_on:
+      ollama:
+        condition: service_healthy
+      postgres:
+        condition: service_healthy
+        
+    networks:
+      - ai_network
+      
+    extra_hosts:
+      - "host.docker.internal:host-gateway"
+      
+    healthcheck:
+      test: ["CMD-SHELL", "curl -f http://localhost:8080/health || exit 1"]
+      interval: 30s
+      timeout: 10s
+      retries: 3
+      start_period: 60s
+
 
   jupyter:
     image: jupyter/datascience-notebook:latest
     container_name: jupyter
     restart: always
     ports:
-      - "8888:8888"
+      - "8887:8888"
     environment:
       - JUPYTER_ENABLE_LAB=yes
       - JUPYTER_TOKEN=ai_server_2026
@@ -95,7 +283,6 @@ services:
       - ai_network
     command: start-notebook.sh --NotebookApp.token='ai_server_2026' --NotebookApp.allow_root=True
 
-  # ROCm PyTorch - GPU-kiirendatud ML/DL
   rocm-pytorch:
     image: rocm/pytorch:latest
     container_name: rocm_pytorch
@@ -108,7 +295,7 @@ services:
       - PYTORCH_ROCM_ARCH=gfx1151
       - ROCM_HOME=/opt/rocm
       - TZ=Europe/Tallinn
-      - TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL=1  # ← UUS!
+      - TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL=1
     devices:
       - /dev/kfd:/dev/kfd
       - /dev/dri:/dev/dri
@@ -130,67 +317,68 @@ services:
       - ai_network
     command: >
       bash -c "pip install jupyter notebook tensorboard transformers datasets huggingface_hub scikit-learn pandas psycopg2-binary &&
-               jupyter notebook --ip=0.0.0.0 --port=8888 --no-browser --allow-root --NotebookApp.token='ai_pytorch_2026'"
+      jupyter notebook --ip=0.0.0.0 --port=8888 --no-browser --allow-root --NotebookApp.token='ai_pytorch_2026'"
 
-  # ===== RAG API =====
   rag-api:
-    #image: rag-api:latest
     build:
-        #context: /home/ardo/rag-demo/pdf-pipeline
-        context: /opt/docker-compose/rag-api
-        dockerfile: Dockerfile
+      context: /opt/docker-compose/main/Dockerfile/rag-api
+      dockerfile: Dockerfile
     container_name: rag_api
     restart: always
     ports:
-        - "8072:8000"
+      - "8072:8000"
     environment:
-        LLAMA_CPP_URL: http://100.87.1.24:8070/completion
-        WEAVIATE_HOST: weaviate
-        WEAVIATE_HTTP_PORT: 8080
-        WEAVIATE_URL: http://weaviate:8080
-        WEAVIATE_CLASS: ScientificArticle
-        DB_HOST: postgres
-        DB_PORT: 5432
-        DB_NAME: pdf_research
-        DB_USER: osm
-        DB_PASSWORD: osm
-        OLLAMA_URL: http://ollama:11434
-        TZ: Europe/Tallinn
+      LLAMA_CPP_URL: http://100.87.1.24:8070/completion
+      WEAVIATE_HOST: weaviate
+      WEAVIATE_HTTP_PORT: 8080
+      WEAVIATE_URL: http://weaviate:8080
+      WEAVIATE_CLASS: ScientificArticle
+      DB_HOST: postgres
+      DB_PORT: 5432
+      DB_NAME: pdf_research
+      DB_USER: osm
+      DB_PASSWORD: osm
+      OLLAMA_URL: http://ollama:11434
+      TZ: Europe/Tallinn
+      MARIADB_HOST: mariadb
+      MARIADB_PORT: 3306
+      MARIADB_DB: research_mariadb
+      MARIADB_USER: ai_mariadb_user
+      MARIADB_PASSWORD: ai_mariadb_pass_2026
     volumes:
-        - /home/ardo/rag-demo/pdf-pipeline/src:/app/src
-        - /home/ardo/rag-demo/pdf-pipeline/data:/app/data
-        - /home/ardo/rag-demo/pdf-pipeline/output:/app/output
+      - /home/ardo/rag-demo/pdf-pipeline/src:/app/src
+      - /home/ardo/rag-demo/pdf-pipeline/data:/app/data
+      - /home/ardo/rag-demo/pdf-pipeline/output:/app/output
     depends_on:
-        - weaviate
-        - ollama
-        - postgres
+      - weaviate
+      - ollama
+      - postgres
     networks:
-        - ai_network
+      - ai_network
     healthcheck:
-        test: ["CMD", "curl", "-f", "http://localhost:8000/docs"]
-        interval: 30s
-        timeout: 10s
-        retries: 3
-        start_period: 40s
+      test: ["CMD", "curl", "-f", "http://localhost:8000/docs"]
+      interval: 30s
+      timeout: 10s
+      retries: 3
+      start_period: 40s
 
 volumes:
   portainer_data:
     driver: local
-  
   postgres_data:
     driver: local
-  
   weaviate_data:
     driver: local
-  
   ollama_data:
     driver: local
-  
   jupyter_data:
     driver: local
-  
   rocm_pytorch_data:
     driver: local
+  mariadb_data:
+    driver: local
+  open-webui_data:
+    driver: local
 
 networks:
   ai_network:

+ 11 - 0
init-db/01-create-openwebui-db.sql

@@ -0,0 +1,11 @@
+-- Loo Open WebUI andmebaas
+CREATE DATABASE openwebui_db;
+GRANT ALL PRIVILEGES ON DATABASE openwebui_db TO ai_user;
+
+-- Loo RAG API andmebaas
+CREATE DATABASE pdf_research;
+GRANT ALL PRIVILEGES ON DATABASE pdf_research TO ai_user;
+
+-- Loo kasutaja RAG API jaoks
+CREATE USER osm WITH PASSWORD 'osm';
+GRANT ALL PRIVILEGES ON DATABASE pdf_research TO osm;