Files
localgenai/pyinfra/framework/compose/openwebui.yml
2026-06-08 15:31:50 +01:00

43 lines
1.9 KiB
YAML

# OpenWebUI — ChatGPT-like web UI in front of Ollama. Pre-configured to
# use the host's Ollama instance and Kagi for web search. Default port
# 3000.
#
# Persistent state (users, conversations, uploaded docs, RAG vector
# index) lives at /srv/docker/openwebui/data so backups touch one path.
#
# Sibling .env file holds KAGI_API_KEY (single shared key — opencode's
# kagimcp MCP on the Mac and this container use the same one). Same
# placeholder-then-fill-in-by-hand pattern as compose/beszel.yml and
# compose/litellm.yml.
services:
openwebui:
image: ghcr.io/open-webui/open-webui:main
container_name: openwebui
restart: unless-stopped
ports:
- "3000:8080"
extra_hosts:
# Lets the container reach Ollama on the host's :11434 without
# needing to share Docker networks.
- "host.docker.internal:host-gateway"
environment:
- OLLAMA_BASE_URL=http://host.docker.internal:11434
# vLLM (Kimi-Linear) exposed as an OpenAI-compatible backend. The
# model isn't strongly tool-trained — opencode's agentic system
# prompt confuses it. OpenWebUI's plain chat UI is the right home.
- OPENAI_API_BASE_URLS=http://host.docker.internal:8000/v1
- OPENAI_API_KEYS=dummy
# Built-in web search via Kagi. Kagi-specific env var name is
# KAGI_SEARCH_API_KEY (OpenWebUI's convention); kagimcp on the Mac
# uses KAGI_API_KEY (Kagi's official convention). We standardize on
# KAGI_API_KEY in the .env file and let compose interpolate it
# into OpenWebUI's expected name here.
- ENABLE_RAG_WEB_SEARCH=true
- RAG_WEB_SEARCH_ENGINE=kagi
- KAGI_SEARCH_API_KEY=${KAGI_API_KEY}
# Fallback (commented): the self-hosted SearXNG path. Re-enable by
# swapping RAG_WEB_SEARCH_ENGINE back to searxng and uncommenting:
# - SEARXNG_QUERY_URL=https://searxng.n0n.io/search?q=<query>&format=json
volumes:
- /srv/docker/openwebui/data:/app/backend/data