İçeriğe geç

EğitimlerYapay zeka ve LLM

Open WebUI'ı Ollama ile Docker Compose ve HTTPS kullanarak çalıştırma

Open WebUI'ı Ollama ile Docker Compose'da çalıştırın, Ollama'ya 127.0.0.1 üzerinden güvenle ulaşın, Caddy ile HTTPS ekleyin, kaydı kapatıp verileri yedekleyin.

  • Orta
  • 35 dk okuma
  • Güncellendi

Denendiği sistemler: Ubuntu 24.04 LTS, Ubuntu 26.04 LTS, Debian 12, Debian 13

Bu sayfada
  1. Ön koşullar
  2. Adım 1 — Open WebUI'ın Ollama'ya nasıl ulaşacağını seçin
  3. Adım 2 — Proje klasörünü ve gizli anahtarları oluşturun
  4. Adım 3 — Compose dosyasını yazın
  5. Adım 4 — Yığını başlatın ve bir model yükleyin
  6. Adım 5 — Yönetici hesabını gizlice oluşturun
  7. Adım 6 — Open WebUI'ı Caddy ile HTTPS üzerinden yayınlayın
  8. Yedekleme ve geri yükleme
  9. Open WebUI'ı güncelleme
  10. Sorun giderme
  11. Model seçicisinde hiç model görünmüyor
  12. Loglarda kabul edilmeyen bir origin görünüyor
  13. Bir ortam değişkenini değiştirmek etki etmiyor
  14. Konteyneri yeniden oluşturduktan sonra herkesin oturumu kapandı
  15. Caddy 502 Bad Gateway döndürüyor
  16. Sonraki adımlar

Open WebUI, büyük dil modelleri için self-hosted bir web arayüzüdür. Kullanıcı hesapları, sohbet geçmişi, belge yükleme ve model yönetimi içeren ChatGPT benzeri bir sohbet ekranı sunar; Ollama'nın yanı sıra OpenAI uyumlu API'lerle de çalışır. Bu rehber Open WebUI'ı Docker Compose ile çalıştırır, Ollama'nın API'sini dışarı açmadan ona bağlar, arayüzü yalnızca 127.0.0.1 üzerinde yayınlar, HTTPS için önüne Caddy koyar, yönetici hesabını gizlice oluşturur ve kurulumu nasıl yedekleyeceğinizi, güncelleyeceğinizi ve sorunlarını nasıl gidereceğinizi gösterir.

Ön koşullar

KaynakEn düşük (resmi)Önerilen başlangıç
CPUYayınlanmamışOpen WebUI için 2 vCPU, artı modellerinizin ihtiyacı
RAMYayınlanmamışOpen WebUI için 4 GB, artı Ollama'da çalıştırdığınız modellerin belleği
DiskYayınlanmamış (standart imaj yaklaşık 1,66 GB)20 GB boş alan, artı modeller için yer

Open WebUI hızlı başlangıç belgesi en düşük CPU veya bellek değeri yayınlamaz; önerilen değerler ölçüm sonucu değil, temkinli bir başlangıç noktasıdır. Model çıkarımı Ollama'da yapılır; bu yüzden sunucuyu esas olarak modellerinize göre boyutlandırın. Model belleği Ollama kurulumu rehberinde anlatılır.

Adım 1 — Open WebUI'ın Ollama'ya nasıl ulaşacağını seçin

Open WebUI örnekleri, konteynerin sunucudaki servislere ulaşabilmesi için --add-host=host.docker.internal:host-gateway kullanır. Bu ad sunucunun loopback arayüzüne değil, Docker köprü ağındaki adresine çözülür. Ollama ise varsayılan olarak 127.0.0.1:11434 adresinde dinler ve bu nedenle köprü adresinden gelen bağlantıları reddeder. Open WebUI'ın sorun giderme sayfası OLLAMA_HOST=0.0.0.0 ayarını önerir; ancak bu, kimlik doğrulaması olmayan bir API'yi sunucunun tüm adreslerinde açar. Bunun yerine şu iki güvenli kurulumdan birini kullanın:

KurulumNe zaman kullanılırBağlantı nasıl çalışır
A: Aynı Compose projesinde OllamaYeni bir sunucu ya da Ollama'yı Docker'da çalıştırmak size uygunsaOpen WebUI özel bir Docker ağı üzerinden http://ollama:11434 ile konuşur; Ollama'nın portu hiç yayınlanmaz
B: Sunucuda kurulu OllamaOllama zaten bir systemd servisi olarak kuruluysaOpen WebUI host ağını kullanır, 127.0.0.1:3000 üzerinde dinler ve Ollama'ya http://127.0.0.1:11434 ile ulaşır

