Back to Article List

How to install Open WebUI with Ollama

How to install Open WebUI with Ollama

Ollama's terminal chat is fine for testing a model and terrible for daily use. Open WebUI puts a proper interface in front of it: a ChatGPT-style chat window that runs in your browser and talks to your own models. This guide covers the three ways to install it and connects it to Ollama running locally, in Docker or on a remote server. It ends with the update routine and the connection errors you'll hit first.

What Open WebUI adds over the Ollama CLI

Four things justify the extra container. User accounts with roles, so a team or family shares one server without sharing one history. Persistent, searchable chat history across devices. Document uploads with built-in RAG, meaning you drop a PDF into the chat and ask questions against it. And a model switcher that makes comparing answers from, say, qwen3 and llama3.1 a two-click job instead of two terminals. There's plenty more in the Open WebUI repository (tools, functions, image generation hooks), but those four are why it became the default Ollama frontend.

Pick an install route

You have three options and I have a clear favorite. Separate Docker containers, Open WebUI in one and Ollama native or in its own, is what I run and recommend, because each part updates on its own schedule and a UI bug never takes down your API. The bundled :ollama image ships both in a single container, which means one command and one thing to manage, fine for a first look on a fresh machine. And the pip route covers people who'd rather not run Docker at all; it works, with Python version caveats below.

Prefer skipping the setup altogether? The LumaDock Ollama VPS template deploys exactly this pair, Ollama plus Open WebUI, preconfigured in one click.

Route 1: Docker with a separate Ollama

Ollama should already be running; if not, our Ollama install guide for Ubuntu gets it up in five minutes. Then start Open WebUI:

docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway \
  -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
  -v open-webui:/app/backend/data --name open-webui --restart always \
  ghcr.io/open-webui/open-webui:main

The two middle flags handle the awkward part: a containerized Open WebUI can't reach the host's localhost, because localhost inside a container is the container. --add-host=host.docker.internal:host-gateway maps a hostname to the Docker host and OLLAMA_BASE_URL points the UI at it. Leave those out on Linux and you get an empty model list, which is the single most reported Open WebUI problem.

The UI listens on host port 3000 (container port 8080 internally), the open-webui volume keeps accounts and chats across restarts and --restart always brings it back after reboots. If Ollama also runs in Docker, skip the add-host flag, put both containers on one network and set OLLAMA_BASE_URL=http://ollama:11434; the compose file in our Ollama Docker guide wires this up properly.

Route 2: The bundled image

One container with both applications inside:

docker run -d -p 3000:8080 -v ollama:/root/.ollama -v open-webui:/app/backend/data \
  --name open-webui --restart always ghcr.io/open-webui/open-webui:ollama

Note the two volumes, one for models and one for UI data. Add --gpus=all if the NVIDIA Container Toolkit is set up on the host. There's also a :cuda tag of the standalone image, which accelerates Open WebUI's own features like local Whisper transcription and embeddings, separate from Ollama's GPU use. The bundle is genuinely convenient, and I still move people off it once they're serious: updating means pulling a whole new image with both apps, and Ollama releases far more often than the UI.

Route 3: Install with pip

Open WebUI supports Python 3.11 and 3.12, nothing newer, and the project recommends 3.11. On Ubuntu 24.04 (which ships 3.12), a virtual environment keeps things tidy:

python3 -m venv ~/open-webui-env
source ~/open-webui-env/bin/activate
pip install open-webui
open-webui serve

The UI comes up on port 8080 and finds a local Ollama on 11434 automatically, no container networking to fight with. The install pulls a lot of dependencies, so give it a few minutes. Downsides: you own the Python environment, and you'll want a systemd unit to keep open-webui serve running after logout. The Open WebUI quick start documents this route and the Docker ones side by side.

First login and the admin account

Open http://localhost:3000 (or your server's address, or port 8080 for pip) and click Sign up. The first account created becomes the administrator automatically, so create yours before handing the URL to anyone else. On a server that's reachable by others, do it immediately; an unclaimed admin seat on an exposed UI is a gift to whoever finds it first. Admins manage users, control which models are visible and set defaults from the Admin Panel.

Serving the UI to the internet deserves the same care as any service with a login page. Put Nginx or Caddy with HTTPS in front of port 3000 before you share the URL beyond your own network, since credentials shouldn't cross the internet unencrypted. On a LAN or over a VPN, plain HTTP to the port is fine.

Connect to Ollama on a remote server

The UI on your laptop can drive a much larger Ollama server elsewhere, which is how most teams end up running it. Point the container at the server's address:

docker run -d -p 3000:8080 -e OLLAMA_BASE_URL=http://YOUR_SERVER_IP:11434 \
  -v open-webui:/app/backend/data --name open-webui --restart always \
  ghcr.io/open-webui/open-webui:main

You can also change this later under Admin Panel, then Settings, then Connections. Two requirements on the server side. Ollama binds to localhost by default, so the remote machine must set OLLAMA_HOST=0.0.0.0:11434 before it accepts outside connections. And since Ollama has no authentication of its own, that port needs a firewall rule, reverse proxy or VPN in front of it before it's exposed. Both steps, done safely, are the subject of our Ollama VPS hosting guide. In practice the cleaner pattern is running Open WebUI on the same server as Ollama and exposing only the UI, which brings its own login screen.

Pull models from the UI or the CLI

