Author the docker-compose stack (llama.cpp + Open WebUI + Qdrant + Lazytainer) #4

Closed
opened 2026-08-24 10:09:57 +00:00 by haylan · 1 comment
Owner

Part of #1
Blocked by: #2, #3

Question

Author docker-compose.yml, .env.example, and a model-download helper script implementing the locked decisions on the map (#1): llama.cpp (ROCm/HIP, gfx1201) serving the confirmed Qwen3.8-27B quant from #2 with its Anthropic Messages API shim enabled per #3's findings; Open WebUI (login-enabled, RAG+Memory pointed at Qdrant); a standalone Qdrant service; Lazytainer fronting the llama.cpp container with a 15 min idle timeout; named Docker volumes for all model/service data (no host bind-mounts); ROCm GPU device passthrough (/dev/kfd, /dev/dri) wired correctly for the container. This is the task that turns the map's decisions into a working stack in the repo.

Part of #1 Blocked by: #2, #3 ## Question Author `docker-compose.yml`, `.env.example`, and a model-download helper script implementing the locked decisions on the map (#1): llama.cpp (ROCm/HIP, gfx1201) serving the confirmed Qwen3.8-27B quant from #2 with its Anthropic Messages API shim enabled per #3's findings; Open WebUI (login-enabled, RAG+Memory pointed at Qdrant); a standalone Qdrant service; Lazytainer fronting the llama.cpp container with a 15 min idle timeout; named Docker volumes for all model/service data (no host bind-mounts); ROCm GPU device passthrough (/dev/kfd, /dev/dri) wired correctly for the container. This is the task that turns the map's decisions into a working stack in the repo.
haylan added the wayfinder:task label 2026-08-24 10:09:57 +00:00
haylan added a new dependency 2026-08-24 10:10:27 +00:00
haylan self-assigned this 2026-08-24 10:58:41 +00:00
Author
Owner

Resolved. Authored docker-compose.yml, .env.example, scripts/download-model.sh, and a top-level README.md quickstart — committed on main (f0e4730).

  • llama-server: ghcr.io/ggml-org/llama.cpp:server-rocm (gfx1201-supported), ROCm device passthrough (/dev/kfd, /dev/dri, video/render groups), serving Qwen3.8-27B-UD-Q4_K_XL.gguf from #2. Port 8080 published to the host for direct Claude Code CLI / Kimi CLI access, alongside Open WebUI's internal use.
  • open-webui: WEBUI_AUTH=True, wired to llama-server's OpenAI-compatible endpoint, VECTOR_DB=qdrant + QDRANT_URI. Note: Open WebUI has no env var to seed an admin account — the first signup becomes admin, documented in the README.
  • qdrant: standalone service, own named volume, per the map's decision.
  • lazytainer: labels on llama-server (sleepMethod=stop, 15 min inactiveTimeout, configurable via .env).
  • downloader: one-off compose profile (--profile tools run downloader) pulling the confirmed GGUF straight into the models named volume — no host bind-mount, no extra host tooling needed. Wrapped by scripts/download-model.sh.
  • All persistent state in named volumes (models, qdrant-data, openwebui-data) — no host bind-mounts, per the map's decision.

docker compose config validates. Not yet tested against real hardware — that's #5.

Resolved. Authored `docker-compose.yml`, `.env.example`, `scripts/download-model.sh`, and a top-level `README.md` quickstart — committed on `main` (f0e4730). - **llama-server**: `ghcr.io/ggml-org/llama.cpp:server-rocm` (gfx1201-supported), ROCm device passthrough (`/dev/kfd`, `/dev/dri`, `video`/`render` groups), serving `Qwen3.8-27B-UD-Q4_K_XL.gguf` from #2. Port 8080 published to the host for direct Claude Code CLI / Kimi CLI access, alongside Open WebUI's internal use. - **open-webui**: `WEBUI_AUTH=True`, wired to llama-server's OpenAI-compatible endpoint, `VECTOR_DB=qdrant` + `QDRANT_URI`. Note: Open WebUI has no env var to seed an admin account — the first signup becomes admin, documented in the README. - **qdrant**: standalone service, own named volume, per the map's decision. - **lazytainer**: labels on `llama-server` (`sleepMethod=stop`, 15 min `inactiveTimeout`, configurable via `.env`). - **downloader**: one-off compose profile (`--profile tools run downloader`) pulling the confirmed GGUF straight into the `models` named volume — no host bind-mount, no extra host tooling needed. Wrapped by `scripts/download-model.sh`. - All persistent state in named volumes (`models`, `qdrant-data`, `openwebui-data`) — no host bind-mounts, per the map's decision. `docker compose config` validates. **Not yet tested against real hardware** — that's #5.
Sign in to join this conversation.