{"slug": "open-webui-ollama-hugging-face-on-macos-and-windows", "title": "Open WebUI + Ollama + Hugging Face on macOS and Windows", "summary": "A developer has published a practical guide for setting up a local AI troubleshooting and support environment on macOS and Windows using Open WebUI, Ollama, and Hugging Face. The recommended architecture runs Ollama natively on the host OS for hardware acceleration (Apple Metal, CUDA, or ROCm) while Open WebUI runs in Docker, communicating via host.docker.internal. The guide covers installation steps, prerequisites, and verification commands for both platforms.", "body_md": "A practical setup guide for running a local AI troubleshooting and support environment on either macOS or Windows using:\n\n**Open WebUI** for the browser-based chat interface**Ollama** as the local model runtime**Hugging Face** as an optional source for GGUF models**Docker Compose** for running Open WebUI**Apple Silicon / Metal** acceleration through native Ollama\n\nRecommended architecture on macOS: run\n\nOllama natively on the Macand runOpen WebUI in Docker. This allows Ollama to use Apple Metal acceleration while Open WebUI stays containerized.\n\nThe recommended design on both macOS and Windows is to run **Ollama natively on the host operating system** and run **Open WebUI in Docker Desktop**.\n\n``` php\nflowchart TD\n    A[Browser] -->|http://localhost:3000| B[Open WebUI]\n    B -->|Docker host bridge| C[Ollama API]\n    C --> D[Local LLM]\n    D --> E{Host Hardware}\n    E -->|macOS| F[Apple Metal / Unified Memory]\n    E -->|Windows NVIDIA| G[CUDA]\n    E -->|Windows AMD| H[ROCm / Vulkan where supported]\n    E -->|CPU fallback| I[CPU]\n```\n\nThe network path is:\n\n```\nsequenceDiagram\n    participant U as User Browser\n    participant W as Open WebUI Container\n    participant O as Ollama on Host\n    participant M as Local Model\n\n    U->>W: Prompt via http://localhost:3000\n    W->>O: API request to host.docker.internal:11434\n    O->>M: Run inference\n    M-->>O: Generated tokens\n    O-->>W: Stream response\n    W-->>U: Display response\n```\n\n`host.docker.internal`\n\nis the important hostname here. It allows the Open WebUI container to reach Ollama running on the Windows or macOS host.\n\nYou need:\n\n- Docker Desktop\n- Docker Compose v2\n- Ollama\n- Sufficient RAM / unified memory\n- Free disk space for model files\n- A supported version of macOS or Windows\n\nThe installation path depends on your operating system.\n\n``` php\nflowchart LR\n    A[Start] --> B{Operating System}\n    B -->|macOS| C[Install Docker Desktop for Mac]\n    C --> D[Install Ollama for macOS]\n    B -->|Windows| E[Enable / Update WSL 2]\n    E --> F[Install Docker Desktop for Windows]\n    F --> G[Install Ollama for Windows]\n    D --> H[Verify Docker + Ollama]\n    G --> H\n    H --> I[Pull Model]\n    I --> J[Deploy Open WebUI]\n```\n\nCurrent Ollama documentation requires:\n\n**macOS Sonoma 14 or newer**- Apple M-series Macs support CPU and GPU acceleration.\n- Intel Macs can run Ollama using CPU execution.\n\nCheck your version:\n\n```\nsw_vers\n```\n\nCheck your hardware:\n\n```\nsystem_profiler SPHardwareDataType | grep -E \"Chip|Processor Name|Memory\"\n```\n\nExample:\n\n```\nChip: Apple M3 Pro\nMemory: 36 GB\n```\n\nHomebrew is useful for command-line tools such as Git, `wget`\n\n, `jq`\n\n, and other utilities.\n\nCheck whether it is installed:\n\n```\nbrew --version\n```\n\nIf it is not installed:\n\n```\n/bin/bash -c \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\"\n```\n\nFollow the PATH instructions printed by the Homebrew installer.\n\nVerify:\n\n```\nbrew --version\nbrew install git jq wget\n```\n\nVerify:\n\n```\ngit --version\njq --version\nwget --version\n```\n\nDocker Desktop supports current and recent macOS releases and requires at least 4 GB of RAM, although running local LLMs generally requires considerably more memory.\n\n- Download\n**Docker Desktop for Mac** from: - Select the correct build:\n- Apple Silicon\n- Intel\n\n- Open\n`Docker.dmg`\n\n. - Drag Docker into\n`/Applications`\n\n. - Launch Docker Desktop.\n- Accept the Docker Desktop agreement.\n- Use the recommended settings unless you have a reason to customize them.\n\nIf Homebrew is available:\n\n```\nbrew install --cask docker\n```\n\nLaunch it:\n\n```\nopen -a Docker\n```\n\nWait until Docker Desktop reports that the engine is running.\n\nVerify:\n\n```\ndocker --version\ndocker compose version\ndocker info\n```\n\nOn Apple Silicon, most of this stack runs natively. Some AMD64-only tools may still require Rosetta.\n\nInstall it if needed:\n\n```\nsoftwareupdate --install-rosetta --agree-to-license\n```\n\nYou generally do **not** need Rosetta just to run Ollama and Open WebUI.\n\nCurrent Ollama documentation requires:\n\n**Windows 10 22H2 or newer**, Home or Pro- NVIDIA users should keep GPU drivers current.\n- AMD acceleration depends on supported ROCm/HIP or Vulkan-capable drivers.\n\nCheck Windows version:\n\n```\nwinver\n```\n\nOr:\n\n```\nGet-ComputerInfo | Select-Object WindowsProductName, WindowsVersion, OsBuildNumber\n```\n\nWindows Terminal provides a better PowerShell and command-line experience.\n\nWith `winget`\n\n:\n\n```\nwinget install --id Microsoft.WindowsTerminal -e\nwinget install --id Git.Git -e\n```\n\nVerify in a new terminal:\n\n```\ngit --version\n```\n\nDocker Desktop normally uses the WSL 2 backend for Linux containers.\n\nOpen **PowerShell as Administrator**:\n\n```\nwsl --install\n```\n\nRestart Windows if requested.\n\nAfter reboot:\n\n```\nwsl --update\nwsl --status\n```\n\nCheck installed distributions:\n\n```\nwsl --list --verbose\n```\n\nYou should see WSL version `2`\n\nfor your Linux distribution.\n\nIf necessary:\n\n```\nwsl --set-default-version 2\n```\n\n- Download Docker Desktop from:\n- Run\n`Docker Desktop Installer.exe`\n\n. - For most users, select the\n**WSL 2 backend**. - Complete installation.\n- Start Docker Desktop.\n- Accept the Docker Desktop agreement.\n\n```\nwinget install --id Docker.DockerDesktop -e\n```\n\nStart Docker Desktop from the Start menu.\n\nVerify in PowerShell:\n\n```\ndocker --version\ndocker compose version\ndocker info\n```\n\nIf Docker commands fail immediately after installation, close and reopen Windows Terminal or PowerShell.\n\nFor NVIDIA:\n\n```\nnvidia-smi\n```\n\nIf the command is unavailable, install or update the NVIDIA driver before expecting GPU acceleration.\n\nFor AMD, use the current AMD driver package appropriate for your GPU.\n\nOllama itself runs natively on Windows. You do not need to place Ollama inside WSL for the setup in this guide.\n\nBefore continuing, all of these should work.\n\n```\ndocker --version\ndocker compose version\nollama --version\ndocker --version\ndocker compose version\nollama --version\n```\n\nAfter Ollama is started, verify its API.\n\n```\ncurl http://localhost:11434/api/version\nInvoke-RestMethod http://localhost:11434/api/version\n```\n\nExpected conceptually:\n\n```\n{\n  \"version\": \"...\"\n}\n```\n\nThe preferred official macOS installation is the Ollama application.\n\nDownload it from:\n\n```\nhttps://ollama.com/download\n```\n\nInstall `Ollama.app`\n\nin:\n\n```\n/Applications\n```\n\nLaunch it:\n\n```\nopen -a Ollama\n```\n\nOn first launch, Ollama can create the `ollama`\n\nCLI link in:\n\n```\n/usr/local/bin/ollama\n```\n\nIf you already used the shell installer:\n\n```\ncurl -fsSL https://ollama.com/install.sh | sh\n```\n\nverify:\n\n```\nollama --version\n```\n\nIf the CLI exists but the service is not running, you may see:\n\n```\nWarning: could not connect to a running Ollama instance\n```\n\nStart the application:\n\n```\nopen -a Ollama\n```\n\nor start the server manually:\n\n```\nollama serve\n```\n\nVerify:\n\n```\ncurl http://localhost:11434/api/version\n```\n\nThe simplest supported method is the native Windows installer.\n\nDownload:\n\n```\nhttps://ollama.com/download\n```\n\nRun:\n\n```\nOllamaSetup.exe\n```\n\nOllama installs into the current user's profile by default and makes the `ollama`\n\ncommand available to PowerShell, Command Prompt, and Windows Terminal.\n\nAfter installation, open a **new PowerShell window**:\n\n```\nollama --version\n```\n\nOllama normally runs in the background.\n\nVerify the API:\n\n```\nInvoke-RestMethod http://localhost:11434/api/version\n```\n\nIf Ollama is not running, launch it from the Start menu.\n\nYou can also start the server explicitly:\n\n```\nollama serve\n```\n\nBy default, downloaded models are stored under your user profile.\n\nIf you want models on a larger disk, create the user environment variable:\n\n```\nOLLAMA_MODELS\n```\n\nFor example:\n\n```\nD:\\AI\\Models\\Ollama\n```\n\nAfter changing the variable, completely exit Ollama and relaunch it.\n\n```\nollama --version\nollama list\ncurl http://localhost:11434/api/tags\nollama --version\nollama list\nInvoke-RestMethod http://localhost:11434/api/tags\n```\n\nCheck running processes:\n\n```\nps aux | grep -i ollama\n```\n\nCheck the local port:\n\n```\nlsof -i :11434\n```\n\nCheck the API:\n\n```\ncurl http://localhost:11434/api/tags\n```\n\nA successful response looks roughly like:\n\n```\n{\n  \"models\": []\n}\n```\n\nAn empty model list is fine if you have not downloaded a model yet.\n\nFor technical support, troubleshooting, cloud, Kubernetes, shell commands, code analysis, and customer-facing explanations, a strong starting point is **Qwen3**.\n\nSuggested sizing:\n\n| Mac Unified Memory | Suggested Starting Model |\n|---|---|\n| 8 GB | Qwen3 1.7B–4B |\n| 16 GB | Qwen3 4B–8B |\n| 24 GB | Qwen3 8B–14B |\n| 32 GB | Qwen3 14B or larger quantized models |\n| 64 GB+ | Larger 30B-class quantized models |\n\nFor most MacBooks with 16 GB or more:\n\n```\nollama pull qwen3:8b\n```\n\nFor a lower-memory machine:\n\n```\nollama pull qwen3:4b\n```\n\nFor a more capable machine:\n\n```\nollama pull qwen3:14b\n```\n\nList installed models:\n\n```\nollama list\n```\n\nTest the model:\n\n```\nollama run qwen3:8b\n```\n\nTry:\n\n```\nYou are a senior cloud support engineer.\n\nAnalyze the following error. Separate confirmed facts from assumptions,\nidentify likely root causes, provide validation steps, and explain what\ninformation should be requested from the customer.\n\nError:\nconnection refused to localhost:443\n```\n\nExit Ollama chat with:\n\n```\n/bye\n```\n\nCreate a working directory:\n\n```\nmkdir -p ~/open-webui\ncd ~/open-webui\n```\n\nThe final layout will look like:\n\n```\n~/open-webui/\n├── compose.yaml\n├── .env\n└── .gitignore\n```\n\nGenerate a secret:\n\n```\nopenssl rand -hex 32\n```\n\nCreate `.env`\n\n:\n\n```\nnano .env\n```\n\nAdd:\n\n```\nWEBUI_SECRET_KEY=PASTE_YOUR_GENERATED_SECRET_HERE\n```\n\nSave and exit.\n\nFor `nano`\n\n:\n\n```\nCtrl+O\nEnter\nCtrl+X\n```\n\nProtect the environment file from accidental Git commits:\n\n```\nprintf \".env\\n*.gguf\\n\" > .gitignore\n```\n\nCreate the Compose file:\n\n```\nnano compose.yaml\n```\n\nPaste:\n\n```\nservices:\n  open-webui:\n    image: ghcr.io/open-webui/open-webui:main\n    container_name: open-webui\n    restart: unless-stopped\n\n    environment:\n      OLLAMA_BASE_URL: http://host.docker.internal:11434\n      WEBUI_AUTH: \"true\"\n      WEBUI_SECRET_KEY: ${WEBUI_SECRET_KEY}\n\n    volumes:\n      - open-webui-data:/app/backend/data\n\n    ports:\n      - \"3000:8080\"\n\nvolumes:\n  open-webui-data:\n```\n\nSave the file.\n\nOllama is running directly on macOS.\n\nOpen WebUI is running inside a Linux Docker container.\n\nInside the container:\n\n```\nlocalhost\n```\n\nmeans the **Open WebUI container itself**, not your Mac.\n\nTherefore this will not work:\n\n```\nhttp://localhost:11434\n```\n\nThe Docker-provided hostname for reaching the Mac host is:\n\n```\nhost.docker.internal\n```\n\nTherefore Open WebUI should use:\n\n```\nhttp://host.docker.internal:11434\n```\n\nFrom:\n\n```\ncd ~/open-webui\n```\n\nstart the container:\n\n```\ndocker compose up -d\n```\n\nCheck its status:\n\n```\ndocker compose ps\n```\n\nExpected output will resemble:\n\n```\nNAME         IMAGE                                  STATUS\nopen-webui   ghcr.io/open-webui/open-webui:main    Up\n```\n\nCheck logs:\n\n```\ndocker compose logs -f open-webui\n```\n\nPress:\n\n```\nCtrl+C\n```\n\nto stop following the logs. This does **not** stop the container.\n\nOpen:\n\n```\nhttp://localhost:3000\n```\n\nOn macOS, you can also launch it from Terminal:\n\n```\nopen http://localhost:3000\n```\n\nOn Windows PowerShell:\n\n```\nStart-Process http://localhost:3000\n```\n\nOn first launch:\n\n- Create the initial account.\n- The first account normally becomes the administrator.\n- Open a new chat.\n- Select your Ollama model from the model selector.\n\nFor example:\n\n```\nqwen3:8b\n```\n\nFirst verify Ollama from macOS:\n\n```\ncurl http://localhost:11434/api/tags\n```\n\nThen verify it from inside the Open WebUI container:\n\n```\ndocker exec open-webui \\\n  curl http://host.docker.internal:11434/api/tags\n```\n\nIf both commands work, connectivity is correct.\n\nCheck locally installed models:\n\n```\nollama list\n```\n\nExample:\n\n```\nNAME          ID              SIZE\nqwen3:8b      abc123...       5.2 GB\n```\n\nRestart Open WebUI:\n\n```\ncd ~/open-webui\ndocker compose restart open-webui\n```\n\nThen reload:\n\n```\nhttp://localhost:3000\n```\n\nIf necessary, inspect:\n\n```\ndocker compose logs --tail=100 open-webui\n```\n\nVerify the environment variable:\n\n```\ndocker exec open-webui env | grep OLLAMA\n```\n\nExpected:\n\n```\nOLLAMA_BASE_URL=http://host.docker.internal:11434\n```\n\nYou do **not** need Hugging Face to use Ollama's normal model library.\n\nFor example:\n\n```\nollama pull qwen3:8b\n```\n\nis the simplest approach.\n\nHowever, you may want to download a specific quantized model from Hugging Face.\n\nFor Ollama on a MacBook, prefer **GGUF** models.\n\nExample filename:\n\n```\nQwen3-8B-Q4_K_M.gguf\n```\n\nQuantization names frequently include:\n\n```\nQ4_K_M\nQ5_K_M\nQ6_K\nQ8_0\n```\n\nFor MacBooks, `Q4_K_M`\n\nis often a useful balance between memory consumption and model quality.\n\nCreate a model directory:\n\n```\nmkdir -p ~/Models/my-support-model\ncd ~/Models/my-support-model\n```\n\nPlace your downloaded GGUF file there.\n\nExample:\n\n```\n~/Models/my-support-model/\n└── qwen3-8b-q4_k_m.gguf\n```\n\nCreate a `Modelfile`\n\n:\n\n```\nnano Modelfile\n```\n\nExample:\n\n```\nFROM ./qwen3-8b-q4_k_m.gguf\n\nPARAMETER temperature 0.3\nPARAMETER num_ctx 8192\n\nSYSTEM \"\"\"\nYou are a senior technical support engineer specializing in:\n\n- AWS\n- Azure\n- GCP\n- Kubernetes\n- Docker\n- Terraform\n- CI/CD\n- Linux\n- macOS\n- networking\n- identity and access management\n- security tooling\n- application troubleshooting\n\nWhen investigating technical issues:\n\n1. Separate confirmed evidence from assumptions.\n2. Do not invent undocumented product behavior.\n3. Identify the most likely root cause.\n4. Offer alternative hypotheses when appropriate.\n5. Give validation commands before recommending disruptive changes.\n6. Explain what logs, configuration, or screenshots are needed.\n7. Clearly distinguish workaround from permanent fix.\n8. Write customer-facing responses professionally and concisely.\n9. Avoid claiming engineering confirmation unless evidence exists.\n10. Call out uncertainty explicitly.\n\"\"\"\n```\n\nCreate the Ollama model:\n\n```\nollama create support-engineer -f Modelfile\n```\n\nVerify:\n\n```\nollama list\n```\n\nRun:\n\n```\nollama run support-engineer\n```\n\nThe model should also become available inside Open WebUI.\n\nFor a general-purpose support workflow, start with:\n\n```\nollama pull qwen3:8b\n```\n\nUse it for:\n\n- analyzing logs\n- Kubernetes troubleshooting\n- Terraform errors\n- Docker problems\n- shell commands\n- API errors\n- cloud configuration\n- IAM analysis\n- CI/CD debugging\n- customer response drafting\n- case summaries\n- troubleshooting plans\n\nIf memory permits, compare it against:\n\n```\nollama pull qwen3:14b\n```\n\nThe larger model may provide better reasoning but will consume more unified memory and run more slowly.\n\nYou can save the following as a system prompt in Open WebUI:\n\n```\nYou are a senior technical support engineer.\n\nYour job is to help investigate technical support cases accurately and\nconservatively.\n\nFor every investigation:\n\n1. Summarize the reported issue.\n2. Separate confirmed evidence from assumptions.\n3. Identify the most likely root cause.\n4. List alternative hypotheses when evidence is incomplete.\n5. Provide safe validation commands.\n6. Avoid destructive commands unless clearly labeled.\n7. Distinguish:\n   - expected behavior\n   - configuration issue\n   - product limitation\n   - suspected defect\n   - confirmed defect\n8. Clearly distinguish workaround from permanent resolution.\n9. Never invent internal tickets, engineering findings, documentation,\n   product behavior, or feature commitments.\n10. State confidence levels where appropriate.\n11. When asked for a customer response, write concise, professional,\n    technically accurate language without unnecessary internal details.\n```\n\nList models:\n\n```\nollama list\n```\n\nPull a model:\n\n```\nollama pull qwen3:8b\n```\n\nRun a model:\n\n```\nollama run qwen3:8b\n```\n\nShow model details:\n\n```\nollama show qwen3:8b\n```\n\nRemove a model:\n\n```\nollama rm qwen3:8b\n```\n\nShow running models:\n\n```\nollama ps\n```\n\nStart the Ollama API server:\n\n```\nollama serve\n```\n\nStart Open WebUI:\n\n```\ndocker compose up -d\n```\n\nStop Open WebUI:\n\n```\ndocker compose down\n```\n\nRestart:\n\n```\ndocker compose restart\n```\n\nCheck status:\n\n```\ndocker compose ps\n```\n\nFollow logs:\n\n```\ndocker compose logs -f open-webui\n```\n\nShow recent logs:\n\n```\ndocker compose logs --tail=100 open-webui\n```\n\nPull the newest Open WebUI image:\n\n```\ndocker compose pull\n```\n\nRecreate the container after updating:\n\n```\ndocker compose up -d\n```\n\nFrom the project directory:\n\n```\ncd ~/open-webui\ndocker compose pull\ndocker compose up -d\n```\n\nCheck:\n\n```\ndocker compose ps\n```\n\nYour conversations and configuration are retained in the Docker volume:\n\n```\nopen-webui-data\n```\n\nIf installed through the macOS application, update Ollama through its normal application update path.\n\nVerify afterward:\n\n```\nollama --version\n```\n\nConfirm the server:\n\n```\ncurl http://localhost:11434/api/version\n```\n\nOpen WebUI stores its persistent data in a Docker volume associated with your Compose project.\n\nSee the actual volume:\n\n```\ndocker volume ls | grep open-webui\n```\n\nCreate a backup directory:\n\n```\nmkdir -p ~/open-webui-backups\n```\n\nThen use the actual volume name returned above. For example:\n\n```\ndocker run --rm \\\n  -v open-webui_open-webui-data:/data \\\n  -v ~/open-webui-backups:/backup \\\n  alpine \\\n  tar czf /backup/open-webui-data.tar.gz -C /data .\n```\n\nThe exact Docker volume name may differ depending on the Compose project name. Run\n\n`docker volume ls`\n\nfirst and use the actual value.\n\nTo stop and remove the container while retaining data:\n\n```\ndocker compose down\n```\n\nTo delete the Open WebUI persistent volume too:\n\n```\ndocker compose down -v\n```\n\nWarning:`docker compose down -v`\n\ndeletes Open WebUI's stored application data for that Compose project, including local configuration and potentially chat history.\n\nCheck:\n\n```\nwhich ollama\n```\n\nTry:\n\n```\nls -l /usr/local/bin/ollama\n```\n\nIf necessary:\n\n```\nexport PATH=\"/usr/local/bin:$PATH\"\n```\n\nAdd permanently:\n\n```\necho 'export PATH=\"/usr/local/bin:$PATH\"' >> ~/.zshrc\nsource ~/.zshrc\n```\n\nStart Ollama:\n\n```\nopen -a Ollama\n```\n\nor:\n\n```\nollama serve\n```\n\nVerify:\n\n```\ncurl http://localhost:11434/api/version\n```\n\nCheck:\n\n```\ndocker compose ps\n```\n\nThen:\n\n```\ndocker compose logs --tail=100 open-webui\n```\n\nConfirm Docker Desktop is running.\n\nCheck whether port `3000`\n\nis already in use:\n\n```\nlsof -i :3000\n```\n\nIf another service is using port 3000, change:\n\n```\nports:\n  - \"3001:8080\"\n```\n\nThen access:\n\n```\nhttp://localhost:3001\n```\n\nVerify Ollama:\n\n```\ncurl http://localhost:11434/api/tags\n```\n\nVerify from the Docker container:\n\n```\ndocker exec open-webui \\\n  curl http://host.docker.internal:11434/api/tags\n```\n\nConfirm `compose.yaml`\n\ncontains:\n\n```\nenvironment:\n  OLLAMA_BASE_URL: http://host.docker.internal:11434\n```\n\nRestart:\n\n```\ndocker compose down\ndocker compose up -d\n```\n\nCheck memory:\n\n```\nsystem_profiler SPHardwareDataType | grep Memory\n```\n\nCheck running models:\n\n```\nollama ps\n```\n\nTry a smaller model:\n\n```\nollama pull qwen3:4b\n```\n\nAvoid having multiple memory-heavy applications open at the same time.\n\nCheck Activity Monitor or:\n\n```\nvm_stat\n```\n\nA model that technically loads may still perform poorly if macOS is heavily swapping.\n\nUse a smaller quantization or smaller model.\n\nWhen importing your own model:\n\n```\nPARAMETER num_ctx 16384\n```\n\nBe aware that larger context windows increase memory consumption.\n\nStart with:\n\n```\n8192\n```\n\nand increase only when necessary.\n\nFor a machine that is strictly local and never exposed to other systems, you could configure:\n\n```\nWEBUI_AUTH: \"false\"\n```\n\nHowever, leaving authentication enabled is generally safer:\n\n```\nWEBUI_AUTH: \"true\"\n```\n\nDo not disable authentication if Open WebUI is exposed to your LAN, a VPN, a tunnel, or the Internet.\n\nThe normal local endpoint is:\n\n```\nhttp://localhost:11434\n```\n\nThere is normally no need to publish Ollama publicly.\n\nYour desired design is:\n\n```\nLocal browser\n   |\n   v\nOpen WebUI\n   |\n   v\nOllama\n```\n\nIf remote access is required later, put authentication, TLS, and appropriate access controls in front of Open WebUI rather than exposing the Ollama API directly.\n\nFor reference, the basic workflow is:\n\n```\n# Install Ollama\ncurl -fsSL https://ollama.com/install.sh | sh\n\n# Start Ollama\nopen -a Ollama\n\n# Verify\ncurl http://localhost:11434/api/version\n\n# Download model\nollama pull qwen3:8b\n\n# Create Open WebUI project\nmkdir -p ~/open-webui\ncd ~/open-webui\n\n# Generate secret\nopenssl rand -hex 32\n```\n\nCreate `.env`\n\n:\n\n```\nWEBUI_SECRET_KEY=YOUR_SECRET\n```\n\nCreate `compose.yaml`\n\n:\n\n```\nservices:\n  open-webui:\n    image: ghcr.io/open-webui/open-webui:main\n    container_name: open-webui\n    restart: unless-stopped\n\n    environment:\n      OLLAMA_BASE_URL: http://host.docker.internal:11434\n      WEBUI_AUTH: \"true\"\n      WEBUI_SECRET_KEY: ${WEBUI_SECRET_KEY}\n\n    volumes:\n      - open-webui-data:/app/backend/data\n\n    ports:\n      - \"3000:8080\"\n\nvolumes:\n  open-webui-data:\n```\n\nStart:\n\n```\ndocker compose up -d\n```\n\nOpen:\n\n```\nopen http://localhost:3000\nphp\nflowchart TD\n    A[Install host prerequisites] --> B[Start Docker Desktop]\n    B --> C[Install and start Ollama]\n    C --> D[Verify localhost:11434]\n    D --> E[Pull or import a model]\n    E --> F[Test model with Ollama CLI]\n    F --> G[Create Open WebUI compose.yaml]\n    G --> H[docker compose up -d]\n    H --> I[Open localhost:3000]\n    I --> J{Model visible?}\n    J -->|Yes| K[Start using Open WebUI]\n    J -->|No| L[Test host.docker.internal:11434]\n    L --> M[Check OLLAMA_BASE_URL]\n    M --> N[Restart Open WebUI]\n    N --> J\nphp\nflowchart TD\n    A[Open WebUI problem] --> B{Does localhost:3000 load?}\n\n    B -->|No| C[docker compose ps]\n    C --> D{Container running?}\n    D -->|No| E[docker compose logs open-webui]\n    D -->|Yes| F[Check port 3000 conflict]\n\n    B -->|Yes| G{Is model listed?}\n    G -->|No| H[Run ollama list]\n    H --> I{Model installed?}\n    I -->|No| J[ollama pull model]\n    I -->|Yes| K[Test Ollama API]\n\n    K --> L{Host API works?}\n    L -->|No| M[Start or restart Ollama]\n    L -->|Yes| N[Test from Open WebUI container]\n\n    N --> O{Container reaches Ollama?}\n    O -->|No| P[Check host.docker.internal]\n    P --> Q[Check OLLAMA_BASE_URL]\n    Q --> R[Restart container]\n\n    O -->|Yes| S[Refresh Open WebUI connection/models]\nphp\nflowchart TD\n    A[Choose local model] --> B{Available RAM / Unified Memory}\n    B -->|8 GB| C[1B to 4B quantized model]\n    B -->|16 GB| D[4B to 8B quantized model]\n    B -->|24 GB| E[8B to 14B quantized model]\n    B -->|32 GB| F[14B or selected 30B quantized]\n    B -->|64 GB+| G[Larger 30B-class models]\n\n    C --> H[Test response quality]\n    D --> H\n    E --> H\n    F --> H\n    G --> H\n\n    H --> I{Fast enough?}\n    I -->|No| J[Use smaller model or quantization]\n    I -->|Yes| K{Quality sufficient?}\n    K -->|No| L[Try larger / specialized model]\n    K -->|Yes| M[Use in Open WebUI]\n```\n\nCheck each item:\n\n- Docker Desktop is running.\n-\n`ollama --version`\n\nworks. -\n`curl http://localhost:11434/api/version`\n\nworks. -\n`ollama list`\n\nshows at least one model. -\n`ollama run qwen3:8b`\n\nworks. -\n`docker compose ps`\n\nshows`open-webui`\n\nas running. -\n`http://localhost:3000`\n\nloads. - Open WebUI displays the Ollama model.\n- A test prompt returns a response.\n- Open WebUI persists after container restart.\n\n- Ollama macOS:\n[https://docs.ollama.com/macos](https://docs.ollama.com/macos) - Ollama Windows:\n[https://docs.ollama.com/windows](https://docs.ollama.com/windows) - Ollama downloads:\n[https://ollama.com/download](https://ollama.com/download) - Docker Desktop for Mac:\n[https://docs.docker.com/desktop/setup/install/mac-install/](https://docs.docker.com/desktop/setup/install/mac-install/) - Docker Desktop for Windows:\n[https://docs.docker.com/desktop/setup/install/windows-install/](https://docs.docker.com/desktop/setup/install/windows-install/) - Open WebUI Quick Start:\n[https://docs.openwebui.com/getting-started/quick-start/](https://docs.openwebui.com/getting-started/quick-start/) - Open WebUI + Ollama:\n[https://docs.openwebui.com/getting-started/quick-start/connect-a-provider/starting-with-ollama/](https://docs.openwebui.com/getting-started/quick-start/connect-a-provider/starting-with-ollama/)\n\nFor a macOS or Windows workstation used for technical support work:\n\n```\nOpen WebUI\n    |\n    +-- qwen3:8b          General troubleshooting/support\n    |\n    +-- Larger Qwen3      Optional, if enough unified memory\n    |\n    +-- Custom GGUF       Optional Hugging Face model\n```\n\nUse native Ollama for model execution and Docker Compose for Open WebUI.\n\nThat combination is simple, fast on Apple Silicon, easy to maintain, and does not require a Linux VM or NVIDIA GPU.", "url": "https://wpnews.pro/news/open-webui-ollama-hugging-face-on-macos-and-windows", "canonical_source": "https://gist.github.com/Richard-Barrett/24feee3cb9c3a555fa65f5981a69ce8c", "published_at": "2026-08-07 23:47:37+00:00", "updated_at": "2026-08-13 17:23:34.073779+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools", "ai-infrastructure"], "entities": ["Open WebUI", "Ollama", "Hugging Face", "Docker Desktop", "Apple Silicon", "Metal", "CUDA", "ROCm"], "alternates": {"html": "https://wpnews.pro/news/open-webui-ollama-hugging-face-on-macos-and-windows", "markdown": "https://wpnews.pro/news/open-webui-ollama-hugging-face-on-macos-and-windows.md", "text": "https://wpnews.pro/news/open-webui-ollama-hugging-face-on-macos-and-windows.txt", "jsonld": "https://wpnews.pro/news/open-webui-ollama-hugging-face-on-macos-and-windows.jsonld"}}