| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343 |
- # Open WebUI – Docker kasutusjuhend
- Professionaalne LLM veebiliides. Vestlus, RAG (dokumentide põhine küsimine), veebiotsing.
- ## Arhitektuur (2025-07-05 seisuga)
- | Komponent | Asukoht | Staatus |
- |-----------|---------|---------|
- | **Open WebUI** | Docker konteiner (`open-webui`) | port 3010 |
- | **Ollama** | Native systemd teenus (`ollama.service`) | port 11434 |
- | **Ollama GPU** | ROCm 7.2.2, gfx1151 (Radeon 8060S) | hostil |
- | **mcp-filesystem-sse** | Docker konteiner (`mcp-filesystem-sse`) | port 3100 |
- | **mcp-terminal** | Docker konteiner (`mcp-terminal`) | port 3110 |
- | **tika** | Docker konteiner (`tika`) | port 9998 |
- | **Qdrant** | Docker konteiner (`qdrant`) | port 6333-6334 |
- | **SearXNG** | Docker konteiner (`searxng`) | port 8888 |
- | **PostgreSQL** | Docker konteiner (`postgres_postgis`) | port 5432 |
- **NB!** Ollama EI OLE enam Dockeris. See jookseb native systemd teenusena koos ROCm GPU toega.
- Vana Dockeri konteiner (`ollama-rocm`) on eemaldatud.
- ## GPU / ROCm
- Server: **AZW GTR Pro** mini-PC
- - CPU: AMD Ryzen AI Max+ 395 (16C/32T, Zen 5)
- - GPU: AMD Radeon 8060S (RDNA 3.5, gfx1151, 40 CU)
- - ROCm: 7.2.2 installeeritud hostil (`/opt/rocm/`)
- - NPU: AMD RyzenAI (aie2p) – hetkel kasutamata
- ROCm teegid on registreeritud süsteemis:
- # Kontrolli GPU olekut
- rocm-smi
- rocminfo
- cat /sys/class/drm/card1/device/gpu_busy_percent
- # ROCm teegid
- ls /opt/rocm/lib/libamdhip64*
- ldconfig -p | grep amdhip64
- ## Ollama haldus (native, systemd)
- Ollama teenus jookseb hostil `ollama.service` nimega:
- # Ollama teenuse olek
- sudo systemctl status ollama
- # Taaskäivita
- sudo systemctl restart ollama
- # Logid
- journalctl -u ollama -f
- journalctl -u ollama --no-pager -n 50
- # Kontrolli GPU tuvastust
- journalctl -u ollama --no-pager | grep -iE 'gpu|rocm|gfx|inference'
- # Kasuta ollama CLI-d
- ollama list # mudelite nimekiri
- ollama ps # hetkel laetud mudelid
- ollama show <nimi> # mudeli detailid
- Teenuse konfiguratsioon:
- - Service fail: `/etc/systemd/system/ollama.service`
- - Override: `/etc/systemd/system/ollama.service.d/override.conf`
- - Mudelite asukoht: `/home/ardo/.ollama/models`
- - Kasutaja: `ollama` (grupid: `render`, `video`, `ardo`)
- - GPU override: `HSA_OVERRIDE_GFX_VERSION=11.5.1`
- - ROCm teegid: `LD_LIBRARY_PATH=/opt/rocm/lib`
- ### Paigaldatud mudelid
- | Mudel | Suurus | Kasutus |
- |-------|--------|---------|
- | `nomic-embed-text:latest` | 274 MB | **RAG embedding (GPU)** |
- | `qwen3:30b-fast` | 18 GB | LLM vestlus |
- | `deepseek-r1:14b` | 9.0 GB | LLM vestlus (reasoning) |
- | `translategemma:12b` | 8.1 GB | Tõlkimine |
- | `bge-m3:latest` | 1.2 GB | Varu-embedding |
- ### Mudelite haldus
- # Lae mudel
- ollama pull qwen3:30b-fast
- # Eemalda mudel
- ollama rm nomic-embed-text-cpu
- # Testi mudelit (verbose näitab tok/sek)
- ollama run nomic-embed-text "test" --verbose
- ## Embedding konfiguratsioon (RAG)
- OpenWebUI embeddingud on seadistatud kasutama **nomic-embed-text:latest** mudelit
- koos GPU kiirendusega. **Ära kasuta** `nomic-embed-text-cpu` mudelit – see on
- ainult CPU jaoks (`num_gpu=0`) ja oluliselt aeglasem.
- Compose failis: `RAG_EMBEDDING_MODEL=nomic-embed-text`
- ### Jõudluse võrdlus
- | Mõõdik | CPU mudel (-cpu) | GPU mudel (latest) | Kiirendus |
- |--------|-------------------|---------------------|-----------|
- | 901 embedit (batch) | ~39 s | ~9.5 s | **4x** |
- | 848 embedit (batch) | ~39 s | ~8.1 s | **5x** |
- | Üksik API päring | ~28 s | ~0.3 s | **100x** |
- ### Embedding API test
- # Testi embeddingut
- curl http://localhost:11434/api/embeddings -d '{
- "model": "nomic-embed-text",
- "prompt": "How to implement semantic search with Python"
- }'
- ### Vektorbaasi puhastamine
- # Qdrant kollektsiooni kustutamine
- curl -X DELETE http://qdrant:6333/collections/open-webui_files
- # Läbi OpenWebUI skripti
- docker exec -ti open-webui bash -c "python /scripts/clean_qdrant.py"
- ## Seadistus
- Kasutab:
- - **Ollama** (native, systemd) – LLM mudelid ja embeddingud
- - **SearXNG** – Veebiotsing
- - **Qdrant** – Vektorbaas (väljaspool seda compose'i)
- - **PostgreSQL** – Andmebaas
- Olulised keskkonnamuutujad compose failis:
- - `USE_OLLAMA_DOCKER=false` – väldib OpenWebUI sisemist ollama käivitust
- - `RAG_EMBEDDING_MODEL=nomic-embed-text` – GPU embedding mudel
- - `RAG_EMBEDDING_ENGINE=ollama` – embedding API läbi ollama
- - `OLLAMA_API_BASE_URL=http://100.87.1.24:11434` – ollama API
- - `VECTOR_DB=qdrant` – vektorbaasi tüüp
- ## Docker käsud
- # Ava kaust
- cd /opt/docker-compose/third/server/openwebui/
- # Käivita (ainult open-webui teenus)
- docker-compose up -d open-webui
- # Käivita kõik teenused
- docker-compose up -d
- # Peata
- docker-compose down
- # Taaskäivita
- docker-compose restart open-webui
- # Logid (ainult open-webui)
- docker-compose logs -f open-webui
- # Logid (kõik)
- docker-compose logs -f
- # Uuenda
- docker-compose pull open-webui
- docker-compose up -d open-webui
- ## Docker otse
- # Konteinerite seis
- docker ps | grep -E "open-webui|tika|mcp"
- # Logid nime järgi
- docker logs open-webui
- docker logs tika
- # Sisene konteinerisse
- docker exec -it open-webui /bin/bash
- docker exec -it tika /bin/bash
- ## Teenused
- | Teenus | Port | URL |
- |--------|------|-----|
- | Open WebUI | 3010 | http://100.87.1.24:3010 |
- | Ollama API | 11434 | http://100.87.1.24:11434 (native, mitte Docker) |
- | MCP Filesystem | 3100 | http://127.0.0.1:3100/mcp (ainult localhost) |
- | MCP Terminal | 3110 | http://127.0.0.1:3110/mcp (ainult localhost) |
- | Apache Tika | 9998 | http://100.87.1.24:9998 |
- ## Tervisekontroll
- Open WebUI kontrollib iseenda tervist iga 30 sekundi järel:
- # Testi käsitsi
- curl http://100.87.1.24:3010/health
- # Ollama tervisekontroll
- curl http://100.87.1.24:11434/api/tags
- ## Olulised kataloogid
- | Asukoht | Sisu |
- |---------|------|
- | `/opt/docker-compose/third/server/openwebui/` | Compose failid ja see dokument |
- | `/data/docker/open-webui/scripts` | Skriptid |
- | `/backups/docker/open-webui` | Varukoopiad |
- | `/home/ardo/.ollama/models` | Ollama mudelid (35 GB) |
- | `/opt/rocm/` | ROCm installatsioon |
- | `/etc/systemd/system/ollama.service` | Ollama systemd teenus |
- | `/etc/systemd/system/ollama.service.d/override.conf` | Ollama teenuse override |
- ## Fallback: Dockeri ollama taastamine
- Kui on vaja minna tagasi Dockeri ollama peale (nt probleemid native installiga):
- # Peata native ollama
- sudo systemctl stop ollama
- # Käivita Docker ollama (vana startup.sh põhjal)
- docker run -d --name ollama-rocm --restart unless-stopped --device /dev/kfd --device /dev/dri --security-opt seccomp=unconfined --security-opt label=disable -p 11434:11434 -v /home/ardo/.ollama/:/root/.ollama/ -e OLLAMA_HOST=0.0.0.0:11434 -e HSA_OVERRIDE_GFX_VERSION=11.5.1 -e OLLAMA_NUM_PARALLEL=4 ollama/ollama:rocm
- # Vajadusel muuda OpenWebUI compose failis:
- # USE_OLLAMA_DOCKER=true
- # ja taaskäivita:
- # docker-compose up -d open-webui
- ## MCP tööriistade kasutamine OpenWebUIs
- Vestluses ava `@` menüü või klõpsa `+` nuppu ja vali **Filesystem** või **Terminal**.
- ### @Filesystem — failihaldus (AI tööriist)
- | Tööriist | Näide |
- |----------|-------|
- | `list_directory` | `@Filesystem list directory path=/data` |
- | `read_file` | `@Filesystem read file path=/scripts/clean_qdrant.py` |
- | `write_file` | `@Filesystem write file path=/backups/märkmed.txt content="Tere!"` |
- | `search_files` | `@Filesystem search files path=/scripts pattern=*.py` |
- | `get_file_info` | `@Filesystem get file info path=/data` |
- | `create_directory` | `@Filesystem create directory path=/backups/test` |
- Lubatud kataloogid: `/data`, `/scripts`, `/backups`
- ### @Terminal — käsurida (AI tööriist)
- | Tööriist | Näide |
- |----------|-------|
- | `run_command` | `@Terminal run_command: docker ps` |
- | | `@Terminal run_command: df -h /` |
- | | `@Terminal run_command: docker logs open-webui --tail 20` |
- | | `@Terminal run_command: curl -s http://open-webui:8080/health` |
- | | `@Terminal run_command: uname -a` |
- Lubatud käsud: `ls`, `cat`, `grep`, `df`, `du`, `ps`, `docker ps/logs/inspect`, `curl`, `ping`, `uname`, `echo`, `stat`, `which`, `whoami`, `env`, `tree`, `find`, `head`, `tail`, `sort`, `uniq`, `file`, `free`, `uptime`, `id`, `date`, `host`
- Blokeeritud: `rm`, `sudo`, `shutdown`, `|` (torud), `$()`, `>`, `&&`, `docker rm/stop/kill`
- Näidisvestlus AI-ga:
- > **Sina:** "Vaata, mis toimub – docker logs open-webui --tail 10"
- > **AI:** (kasutab @Terminal run_command) "Siin on viimased logiread..."
- >
- > **Sina:** "Leia /scripts kataloogist kõik Python skriptid"
- > **AI:** (kasutab @Filesystem search_files) "Leidsin faili clean_qdrant.py"
- ## Tailscale MCP serverite eksponeerimiseks
- MCP serverid on seotud ainult `127.0.0.1`-ga (turvalisuse mõttes).
- Kui vajad neile ligipääsu läbi Tailscale'i, kasuta:
- # MCP Filesystem (Streamable HTTP)
- sudo tailscale serve --bg --https 3100 http://127.0.0.1:3100
- # MCP Terminal (Streamable HTTP)
- sudo tailscale serve --bg --https 3110 http://127.0.0.1:3110
- # Kontrolli staatust
- sudo tailscale serve status
- # Keela
- sudo tailscale serve --https=3100 off
- sudo tailscale serve --https=3110 off
- Pärast seda on MCP serverid kättesaadavad:
- - `https://100.87.1.24:3100/mcp`
- - `https://100.87.1.24:3110/mcp`
- **NB!** Brauseris `/sse` avamine ei tööta, sest SSE on püsiv ühendus (Streamable HTTP),
- mitte tavalise GET-päringuga laetav leht. MCP klient (OpenWebUI) haldab ühendust ise.
- ## Võrguinfo
- - Kõik konteinerid on `main_ai_network` peal (compose'is `ai_network`)
- - Ligipääs Ollamale, SearXNG-le ja Qdrantile läbi `host.docker.internal`
- - `extra_hosts` on seadistatud compose failis
- ## Vead ja tõrkeotsing
- ### Embedimine aeglane
- - Kontrolli, et `RAG_EMBEDDING_MODEL=nomic-embed-text` (ilma `-cpu`-ta)
- - Kontrolli `ollama ps` – peaks näitama "100% GPU"
- - Kui mudel on `nomic-embed-text-cpu`, eemalda see: `ollama rm nomic-embed-text-cpu`
- - Kontrolli GPU olekut: `cat /sys/class/drm/card1/device/gpu_busy_percent`
- ### Failide üleslaadimine ebaõnnestub – "Too many open files"
- - Põhjus: compose failis puudub `ulimits:` seadistus, Dockeri vaikimisi limiit on 1024
- - Lahendus: kontrolli, et compose failis on `ulimits.nofile.soft=65536` ja `hard=65536`
- - Kontrolli konteineri limiiti: `docker exec open-webui cat /proc/1/limits | grep "open files"`
- - Peaks näitama: `Max open files 65536 65536`
- ### Ollama ei leia GPU-d
- # Kontrolli ROCm teeke
- ldconfig -p | grep amdhip64
- # Kontrolli HSA override
- journalctl -u ollama --no-pager | grep HSA_OVERRIDE
- # Taaskäivita ollama
- sudo systemctl restart ollama
- # Kontrolli logisid
- journalctl -u ollama -f | grep -i gpu
- ### OpenWebUI ei ühendu Ollamaga
- # Testi ollama API-t
- curl http://100.87.1.24:11434/api/tags
- # Kontrolli compose faili
- grep OLLAMA /opt/docker-compose/third/server/open-webui/docker-compose.yml
- # Taaskäivita OpenWebUI
- cd /opt/docker-compose/third/server/openwebui/
- docker-compose restart open-webui
- ## Ajalugu
- | Kuupäev | Muudatus |
- |---------|----------|
- | 2025-07-05 | Ollama viidud Dockerist native systemd peale (ROCm GPU tugi) |
- | 2025-07-05 | Embedding mudel muudetud `nomic-embed-text-cpu` -> `nomic-embed-text:latest` |
- | 2025-07-05 | Lisatud `USE_OLLAMA_DOCKER=false` compose faili |
- | 2025-07-05 | `startup.sh` OpenWebUI osa asendatud docker-compose haldusega |
- | 2025-07-05 | Lisatud `ulimits.nofile=65536` compose faili (parandab "Too many open files") |
|