İki kurulum da Ollama'nın API'sini gizli tutar ve Open WebUI'ı yalnızca loopback adresinde yayınlar; böylece dışarıya açık tek giriş noktası Caddy olur.

Adım 2 — Proje klasörünü ve gizli anahtarları oluşturun

Proje için bir klasör ve sabit bir gizli anahtar içeren bir .env dosyası oluşturun. Open WebUI giriş oturumlarını WEBUI_SECRET_KEY ile imzalar; sabit bir değer, konteyner yeniden oluşturulduğunda kullanıcıların oturumunun açık kalmasını sağlar.

Bash
sudo mkdir -p /opt/open-webui && sudo chown $USER:$USER /opt/open-webui
cd /opt/open-webui
echo "WEBUI_SECRET_KEY=$(openssl rand -hex 32)" > .env
echo "WEBUI_URL=https://chat.example.com" >> .env
chmod 600 .env

chat.example.com yerine kendi alan adınızı yazın. WEBUI_URL, Open WebUI'a herkese açık adresini bildirir; belgeler bunun ilk başlatmadan önce ayarlanmasını ister.

Adım 3 — Compose dosyasını yazın

Seçtiğiniz kurulum için /opt/open-webui/compose.yaml dosyasını oluşturun. İki seçenek de standart ghcr.io/open-webui/open-webui:main imajını kullanır ve tüm sohbetleri, kullanıcıları ve ayarları open-webui adlı bir volume'da saklar.

A: Compose içinde Ollama

YAML
services:
  ollama:
    image: ollama/ollama
    volumes:
      - ollama:/root/.ollama
    restart: unless-stopped

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    depends_on:
      - ollama
    ports:
      - "127.0.0.1:3000:8080"
    environment:
      OLLAMA_BASE_URL: "http://ollama:11434"
      WEBUI_SECRET_KEY: "${WEBUI_SECRET_KEY}"
      WEBUI_URL: "${WEBUI_URL}"
      CORS_ALLOW_ORIGIN: "${WEBUI_URL};http://localhost:3000"
    volumes:
      - open-webui:/app/backend/data
    restart: unless-stopped

volumes:
  ollama:
    name: ollama
  open-webui:
    name: open-webui

B: Sunucudaki Ollama

YAML
services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    network_mode: host
    environment:
      HOST: "127.0.0.1"
      PORT: "3000"
      OLLAMA_BASE_URL: "http://127.0.0.1:11434"
      WEBUI_SECRET_KEY: "${WEBUI_SECRET_KEY}"
      WEBUI_URL: "${WEBUI_URL}"
      CORS_ALLOW_ORIGIN: "${WEBUI_URL};http://localhost:3000"
    volumes:
      - open-webui:/app/backend/data
    restart: unless-stopped

volumes:
  open-webui:
    name: open-webui

A seçeneğinde Ollama'nın ports girdisi yoktur; bu yüzden yalnızca bu projedeki konteynerler ona ulaşabilir. B seçeneğinde network_mode: host, sunucunun ağını konteynerle paylaşır. Open WebUI'ın başlatma betiği HOST ve PORT değişkenlerini okur (varsayılanlar 0.0.0.0 ve 8080); bu iki satır onu tüm adresler yerine 127.0.0.1:3000 adresine bağlar. Host ağında ports bölümü yok sayılır; B seçeneğinde bu bölümün olmamasının nedeni budur. CORS_ALLOW_ORIGIN, kullanıcıların arayüzü açtığı tüm adresleri listeler: HTTPS alan adınız ve 5. adımda kullanılan SSH tüneli.

Sunucuda NVIDIA GPU varsa ve A seçeneğini kullanıyorsanız NVIDIA sürücüsünü ve NVIDIA Container Toolkit'i kurun (vLLM kurulumu rehberinin 1. ve 2. adımları), ardından şu bloğu ollama: altına, image: ile aynı girinti düzeyinde ekleyerek ollama servisine GPU erişimi verin:

YAML
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

Adım 4 — Yığını başlatın ve bir model yükleyin

Konteynerleri başlatın ve ilk açılışı izleyin; Open WebUI ilk çalıştırmada veritabanını ve imajla gelen modelleri hazırlar, bu birkaç dakika sürebilir:

Bash
cd /opt/open-webui
docker compose up -d
docker compose ps
docker compose logs -f open-webui

Log izlemeyi bırakmak için Ctrl+C tuşlarına basın. Arayüzün loopback üzerinde yanıt verdiğini kontrol edin:

Bash
curl -I http://127.0.0.1:3000

HTTP/1.1 200 OK görmelisiniz. Şimdi Ollama'da en az bir model olduğundan emin olun. A seçeneğinde modeli Ollama konteyneri içinde indirin; B seçeneğinde sunucudaki ollama komutunu kullanın:

