Arama Yap Mesaj Submit
Request a Callback
+90
X
X

Select Your Currency

Turkish Lira $ US Dollar Euro
X
X

Select Your Currency

Turkish Lira $ US Dollar Euro

Contact Us

Location Halkali merkez neighborhood fatih st ozgur apt no 46 , Kucukcekmece , Istanbul , 34303 , TR
Ubuntu 24.04 Open WebUI Setup: Ollama, Nginx, SSL and Domain Guide
Open WebUI, Ollama, Docker and Ubuntu 24.04

How to Install Open WebUI on Ubuntu 24.04 with Ollama, Qwen3, Nginx and SSL

In this real Ubuntu 24.04.4 LTS VPS deployment we installed Open WebUI with Docker, created the persistent openwebui_data volume and WEBUI_SECRET_KEY, bound the app only to 127.0.0.1:3000, connected it to Ollama over the shared eka-ai Docker network at http://ollama:11434, and published openwebui.ekasunucu.com through Nginx and Let’s Encrypt HTTPS. The guide includes real screenshots from the first health wait through administrator setup and the qwen3:4b chat panel.

Ubuntu 24.04Open WebUIOllamaQwen3qwen3:4bDockerNginxLet’s EncryptSSLSelf Hosted AILocal AILinux VPSEKA Sunucu
Ollama / Qwen3 / Open WebUI / Ubuntu 24.04
Ubuntu 24.04.4 LTS
   ↓ Docker / eka-ai
Open WebUI :8080
   ↓ 127.0.0.1:3000
   ↓
Ollama :11434 → qwen3:4b
   ↓
Nginx + Let’s Encrypt :443
   ↓
openwebui.ekasunucu.com
Ollama0.32.6Open WebUI0.11.0 test
13real WebP screenshots
3TR · EN · DE content
443public HTTPS
127.0.0.1AI service loopback
01Open WebUI with Docker
02Ollama + qwen3:4b integration
03Nginx + Let’s Encrypt HTTPS
04localhost-only 3000/11434
00
Table of contents

Ubuntu 24.04 Open WebUI installation steps

  1. 01Prepare DNS, persistent storage and a stable secret key
  2. 02Attach Open WebUI to eka-ai and bind it to localhost port 3000
  3. 03Watch the logs if health does not return 200 immediately
  4. 04Verify Ollama and qwen3:4b from inside the Open WebUI container
  5. 05Reverse proxy openwebui.ekasunucu.com to localhost port 3000
  6. 06Issue a Let's Encrypt certificate and move the domain to HTTPS
  7. 07Keep ports 3000 and 11434 on localhost and publish only Nginx 80/443
  8. 08Verify Certbot renewal, container health and failed services
  9. 09Open the Open WebUI welcome screen through the HTTPS hostname
  10. 10Create the first Open WebUI administrator account
  11. 11Select qwen3:4b in Open WebUI and start a local chat
  12. 12Back up volumes, update images deliberately and test after reboot
01
Open WebUI preparation

Prepare DNS, persistent storage and a stable secret key

We pointed openwebui.ekasunucu.com to the test VPS and verified DNS resolution. A named volume called openwebui_data was created for application data.

A WEBUI_SECRET_KEY was also generated. For production, persist this value securely in a protected file or secret manager and reuse it when the container is recreated.

Command 1
dig +short openwebui.ekasunucu.com @1.1.1.1
dig +short openwebui.ekasunucu.com @8.8.8.8
Command 2
docker volume create openwebui_data
Command 3
umask 077
[ -s /root/.openwebui_secret_key ] || openssl rand -hex 32 > /root/.openwebui_secret_key
WEBUI_SECRET_KEY="$(cat /root/.openwebui_secret_key)"
02
Open WebUI Docker

Attach Open WebUI to eka-ai and bind it to localhost port 3000

The real test used ghcr.io/open-webui/open-webui:main. Host port 3000 was limited to 127.0.0.1, the application kept its internal port 8080, and openwebui_data was mounted at /app/backend/data.

Because Ollama shared the eka-ai network, OLLAMA_BASE_URL was set to http://ollama:11434. Docker DNS resolves the container name without making Ollama public.

Command 1
docker pull ghcr.io/open-webui/open-webui:main
Command 2
WEBUI_SECRET_KEY="$(cat /root/.openwebui_secret_key)"
docker run -d --name open-webui --restart unless-stopped --network eka-ai -p 127.0.0.1:3000:8080 -e OLLAMA_BASE_URL=http://ollama:11434 -e WEBUI_SECRET_KEY="$WEBUI_SECRET_KEY" -v openwebui_data:/app/backend/data ghcr.io/open-webui/open-webui:main
Command 3
docker ps --filter name='^/open-webui$'
03
First-start timing

