version: '3.8' services: # --- THE BRAIN (Backend Only) --- ollama: image: ollama/ollama:rocm networks: - ai_internal deploy: replicas: 1 placement: constraints: - node.labels.gpu == true restart_policy: condition: on-failure # --- HARDWARE PERMISSIONS (The Missing Link) --- # Grant the container permission to lock memory and talk to drivers cap_add: - IPC_LOCK - SYS_PTRACE - SYS_ADMIN - SYS_RESOURCE - SYS_NICE # Add the container to the Host's 'video' (44) and 'render' (993) groups # group_add: # - "44" # - "993" user: root devices: # Map Host 'card1' (AMD) -> Container 'card0' (So it looks like Default GPU) - /dev/dri/card1:/dev/dri/card0 - /dev/dri/renderD128:/dev/dri/renderD128 - /dev/kfd:/dev/kfd volumes: - /mnt/local-ssd/docker/ollama:/root/.ollama environment: - HSA_OVERRIDE_GFX_VERSION=10.3.0 # Now that we spoofed card0, we tell ROCm to use Device 0 - ROCR_VISIBLE_DEVICES=0 - OLLAMA_HOST=0.0.0.0 - OLLAMA_KEEP_ALIVE=5m - OLLAMA_DEBUG=1 # --- UI 1: Open WebUI (HP Mini 1) --- openwebui: image: ghcr.io/open-webui/open-webui:main networks: - ai_internal - proxy ports: - "3000:8080" environment: - OLLAMA_BASE_URL=http://ollama:11434 volumes: # BIND MOUNT: Easy to backup config/users - /home/phunter/docker-data/openwebui:/app/backend/data deploy: placement: constraints: - node.role == manager # --- UI 2: AnythingLLM (HP Mini 1) --- anythingllm: image: mintplexlabs/anythingllm networks: - ai_internal - proxy ports: - "3001:3001" environment: - STORAGE_DIR=/app/server/storage - LLM_PROVIDER=ollama - OLLAMA_BASE_PATH=http://ollama:11434 - OLLAMA_MODEL_PREF=llama3 volumes: # BIND MOUNT: Easy to backup PDFs/Workspaces - /home/phunter/docker-data/anythingllm:/app/server/storage deploy: placement: constraints: - node.role == manager # --- UI 3: Lobe Chat (HP Mini 1) --- lobechat: image: lobehub/lobe-chat networks: - ai_internal - proxy ports: - "3210:3210" environment: - OLLAMA_PROXY_URL=http://ollama:11434/v1 deploy: placement: constraints: - node.role == manager networks: ai_internal: driver: overlay attachable: true proxy: external: true