Bash
docker compose exec ollama ollama pull llama3.2

B seçeneğinde bunun yerine ollama pull llama3.2 çalıştırın ve curl http://127.0.0.1:11434/api/tags çıktısında modelin listelendiğini kontrol edin.

Adım 5 — Yönetici hesabını gizlice oluşturun

Yeni bir kurulumda kayıt olan ilk hesap yönetici olur. Open WebUI güvenlik belgeleri bu kurulumun, örnek internetten erişilebilir hale gelmeden önce özel bir ağ, VPN veya yerel bir port üzerinden tamamlanmasını önerir. Open WebUI yalnızca 127.0.0.1 üzerinde dinlediği için kendi bilgisayarınızdan bir SSH tüneli kullanın:

Bash
ssh -L 3000:127.0.0.1:3000 user@203.0.113.10

Oturumu açık tutun, tarayıcıda http://localhost:3000 adresine gidin ve güçlü bir parolayla hesabınızı oluşturun. Bu hesap yöneticidir. İlk kayıttan sonra kayıt otomatik olarak kapanır; yönetici panelinin ayarlarını açın ve Enable New Sign Ups seçeneğinin kapalı olduğunu doğrulayın. Kaydı daha sonra açarsanız yeni hesaplar varsayılan olarak pending rolünü alır ve bir şey kullanabilmeleri için sizin onayınızı bekler.

Tünel açıkken model seçicisinden bir model seçin ve bir deneme mesajı gönderin. Liste boşsa Admin Panel bölümünü, ardından Settings ve Connections sekmelerini açın ve Ollama API adresinin http://ollama:11434 (A seçeneği) veya http://127.0.0.1:11434 (B seçeneği) olduğunu kontrol edin.

Adım 6 — Open WebUI'ı Caddy ile HTTPS üzerinden yayınlayın

/etc/caddy/Caddyfile dosyasına alan adınız için bir site bloğu ekleyin. Caddy sertifikayı kendiliğinden alır ve Open WebUI'ın canlı güncellemeler için kullandığı WebSocket bağlantılarını ek ayar gerektirmeden iletir:

Caddyfile
chat.example.com {
    reverse_proxy 127.0.0.1:3000
}

Caddy'yi yeniden yükleyin ve güvenlik duvarının yalnızca SSH ve web trafiğine izin verdiğinden emin olun:

Bash
sudo systemctl reload caddy
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

https://chat.example.com adresini açın, yönetici hesabınızla giriş yapın ve bir mesaj gönderin. Caddy yerine Nginx veya Traefik kullanıyorsanız Nginx ve Certbot veya Traefik rehberini izleyin ve WebSocket için Upgrade ve Connection başlıklarının iletildiğinden emin olun.

Yedekleme ve geri yükleme

open-webui volume'u veritabanını (sohbetler, kullanıcılar, ayarlar), yüklenen dosyaları ve üretilen içeriği tutar. Bunu compose.yaml ve .env ile birlikte yedekleyin; aynı WEBUI_SECRET_KEY olmadan geri yüklenen oturumlar geçersiz olur. Veritabanının tutarlı olması için önce konteyneri durdurun:

Bash
sudo mkdir -p /opt/backups && sudo chown $USER:$USER /opt/backups
cd /opt/open-webui
docker compose stop open-webui
docker run --rm -v open-webui:/data -v /opt/backups:/backup alpine tar czf /backup/openwebui-$(date +%F).tar.gz /data
docker compose start open-webui
cp compose.yaml .env /opt/backups/

ollama volume'undaki modeller (A seçeneği) yeniden indirilebilir; bu yüzden yedeklenmeleri gerekmez. Geri yüklemek için konteyneri durdurun, volume'u boşaltın ve arşivi açın. Komut volume'un mevcut içeriğini siler; önce dosya adını kontrol edin:

Bash
cd /opt/open-webui
docker compose stop open-webui
docker run --rm -v open-webui:/data -v /opt/backups:/backup alpine sh -c "rm -rf /data/* && tar xzf /backup/openwebui-YYYY-MM-DD.tar.gz -C /"
docker compose start open-webui

Yedekleri sunucunun dışına da kopyalayın, örneğin rsync ile veya bir nesne depolama alanına.

Open WebUI'ı güncelleme

Open WebUI sürümler sayfasındaki sürüm notlarını okuyun ve önce yedek alın: veritabanı geçişleri (migration) açılışta otomatik çalışır ve tek yönlüdür; eski bir sürüm geçiş yapılmış bir veritabanıyla çalışmayabilir. Ardından yeni imajları çekin ve konteynerleri yeniden oluşturun:

Bash
cd /opt/open-webui
docker compose pull
docker compose up -d
docker image prune