Watch the logs if health does not return 200 immediately

On first start Open WebUI may run database migrations and prepare local helper models. During our test the first few minutes produced connection-reset and HTTP 000 results even though the container process was running.

After migrations and the embedding model load completed, /health returned HTTP 200 with {"status":true}. Monitoring logs is better than repeatedly recreating the container during this initialization window.

Command 1
docker logs -f --tail 150 open-webui
Command 2
until [ "$(curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:3000/health || true)" = "200" ]; do sleep 5; done
curl -sS http://127.0.0.1:3000/health
Command 3
docker inspect open-webui --format 'State={{.State.Status}} Health={{if .State.Health}}{{.State.Health.Status}}{{else}}none{{end}}'
04
Model connection

Verify Ollama and qwen3:4b from inside the Open WebUI container

A successful host-side Ollama test is not enough; the Open WebUI container must be able to reach it too. On the shared Docker network the target is ollama:11434.

Open WebUI retrieves models through that connection. If qwen3:4b is missing, check Ollama /api/tags, the Open WebUI connection setting and membership of both containers in eka-ai.

Command 1
docker exec open-webui python -c "import urllib.request; print(urllib.request.urlopen('http://ollama:11434/api/tags').read().decode())"
Command 2
docker network inspect eka-ai --format '{{range .Containers}}{{.Name}} {{.IPv4Address}}{{println}}{{end}}'
05
Nginx + WebSocket

Reverse proxy openwebui.ekasunucu.com to localhost port 3000

Instead of publishing Open WebUI's host port to the Internet, Nginx became the public entry layer. Nginx listens on 80/443, forwards traffic to 127.0.0.1:3000 and preserves WebSocket upgrade headers.

Use the correct server_name and always run nginx -t before reloading the service.

Command 1
cat >/etc/nginx/sites-available/openwebui.ekasunucu.com <<'EOF'
server {
    listen 80;
    listen [::]:80;
    server_name openwebui.ekasunucu.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 3600;
    }
}
EOF
ln -sfn /etc/nginx/sites-available/openwebui.ekasunucu.com /etc/nginx/sites-enabled/openwebui.ekasunucu.com
nginx -t
systemctl reload nginx
06
HTTPS publishing

Issue a Let's Encrypt certificate and move the domain to HTTPS

Once the Nginx reverse proxy was ready, Certbot issued a Let's Encrypt certificate for openwebui.ekasunucu.com and deployed it to Nginx successfully.

Both origin HTTPS and the public domain returned HTTP 200 in the final checks, so users access the secure hostname rather than a Docker port.

Command 1
certbot --nginx -d openwebui.ekasunucu.com
Command 2
curl -I https://openwebui.ekasunucu.com
Command 3
certbot certificates
07
Reduce attack surface

Keep ports 3000 and 11434 on localhost and publish only Nginx 80/443

At the end of the deployment Ollama listened on 127.0.0.1:11434 and Open WebUI on 127.0.0.1:3000, while Nginx listened publicly on 80 and 443. This separation avoids exposing the raw Ollama API to the Internet.

Docker publishing can interact with firewall rules, so inspect actual listening sockets with ss and published ports with docker ps instead of relying on only one firewall view.

Command 1
ss -lntp | grep -E ':80 |:443 |:3000 |:11434' || true
Command 2
docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}'
08
Final infrastructure test

Verify Certbot renewal, container health and failed services

We ran certbot renew --dry-run instead of assuming automatic renewal would work. The simulated renewals for Open WebUI and Portainer completed successfully.

The final state showed a healthy Open WebUI container, running Ollama, HTTP 200 on the HTTPS domain and no failed systemd units.

Command 1
certbot renew --dry-run
Command 2
curl -sS -o /dev/null -w '%{http_code}\n' https://openwebui.ekasunucu.com
Command 3
docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'
systemctl --failed
09
First browser access

Open the Open WebUI welcome screen through the HTTPS hostname

After the infrastructure was complete, we opened https://openwebui.ekasunucu.com and reached the Open WebUI welcome page. The Get Started action led to the account setup flow.

The browser should use the hostname directly. There should be no need for public access to port 3000 because Nginx and TLS terminate user traffic.

10
First user

Create the first Open WebUI administrator account