Admin Panel, Settings, Models lets you type a tag like llama3.2:3b and download it with a progress bar, handy when the person adding models never touches a terminal. I still pull over the CLI (ollama pull or docker exec -it ollama ollama pull) because the terminal shows download speed and resumes cleanly. Both land in the same store, and every model appears in the UI's model dropdown either way. Tag names come from the Ollama library; our best Ollama models roundup is a decent shortlist if the library feels endless.

Update Open WebUI and Ollama

The components update independently, which is the point of keeping them separate. For the UI container:

docker pull ghcr.io/open-webui/open-webui:main
docker stop open-webui
docker rm open-webui

Then rerun your original docker run command; accounts and chats live in the volume and survive. For pip, pip install -U open-webui inside the venv does it. Ollama updates by rerunning its install script (native) or pulling its image (Docker). I update the UI monthly and Ollama whenever a model I want needs a newer runtime.

Fix Server Connection Error and an empty model list

The classic failure: the UI loads but shows no models, or a red Server Connection Error banner. Work through these in order. First, confirm Ollama itself answers: curl http://127.0.0.1:11434 on the machine running it should return Ollama is running. Second, check OLLAMA_BASE_URL for the localhost trap described above; from inside a container, localhost is never the host. Third, for remote setups, test the URL from where the UI runs, since a firewall that drops 11434 produces exactly this symptom. docker logs open-webui usually names the failing URL outright. If none of that lands, the longer list of causes and fixes lives in our Ollama troubleshooting guide.

Frequent questions

Can I stop strangers from registering accounts on my Open WebUI?

Yes. As admin, open the Admin Panel and disable new sign-ups once your users have registered; new visitors then see only the login form. Pair that with keeping port 3000 behind HTTPS or a VPN when the UI faces the internet, since the login page is still a login page.

Race towards the future

Unrivaled speed meets competitive pricing

Ready in seconds 7-day money-back guaranteeA risk-free way to try LumaDock. Covers the GPU VPS plan on your first order. Cancel anytime
Abonament

GPU.T4

$159.00 Save  19 %
$129.00 Lunar
  • GPU dedicat
  • Tesla T4

  • 16 GB GDDR6vRAM
  • 2560CUDA CORES
  • Server virtual
  • 8 vCPUAMD EPYC
  • 32 GBMEMORIE ECC
  • 250 GB NVMeSTOCARE
  • Trafic nelimitat
  • IPv4 & IPv6 incluse Suportul IPv6 este momentan indisponibil în Franța, Finlanda sau Țările de Jos.

GPU.ADA4000SFF

$299.00 Save  17 %
$249.00 Lunar
  • GPU dedicat
  • RTX 4000 SFF Ada

  • 20 GB GDDR6 ECCvRAM
  • 6144CUDA CORES
  • Server virtual
  • 16 vCPUAMD EPYC
  • 64 GBMEMORIE ECC
  • 350 GB NVMeSTOCARE
  • Trafic nelimitat
  • IPv4 & IPv6 incluse Suportul IPv6 este momentan indisponibil în Franța, Finlanda sau Țările de Jos.

GPU.PRO4000SFF

$359.00 Save  17 %
$299.00 Lunar
  • GPU dedicat
  • RTX PRO 4000 Blackwell

  • 24 GB GDDR7 ECCvRAM
  • 8960CUDA CORES
  • Server virtual
  • 16 vCPUAMD EPYC
  • 64 GBMEMORIE ECC
  • 400 GB NVMeSTOCARE
  • Trafic nelimitat
  • IPv4 & IPv6 incluse Suportul IPv6 este momentan indisponibil în Franța, Finlanda sau Țările de Jos.

GPU.PRO4500

$509.00 Save  20 %
$409.00 Lunar
  • Dedicated GPU
  • RTX PRO 4500 Blackwell

  • 32 GB GDDR7 ECCvRAM
  • 10496CUDA CORES
  • Virtual Server
  • 16 vCPUAMD EPYC
  • 64 GBECC MEMORY
  • 450 GB NVMeSTORAGE
  • Unmetered bandwidth
  • IPv4 & IPv6IPv6 is currently unavailable in France, Finland or the Netherlands. included

GPU.PRO5000

$699.00 Save  20 %
$559.00 Lunar
  • Dedicated GPU
  • RTX PRO 5000 Blackwell

  • 48 GB GDDR7 ECCvRAM
  • 14080CUDA CORES
  • Virtual Server
  • 32 vCPUAMD EPYC
  • 96 GBECC MEMORY
  • 500 GB NVMeSTORAGE
  • Unmetered bandwidth
  • IPv4 & IPv6IPv6 is currently unavailable in France, Finland or the Netherlands. included

GPU.PRO6000

$1,199.00 Save  19 %
$969.00 Lunar
  • Dedicated GPU
  • RTX PRO 6000 Blackwell

  • 96 GB GDDR7 ECCvRAM
  • 24064CUDA CORES
  • Virtual Server
  • 32 vCPUAMD EPYC
  • 128 GBECC MEMORY
  • 650 GB NVMeSTORAGE
  • Unmetered bandwidth
  • IPv4 & IPv6IPv6 is currently unavailable in France, Finland or the Netherlands. included

*VAT excluded.

INCLUDED WITH EVERY PLAN

No setup fees 1 Gbps network
Free server monitoring Firewall management 24/7 support KVM virtualization