Bir sürüm etiketi sabitlediyseniz docker compose pull öncesinde onu compose.yaml içinde değiştirin. Şema değişikliğinden sonra geri dönmek için güncellemeden önce alınan yedeği geri yükleyin ve eski etiketi sabitleyin. Güncellemeden sonra arayüz bozuk görünürse tarayıcı önbelleğini temizleyin.

Sorun giderme

Model seçicisinde hiç model görünmüyor

Open WebUI Ollama'ya ulaşamıyor ya da Ollama'da model yok. A seçeneğinde docker compose exec ollama ollama list, B seçeneğinde sunucuda systemctl status ollama ve curl http://127.0.0.1:11434/api/tags çalıştırın. Admin Panel, Settings, Connections altındaki Ollama adresini kontrol edin. Ollama 127.0.0.1 üzerinde dinlerken host.docker.internal içeren bir adres çalışmaz; 1. adımdaki kurulumlardan birini kullanın.

Loglarda kabul edilmeyen bir origin görünüyor

Tarayıcı Open WebUI'ı CORS_ALLOW_ORIGIN içinde bulunmayan bir adresten açtı ve WebSocket bağlantıları reddediliyor. Kullanıcıların kullandığı tüm adresleri noktalı virgülle ayırarak ekleyin, ardından docker compose up -d çalıştırın.

Bir ortam değişkenini değiştirmek etki etmiyor

ENABLE_SIGNUP, DEFAULT_USER_ROLE ve WEBUI_URL dahil pek çok ayar kalıcıdır: ilk başlatmadan sonra veritabanında saklanan değer ortam değişkenine üstün gelir. Bunları yönetici panelinden değiştirin ya da ortam değişkenlerinin öncelik kazanması için bir kez ENABLE_PERSISTENT_CONFIG=false ile başlatın.

Konteyneri yeniden oluşturduktan sonra herkesin oturumu kapandı

WEBUI_SECRET_KEY eksikti veya değişti. .env dosyasının anahtarı içerdiğinden ve compose.yaml dosyasının onu konteynere ilettiğinden emin olun, ardından yeniden giriş yapın.

Caddy 502 Bad Gateway döndürüyor

Open WebUI henüz 127.0.0.1:3000 üzerinde dinlemiyor. docker compose ps ve docker compose logs open-webui çalıştırın; ilk açılış birkaç dakika sürebilir. B seçeneğinde HOST ve PORT değerlerinin ayarlı olduğunu ve 3000 portunu başka bir şeyin kullanmadığını (sudo ss -ltnp | grep 3000) kontrol edin.

Sonraki adımlar

Sık sorulan sorular

Docker'daki Open WebUI neden sunucudaki Ollama'ya ulaşamıyor?

Ollama varsayılan olarak 127.0.0.1 adresinde dinler; host.docker.internal ise sunucunun loopback arayüzünü değil, Docker köprü ağındaki adresini gösterir. Ollama'yı tüm adreslerde açmak yerine bu rehberdeki gibi Ollama'yı aynı Compose projesinde çalıştırın ya da Open WebUI'ı host ağıyla çalıştırın.

Kim yönetici olur?

Yeni bir kurulumda oluşturulan ilk hesap yönetici yapılır ve ardından kayıt otomatik olarak kapanır. Bu hesabı siteyi yayınlamadan önce bir SSH tüneli üzerinden oluşturun ya da ilk başlatmadan önce WEBUI_ADMIN_EMAIL ve WEBUI_ADMIN_PASSWORD değişkenlerini ayarlayın.

Güncellemeden sonra neden herkesin oturumu kapanıyor?

Open WebUI oturumları WEBUI_SECRET_KEY ile imzalar. Anahtar ayarlı değilse konteyner yeniden oluşturulduğunda yeni bir anahtar üretilebilir ve tüm oturumlar sona erer. Bu rehberdeki gibi .env içinde sabit bir anahtar belirleyin ve saklayın.

Open WebUI, Ollama dışında OpenAI uyumlu API'leri de kullanabilir mi?

Evet. Ollama'ya ek olarak vLLM, llama.cpp sunucusu veya LocalAI gibi OpenAI uyumlu uç noktaları yönetici ayarlarındaki Connections bölümünden ekleyebilirsiniz.

Hangi imaj etiketini kullanmalıyım?

Belgeler standart imaj olarak ghcr.io/open-webui/open-webui:main kullanır ve üretim için vX.Y.Z gibi sabitlenmiş sürüm etiketlerini önerir. Sabit etiketler hiç değişmez; güncelleme yalnızca etiketi siz değiştirdiğinizde olur.

Kaynaklar

Şifre Oluştur

Lütfen onaylayın