Skip to content

OpenWebUI

Instalacja

Open WebUI uruchamiane jest jako aplikacja webowa i korzysta z backendu OpenAI-compatible (u nas: LiteLLM). Dane aplikacji (w tym baza SQLite z użytkownikami/ustawieniami) trzymane są w katalogu danych.

Założenia konfiguracyjne:

  • Plik Compose znajduje się w /srv/docker/compose/openwebui
  • Dane Open WebUI znajdują się w /srv/docker/data/openwebui
  • Sekrety (zmienne środowiskowe) znajdują się w /srv/docker/secrets/openwebui/app.env
  • Open WebUI łączy się z LiteLLM po sieci Dockera internal
  • Open WebUI jest wystawiane przez reverse proxy po sieci Dockera proxy
  • Logi dostępne są przez docker logs (bez osobnego katalogu logów)

Dostęp do sieci Docker

Wymagany dostęp do sieci proxy oraz internal

Aby udostępnić aplikację publicznie oraz komunikować się z LiteLLM, aplikacja wymaga dostępu do sieci Docker proxy i internal.

Tworzenie sieci Docker


Tworzenie katalogów

Tworzymy katalog dla Compose:

sudo mkdir -p /srv/docker/compose/openwebui
sudo chown -R "$USER:$USER" /srv/docker/compose/openwebui

Tworzymy katalog na dane Open WebUI:

sudo mkdir -p /srv/docker/data/openwebui
sudo chown -R "$USER:$USER" /srv/docker/data/openwebui

Tworzymy katalog na sekrety:

sudo mkdir -p /srv/docker/secrets/openwebui
sudo chown -R "$USER:$USER" /srv/docker/secrets/openwebui

Generowanie WEBUI_SECRET_KEY

WEBUI_SECRET_KEY zabezpiecza sesje i powinien być stały (nie zmieniaj go przy aktualizacjach).

Wygeneruj klucz i skopiuj wynik:

echo "$(openssl rand -hex 32)"

Przygotowanie danych do połączenia z LiteLLM

Open WebUI będzie łączyć się do LiteLLM po sieci internal.

  • Base URL: http://litellm:4000/v1
  • API Key: wartość LITELLM_MASTER_KEY z konfiguracji LiteLLM

Aby wypisać LITELLM_MASTER_KEY do skopiowania (bez edycji plików):

awk -F= '/^LITELLM_MASTER_KEY=/{print $2}' /srv/docker/secrets/litellm/app.env

Tworzenie pliku app.env

Tworzymy i edytujemy plik app.env:

micro /srv/docker/secrets/openwebui/app.env

W pliku umieszczamy:

app.env
# Publiczny URL aplikacji (dla poprawnych linków)
WEBUI_URL=https://ai.fulc.ro

# Klucz sesji (wklej wygenerowany hex)
WEBUI_SECRET_KEY=TU_WKLEJ_WYGENEROWANY_SECRET_KEY

# OpenAI-compatible backend (LiteLLM)
OPENAI_API_BASE_URL=http://litellm:4000/v1
OPENAI_API_KEY=TU_WKLEJ_LITELLM_MASTER_KEY

# (opcjonalnie) po utworzeniu pierwszego admina możesz wyłączyć rejestrację:
# ENABLE_SIGNUP=False

Zapisujemy plik i wychodzimy z edytora.

Opcjonalnie (zalecane) ograniczamy uprawnienia do pliku sekretów:

chmod 600 /srv/docker/secrets/openwebui/app.env

Konfiguracja Docker Compose

Przechodzimy do katalogu Compose:

cd /srv/docker/compose/openwebui

Tworzymy i edytujemy plik compose.yaml:

micro compose.yaml

W pliku umieszczamy:

compose.yaml
services:
  openwebui:
    image: ghcr.io/open-webui/open-webui:v0.6.43
    container_name: openwebui
    restart: unless-stopped

    env_file:
      - /srv/docker/secrets/openwebui/app.env

    volumes:
      - /srv/docker/data/openwebui:/app/backend/data

    networks:
      - internal
      - proxy

    security_opt:
      - no-new-privileges:true

networks:
  internal:
    external: true
  proxy:
    external: true

Zapisujemy plik i wychodzimy z edytora.


Uruchomienie kontenera

Uruchamiamy Open WebUI:

docker compose up -d

Sprawdzamy, czy kontener działa:

docker ps | grep openwebui

Konfiguracja Caddy

Dodajemy wpis do Caddyfile:

Caddyfile
ai.fulc.ro {
  reverse_proxy openwebui:8080
}

Przeładowujemy Caddy:

docker exec -it caddy caddy reload --config /etc/caddy/Caddyfile

Test

Sprawdzamy, czy strona odpowiada:

https://ai.fulc.ro

Przy pierwszym wejściu aplikacja poprosi o założenie konta — pierwszy użytkownik zwykle staje się adminem.


Podgląd logów

Podglądamy logi Open WebUI:

docker logs -f openwebui