diff --git a/ai-llm/docker-compose.yml b/ai-llm/docker-compose.yml new file mode 100644 index 0000000..b35d407 --- /dev/null +++ b/ai-llm/docker-compose.yml @@ -0,0 +1,74 @@ +# ~/docker/ai-llm/docker-compose.yml +# +# ═══════════════════════════════════════════════════════════════════════════════ +# USAGE +# ═══════════════════════════════════════════════════════════════════════════════ +# +# Before starting this stack, stop InvokeAI via the portal. +# +# Start: +# cd ~/docker/ai-llm && docker compose up -d +# +# Pull models (run once per model): +# docker exec ai-llm-ollama-1 ollama pull qwen2.5-coder:7b +# docker exec ai-llm-ollama-1 ollama pull qwen2.5:7b +# docker exec ai-llm-ollama-1 ollama pull llava:7b +# +# Open WebUI → https://chat.mydomain.com +# +# After starting, enable web search in Open WebUI: +# Settings → Web Search → Enable → SearXNG → http://searxng:8080 +# ═══════════════════════════════════════════════════════════════════════════════ + +services: + + # ── Ollama ─────────────────────────────────────────────────────────────────── + ollama: + image: ollama/ollama:latest + pull_policy: missing + environment: + - TZ=America/New_York + volumes: + - ./data/ollama:/root/.ollama + ports: + - "11434:11434" + deploy: + resources: + reservations: + devices: + - driver: nvidia + count: 1 + capabilities: [gpu] + restart: unless-stopped + + # ── Open WebUI ─────────────────────────────────────────────────────────────── + open-webui: + image: ghcr.io/open-webui/open-webui:user0 + pull_policy: missing + volumes: + - ./data/open-webui:/app/backend/data + ports: + - "3000:8080" + environment: + - TZ=America/New_York + - OLLAMA_BASE_URL=http://ollama:11434 + - SEARXNG_QUERY_URL=http://searxng:8080/search?q=&format=json + depends_on: + - ollama + - searxng + restart: unless-stopped + + # ── SearXNG ────────────────────────────────────────────────────────────────── + # Privacy-respecting meta search — no API key needed + # Open WebUI Settings → Web Search → SearXNG → http://searxng:8080 + searxng: + image: searxng/searxng:latest + pull_policy: missing + volumes: + - ./data/searxng:/etc/searxng + environment: + - TZ=America/New_York + - SEARXNG_BASE_URL=http://searxng:8080 + expose: + - 8080 + restart: unless-stopped