|
@@ -1,6 +1,7 @@
|
|
|
version: '3.8'
|
|
version: '3.8'
|
|
|
|
|
|
|
|
services:
|
|
services:
|
|
|
|
|
+
|
|
|
portainer:
|
|
portainer:
|
|
|
image: portainer/portainer-ce:latest
|
|
image: portainer/portainer-ce:latest
|
|
|
container_name: portainer
|
|
container_name: portainer
|
|
@@ -41,6 +42,28 @@ services:
|
|
|
networks:
|
|
networks:
|
|
|
- ai_network
|
|
- 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:
|
|
weaviate:
|
|
|
image: semitechnologies/weaviate:latest
|
|
image: semitechnologies/weaviate:latest
|
|
|
container_name: weaviate
|
|
container_name: weaviate
|
|
@@ -60,29 +83,194 @@ services:
|
|
|
- ai_network
|
|
- ai_network
|
|
|
|
|
|
|
|
ollama:
|
|
ollama:
|
|
|
- image: ollama/ollama:latest
|
|
|
|
|
|
|
+ image: ollama/ollama:rocm
|
|
|
container_name: ollama
|
|
container_name: ollama
|
|
|
restart: always
|
|
restart: always
|
|
|
ports:
|
|
ports:
|
|
|
- "11434:11434"
|
|
- "11434:11434"
|
|
|
volumes:
|
|
volumes:
|
|
|
- ollama_data:/root/.ollama
|
|
- ollama_data:/root/.ollama
|
|
|
|
|
+ - /models/ollama:/models
|
|
|
environment:
|
|
environment:
|
|
|
|
|
+ - OLLAMA_LLM_LIBRARY=rocm
|
|
|
|
|
+ - HSA_OVERRIDE_GFX_VERSION=11.0.0
|
|
|
|
|
+ - HCC_AMDGPU_TARGET=gfx1100
|
|
|
- OLLAMA_HOST=0.0.0.0:11434
|
|
- OLLAMA_HOST=0.0.0.0:11434
|
|
|
- - NVIDIA_VISIBLE_DEVICES=all
|
|
|
|
|
- - CUDA_VISIBLE_DEVICES=0
|
|
|
|
|
devices:
|
|
devices:
|
|
|
- /dev/kfd:/dev/kfd
|
|
- /dev/kfd:/dev/kfd
|
|
|
- /dev/dri:/dev/dri
|
|
- /dev/dri:/dev/dri
|
|
|
networks:
|
|
networks:
|
|
|
- ai_network
|
|
- 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:
|
|
jupyter:
|
|
|
image: jupyter/datascience-notebook:latest
|
|
image: jupyter/datascience-notebook:latest
|
|
|
container_name: jupyter
|
|
container_name: jupyter
|
|
|
restart: always
|
|
restart: always
|
|
|
ports:
|
|
ports:
|
|
|
- - "8888:8888"
|
|
|
|
|
|
|
+ - "8887:8888"
|
|
|
environment:
|
|
environment:
|
|
|
- JUPYTER_ENABLE_LAB=yes
|
|
- JUPYTER_ENABLE_LAB=yes
|
|
|
- JUPYTER_TOKEN=ai_server_2026
|
|
- JUPYTER_TOKEN=ai_server_2026
|
|
@@ -95,7 +283,6 @@ services:
|
|
|
- ai_network
|
|
- ai_network
|
|
|
command: start-notebook.sh --NotebookApp.token='ai_server_2026' --NotebookApp.allow_root=True
|
|
command: start-notebook.sh --NotebookApp.token='ai_server_2026' --NotebookApp.allow_root=True
|
|
|
|
|
|
|
|
- # ROCm PyTorch - GPU-kiirendatud ML/DL
|
|
|
|
|
rocm-pytorch:
|
|
rocm-pytorch:
|
|
|
image: rocm/pytorch:latest
|
|
image: rocm/pytorch:latest
|
|
|
container_name: rocm_pytorch
|
|
container_name: rocm_pytorch
|
|
@@ -108,7 +295,7 @@ services:
|
|
|
- PYTORCH_ROCM_ARCH=gfx1151
|
|
- PYTORCH_ROCM_ARCH=gfx1151
|
|
|
- ROCM_HOME=/opt/rocm
|
|
- ROCM_HOME=/opt/rocm
|
|
|
- TZ=Europe/Tallinn
|
|
- TZ=Europe/Tallinn
|
|
|
- - TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL=1 # ← UUS!
|
|
|
|
|
|
|
+ - TORCH_ROCM_AOTRITON_ENABLE_EXPERIMENTAL=1
|
|
|
devices:
|
|
devices:
|
|
|
- /dev/kfd:/dev/kfd
|
|
- /dev/kfd:/dev/kfd
|
|
|
- /dev/dri:/dev/dri
|
|
- /dev/dri:/dev/dri
|
|
@@ -130,67 +317,68 @@ services:
|
|
|
- ai_network
|
|
- ai_network
|
|
|
command: >
|
|
command: >
|
|
|
bash -c "pip install jupyter notebook tensorboard transformers datasets huggingface_hub scikit-learn pandas psycopg2-binary &&
|
|
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:
|
|
rag-api:
|
|
|
- #image: rag-api:latest
|
|
|
|
|
build:
|
|
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
|
|
container_name: rag_api
|
|
|
restart: always
|
|
restart: always
|
|
|
ports:
|
|
ports:
|
|
|
- - "8072:8000"
|
|
|
|
|
|
|
+ - "8072:8000"
|
|
|
environment:
|
|
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:
|
|
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:
|
|
depends_on:
|
|
|
- - weaviate
|
|
|
|
|
- - ollama
|
|
|
|
|
- - postgres
|
|
|
|
|
|
|
+ - weaviate
|
|
|
|
|
+ - ollama
|
|
|
|
|
+ - postgres
|
|
|
networks:
|
|
networks:
|
|
|
- - ai_network
|
|
|
|
|
|
|
+ - ai_network
|
|
|
healthcheck:
|
|
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:
|
|
volumes:
|
|
|
portainer_data:
|
|
portainer_data:
|
|
|
driver: local
|
|
driver: local
|
|
|
-
|
|
|
|
|
postgres_data:
|
|
postgres_data:
|
|
|
driver: local
|
|
driver: local
|
|
|
-
|
|
|
|
|
weaviate_data:
|
|
weaviate_data:
|
|
|
driver: local
|
|
driver: local
|
|
|
-
|
|
|
|
|
ollama_data:
|
|
ollama_data:
|
|
|
driver: local
|
|
driver: local
|
|
|
-
|
|
|
|
|
jupyter_data:
|
|
jupyter_data:
|
|
|
driver: local
|
|
driver: local
|
|
|
-
|
|
|
|
|
rocm_pytorch_data:
|
|
rocm_pytorch_data:
|
|
|
driver: local
|
|
driver: local
|
|
|
|
|
+ mariadb_data:
|
|
|
|
|
+ driver: local
|
|
|
|
|
+ open-webui_data:
|
|
|
|
|
+ driver: local
|
|
|
|
|
|
|
|
networks:
|
|
networks:
|
|
|
ai_network:
|
|
ai_network:
|