On the first registration screen we created the administrator with a name, email address and strong password. The first account controls administrative settings.

Use a unique production password and review the registration/approval policy before allowing additional users.

11
Local AI ready

Select qwen3:4b in Open WebUI and start a local chat

After account setup, qwen3:4b became available in the Open WebUI model selector. This completed the browser → Open WebUI → Ollama → qwen3:4b chain end to end.

Inference runs on the Ollama side of the server while Open WebUI provides the interface, user and conversation layer. Recalculate CPU/RAM/GPU capacity before moving to larger models or more concurrent users.

12
Production maintenance

Back up volumes, update images deliberately and test after reboot

Ollama model data lives in ollama_data and Open WebUI application data in openwebui_data. A VPS snapshot plus volume backups before upgrades makes rollback safer.

The real test used :main. Before production updates, record or pin the image version, back up data, recreate containers deliberately, then re-test /health, Ollama /api/tags, HTTPS, local-only port binds and startup after reboot.

Command 1
docker run --rm -v ollama_data:/source -v /root:/backup alpine sh -c 'tar czf /backup/ollama_data-$(date +%F).tar.gz -C /source .'
Command 2
docker run --rm -v openwebui_data:/source -v /root:/backup alpine sh -c 'tar czf /backup/openwebui_data-$(date +%F).tar.gz -C /source .'
Command 3
docker restart ollama open-webui
curl -sS http://127.0.0.1:3000/health
curl -sS http://127.0.0.1:11434/api/tags
Production checklist

Open WebUI production security checklist

Do not publish Open WebUI port 3000 directly to the public Internet.
Keep Ollama port 11434 on localhost or a private Docker network.
Store WEBUI_SECRET_KEY securely and persistently.
Back up the openwebui_data volume regularly.
Use a strong unique administrator password.
Publish access through Nginx HTTPS and preserve WebSocket headers.
Check Certbot renewal status and run renew --dry-run periodically.
Create a VPS snapshot or rollback plan before image upgrades.
After reboot, re-check /health, Ollama connectivity, HTTPS and port bindings.
R
Official sources

Official Open WebUI and Ollama resources

+
EKA Sunucu

Related EKA Sunucu Open WebUI, Ollama and n8n guides

?
FAQ

Frequently asked questions about Open WebUI on Ubuntu 24.04

Does Open WebUI run on Ubuntu 24.04 with Docker?

Yes. In this real test Open WebUI v0.11.0 ran on Ubuntu 24.04.4 LTS in Docker.

Which port does Open WebUI use?

The container uses port 8080; the host binding in this setup is only 127.0.0.1:3000.

Which URL connects Open WebUI to Ollama?

Because both containers share the eka-ai network, Open WebUI uses http://ollama:11434.

Should Ollama port 11434 be public?

No. We kept it on localhost and used the Docker network for container-to-container access.

Why can Open WebUI be unhealthy on first start?

Database migrations and embedding-model preparation can take time. Our test showed HTTP 000/connection reset initially, then /health returned 200 after startup completed.

Which embedding model was downloaded?

The real logs showed sentence-transformers/all-MiniLM-L6-v2 being fetched from Hugging Face.

What is WEBUI_SECRET_KEY for?

It is a persistent secret used by the application and sessions. Preserve the same value when recreating the container.

Where is Open WebUI data stored?

The openwebui_data named volume is mounted at /app/backend/data.

Does Open WebUI need WebSocket support behind Nginx?

Yes. Preserve HTTP/1.1 and the Upgrade and Connection headers in the reverse proxy.

How was SSL installed?

After creating the Nginx vhost, Certbot --nginx obtained and deployed the Let’s Encrypt certificate.

How do I test SSL renewal?

Run certbot renew --dry-run to simulate renewal without replacing the live certificate.

Is the first Open WebUI account an administrator?

The first account is used as the administrator account; later registration and approval policies can be managed from the UI.

How does qwen3:4b appear in Open WebUI?

When the Ollama connection works, qwen3:4b appears in the model selector and can be used in the chat interface.

Should I use the :main Docker tag in production?

The real test used :main. A tested fixed version tag is generally more predictable for controlled production updates.

EKA YAZILIM VE BİLİŞİM SİSTEMLERİ

Need a Linux VPS for Open WebUI and local AI?

Run Ollama, Qwen3, Open WebUI and n8n on your own EKA Sunucu Linux VPS.

Updated: 10.08.2026
View Linux VPS PlansLinux & VPS Guides
Top