Open WebUI¶
Chat-Oberfläche über die Modell-Rollen des AI-Servers. GitHub
| URL | http://10.10.10.7:3000 — nur LAN |
| Backend | http://llama-swap:8080/v1 (Netz ai, containerinterner Port) |
| Daten | /opt/ai/volumes/openwebui (SQLite webui.db) |
Kein Traefik, keine externe Erreichbarkeit — das kommt erst nach der Headscale-Umstellung.
Umgebungsvariablen¶
| Variable | Wert | Warum |
|---|---|---|
OPENAI_API_BASE_URL |
http://llama-swap:8080/v1 |
Container-zu-Container. Nicht Port 9292 — das ist die veröffentlichte Host-Seite |
OPENAI_API_KEY |
none |
llama-swap hat keine Authentifizierung, Open WebUI verlangt aber einen nicht-leeren Wert |
ENABLE_OLLAMA_API |
false |
Sonst pollt Open WebUI eine Ollama-Instanz, die es hier nicht gibt, und die Modellliste füllt sich mit Fehlern |
WEBUI_AUTH |
true |
Anmeldung erforderlich, auch im LAN |
ENABLE_SIGNUP |
aus .env |
Zweistufig, siehe unten |
TZ |
Europe/Berlin |
Zeitstempel im Chatverlauf |
Die Compose-Datei nutzt ${OPENWEBUI_ENABLE_SIGNUP:?…} — ohne gesetzten Wert
startet der Stack gar nicht erst. Das ist Absicht: Ein versehentlich offenes
Registrierungsformular soll nicht durch einen Default entstehen.
Ablauf: mit true starten, im Browser das eigene Konto anlegen (der erste
angelegte Benutzer wird automatisch Administrator), dann auf false stellen und
docker compose up -d erneut ausführen.
WEBUI_SECRET_KEY wird bewusst nicht gesetzt — Open WebUI erzeugt beim ersten
Start .webui_secret_key im Datenverzeichnis. Geht das Volume verloren, sind
alle Sitzungen ungültig; die Anmeldedaten selbst liegen in webui.db.
btrfs-Falle¶
webui.db ist SQLite, und /opt ist btrfs mit Copy-on-Write. Ohne chattr +C
fragmentiert die Datei über Monate spürbar.
Das Flag wirkt nur auf leere Verzeichnisse
Es muss gesetzt sein, bevor der Container das erste Mal schreibt. Nachträglich bleibt es für bereits geschriebene Dateien wirkungslos.
sudo mkdir -p /opt/ai/volumes/openwebui
sudo chattr +C /opt/ai/volumes/openwebui
lsattr -d /opt/ai/volumes/openwebui # erwartet ---------------C------
Hat das Verzeichnis schon Daten: leeren, Flag setzen, neu befüllen.
Das Verzeichnis gehört root, weil das Image als root läuft (User 0:0,
HOME=/root). Eine erzwungene UID 1000 bricht die internen Cache-Pfade —
daher hier die Abweichung von der sonstigen 1000:1000-Konvention.
Modell-Kuratierung¶
Acht Rollen gehören in die Oberfläche, zwei nicht. Die Texte sind so formuliert, dass sie direkt in die Felder unter Admin → Einstellungen → Modelle passen.
| Modell-ID | Anzeigename | Beschreibung | Tags |
|---|---|---|---|
brain-llamacpp |
Standard | Stärkstes Modell im Haus (qwen3.6:35b). Erste Wahl, wenn nichts dagegen spricht: 89 Tokens/s, hält auch 110 000 Tokens Kontext zuverlässig. | standard, langkontext |
coder-llamacpp |
Code | Programmieren, Refactoring, Werkzeugaufrufe (qwen3-coder:30b). 93 Tokens/s, im Test fehlerfreie Tool-Calls. | code, werkzeuge |
translator-llamacpp |
Übersetzer | Übersetzungen (gemma4:26b). Sieger des Übersetzungsturniers, 79–86 Tokens/s. Taugt auch als zweiter Generalist. | übersetzung |
vision-llamacpp |
Bild | Bilder beschreiben und auswerten (qwen3-vl:4b), 1,5–3 Sekunden pro Bild. Bild immer VOR den Text in die Nachricht setzen. | bild |
ocr-llamacpp |
Scan zu Text | Deutsche Scans und Formulare in Text (german-ocr-3.1). Auf A4-Vorlagen ausgelegt, Recall 90 Prozent. | bild, dokumente |
allround-llamacpp |
Sparsam | Token-sparsamer Allrounder (nemotron3), 61 Tokens/s. Nur Text — Bilder kann dieses Modell nicht. | allzweck, sparsam |
cleanup-llamacpp |
Aufräumen | Transkripte säubern und präzise Textarbeit (laguna-xs-2.1). Antwortet ohne Denkprotokoll, 63 Tokens/s. | text |
json-llamacpp |
Struktur | Strukturierte Ausgaben und Metadaten-Extraktion (granite4.1:8b), rund 2 Sekunden pro Dokument. | struktur, dokumente |
Ausgeblendet (Sichtbarkeit auf privat):
| Modell-ID | Warum |
|---|---|
voice-llamacpp |
Gehört Home Assistant. Die Antworten sind auf kurze Sprachkommandos getrimmt und im Chat wertlos |
embed-llamacpp |
Kein Chat-Modell — ein Chatversuch liefert einen Vektor, keine Antwort |
Nicht llama-swaps unlisted verwenden
Die Option wäre der kürzere Weg, versteckt das Modell aber vor allen
Clients. Home Assistant soll voice-llamacpp weiterhin in der Modellliste
finden.
Betrieb¶
docker compose -f /opt/aiserver/openwebui/docker-compose.yaml up -d
curl -s localhost:3000/health
docker logs open-webui --tail 50
Die erste Antwort eines kalten Modells dauert 1,5–24 Sekunden — das ist der llama-swap-Wechsel, kein Fehler. Die Residenten sind davon nicht betroffen.
Zweite Instanz auf dem NUC
Auf dem NUC läuft eine weitere Open WebUI vor Ollama, mit RAG (Qdrant) und Dokument-Extraktion (Docling) — siehe Ollama-Stack. Fachlich ist sie durch diese Instanz abgelöst; das Abschalten dort ist ein eigener Schritt und noch offen. Die RAG-Funktion ist hier noch nicht nachgebaut.