Der Spickzettel zur ersten Hälfte des Seminars Open WebUI im Unternehmen: Daten einordnen, Architektur wählen, installieren, Identitäten, Modelle, Assistenten und Wissensbasen. Er bringt nichts davon bei, dafür sind die Module da. Integration, Erweiterungen, Absicherung, Tests, Monitoring, Hochverfügbarkeit und Rollout stehen auf dem zweiten Blatt: Open WebUI: Integration und Betrieb.
Maßgeblich für Variablen, Standardwerte und Versionsstände ist die Open-WebUI-Dokumentation. Dieses Blatt trifft eine Auswahl, Stand Open WebUI v0.11.4.
Open WebUI abgrenzen
| Lösung | Stärke | Wann eher sie |
|---|---|---|
| SaaS-Assistent | sofort nutzbar, kein Betrieb | Daten dürfen zum Anbieter, wenig Integration |
| Open WebUI | eigene Daten, eigene Modelle, eigene Regeln | gemeinsame Arbeitsumgebung unter eigener Kontrolle |
| Eigene RAG-Anwendung | genau auf einen Prozess zugeschnitten | ein Fachprozess mit fester Oberfläche |
| Workflow-Plattform | Abläufe ohne Mensch im Dialog | Automatisierung im Hintergrund |
Die Lösungen schließen sich nicht aus. Open WebUI betreibt die Modelle nicht selbst — Antwortqualität entsteht beim Modell, nicht in der Oberfläche.
Anwendungsfälle sortieren: hoher Nutzen bei Daten bis „intern“ und Fehlern, die beim Lesen auffallen → zuerst. Hoher Nutzen mit vertraulichen Daten → mit Auflagen (lokales Modell, enge Rechte). Hohes Risiko oder unkontrollierte Automatisierung → zurückstellen.
Modul: Open WebUI einordnen und Bedarf klären
Datenklassen und Datenflüsse
Ein Raster, wie es im Seminar festgelegt wird — die Grenzen setzt jedes Unternehmen selbst:
| Datenklasse | Externes Modell | Lokales Modell |
|---|---|---|
| öffentlich | erlaubt | erlaubt |
| intern | erlaubt | erlaubt |
| vertraulich | nicht erlaubt | erlaubt |
| streng vertraulich | nicht erlaubt | nicht erlaubt |
Ein Dienst erbt die höchste Datenklasse, die ihn erreichen kann — nicht nur das Chatmodell:
| Dienst | Was dort ankommt | Steuerung |
|---|---|---|
| Inferenz | Prompt, Verlauf, Dokumentauszüge, Werkzeugergebnisse | Verbindungen, Modellzugriff je Gruppe |
| Embedding | Dokumenttext und Suchanfragen | RAG_EMBEDDING_ENGINE |
| Extraktion und OCR | ganze Dateien | CONTENT_EXTRACTION_ENGINE |
| Websuche | Suchbegriffe aus dem Chat | Berechtigung Web Search |
| Werkzeugserver | Parameter jedes Aufrufs | Werkzeugzugriff je Gruppe |
| Protokolle | ab AUDIT_LOG_LEVEL=REQUEST auch Inhalte | METADATA ohne Inhalte |
Modul: Governance, Datenschutz und Lizenzen
Admin-Zugriff, Aufbewahrung und Export
ENABLE_ADMIN_CHAT_ACCESS=false # fremde Chats nicht über die Oberfläche
ENABLE_ADMIN_EXPORT=false # kein Massenexport (Standard true)
BYPASS_ADMIN_ACCESS_CONTROL=false # Admins umgehen Ressourcenrechte nicht
AUDIT_LOG_LEVEL=METADATA # Audit-Log ohne Inhalte
ENABLE_DIRECT_CONNECTIONS=false # keine Modelle am Verfahren vorbei
Das wirkt nur in der Oberfläche. Wer Datenbank, Host oder Backups erreicht, bleibt Teil der Vertrauensgrenze; für echte Mandantentrennung empfiehlt die Doku getrennte Instanzen.
| Thema | Was Open WebUI bietet |
|---|---|
| Temporäre Chats | USER_PERMISSIONS_CHAT_TEMPORARY_ENFORCED erzwingt sie; das Modell verarbeitet trotzdem |
| Löschen | Delete All Chats, gebunden an Allow Chat Delete — Backups regelt der Betreiber |
| Export durch Nutzer | Settings > Data Controls, als JSON |
| Dateien | Entfernen aus der Wissensbasis löscht Datei und Embeddings, außer mit ENABLE_KNOWLEDGE_FILE_RETENTION |
Modul: Governance, Datenschutz und Lizenzen
DSGVO und KI-Verordnung
| Pflicht | Fundstelle | Gilt seit |
|---|---|---|
| Zweckbindung, Datenminimierung, Speicherbegrenzung | DSGVO Art. 5 Abs. 1 b, c, e | — |
| Informationspflichten | DSGVO Art. 13 | — |
| Auftragsverarbeitung mit externem Anbieter | DSGVO Art. 28 | — |
| Drittlandübermittlung | DSGVO Art. 44 ff. | — |
| Datenschutz-Folgenabschätzung prüfen | DSGVO Art. 35 | — |
| Verbotene Praktiken | KI-VO Art. 5 | 02.02.2025 |
| KI-Kompetenz | KI-VO Art. 4 | 02.02.2025 |
| Transparenz | KI-VO Art. 50 | 02.08.2026 |
| Hochrisiko nach Anhang III | KI-VO Art. 6 ff. | 02.12.2027 |
Stand nach VO (EU) 2026/1744: Art. 4 verlangt Maßnahmen, aber kein garantiertes Niveau je Person. Beim internen Einsatz ist das Unternehmen Betreiber. Das Blatt ersetzt keine Rechtsberatung.
Modul: Governance, Datenschutz und Lizenzen
Lizenz: wann das Branding geändert werden darf
| Ausnahme | Bedingung laut Lizenz |
|---|---|
| Kleine Installation | höchstens 50 Nutzer in einem 30-Tage-Zeitraum |
| Substanzieller Beitrag | dauerhafte Mitarbeit und vorherige schriftliche Erlaubnis |
| Enterprise-Lizenz | Vertrag erlaubt Brandingänderungen ausdrücklich |
| Forschungsstudie | befristete Studie einer Hochschule oder gemeinnützigen Einrichtung |
WEBUI_NAME ist immer erlaubt — Open WebUI hängt dann „(Open WebUI)“ an. Die
Lizenz deckt die Modelle nicht ab, auch nicht die eingebauten des Standardimages.
Modul: Governance, Datenschutz und Lizenzen
Architekturstufen und Zustandsdienste
| Größe | Architektur | Zustandsdienste |
|---|---|---|
| Evaluation | ein Container | SQLite, eingebaute ChromaDB |
| Kleines Team unter 50, eine Instanz | ein Container hinter Proxy | PostgreSQL, Redis, externe Extraktion empfohlen |
| Mehrere Worker oder Instanzen | Replikate hinter Load Balancer | PostgreSQL, Redis, externe Vektordatenbank Pflicht |
| Ab 1000 Nutzern | Orchestrierung, etwa Kubernetes mit Helm | dazu externe Extraktion und Embeddings |
Ab zwei Instanzen zusätzlich: gemeinsamer Dateispeicher (NFS oder S3) und
überall derselbe WEBUI_SECRET_KEY. Die Konfiguration teilen sich Instanzen über
PostgreSQL, nicht über Redis. Open WebUI migriert nicht zwischen SQLite und
PostgreSQL; pgvector und ChromaDB pflegt das Projekt selbst, andere
Vektordatenbanken die Community.
| Baustein | Engpass | Hinweis |
|---|---|---|
| Open WebUI | RAM, CPU | eingebaute SentenceTransformers ~500 MB je Worker |
| Extraktion | RAM | pypdf verliert Speicher, Tika oder Docling isolieren das |
| Modellserver | GPU-Speicher | gleichzeitige Generierungen bestimmen die GPU, nicht die Nutzerzahl |
| PostgreSQL | Verbindungen | DATABASE_POOL_SIZE mal Zahl der Instanzen |
| Thread-Pool | wartende Anfragen | Standard 40, zum Skalieren THREAD_POOL_SIZE |
Modul: Zielarchitektur und Wirtschaftlichkeit
Image-Tags
| Tag | Inhalt |
|---|---|
:main | Standardimage mit Sprach- und Embedding-Modellen, rollend |
:slim | ohne ML-Stack — braucht externes Embedding und Extraktion |
:cuda | GPU für die eingebauten Modelle |
:ollama | Ollama im selben Container, nur für Tests |
:vX.Y.Z | genau ein Release, unveränderlich |
:X.Y | neuester Patch einer Nebenversion, rollend |
:dev | nächtliche Vorabversion, nur mit eigenem Volume |
:latest folgt main, nicht dem neuesten Release. Reproduzierbar ist nur ein
Versions-Tag, strenger mit @sha256-Digest. Daten liegen unter
/app/backend/data — ohne Volume sind sie mit dem Container weg.
Modul: Installation und reproduzierbare Konfiguration
ConfigVar: welcher Wert gilt
| Art | Beispiele | Nach dem Neustart gilt |
|---|---|---|
| ConfigVar | ENABLE_SIGNUP, WEBUI_URL, ENABLE_COMMUNITY_SHARING, die RAG-Variablen | der Datenbankwert |
| Normale Variable | DATABASE_URL, ENABLE_ADMIN_CHAT_ACCESS | die Variable |
ENABLE_PERSISTENT_CONFIG=False | alle ConfigVar-Werte | die Variable, UI-Änderungen gehen verloren |
| OAuth-Einstellungen | ENABLE_OAUTH_PERSISTENT_CONFIG, Standard False | die Variable, im Admin-Bereich nur lesbar |
Ob eine Variable ConfigVar ist, steht in der Referenz in der Zeile Persistence.
Modul: Installation und reproduzierbare Konfiguration
Sicherer Start und Reverse Proxy
WEBUI_SECRET_KEY=... # fest, aus dem Tresor; neu = alle abgemeldet
WEBUI_ADMIN_EMAIL=... # Admin beim ersten Start, danach Registrierung zu
WEBUI_ADMIN_PASSWORD=...
WEBUI_URL=https://... # vor SSO setzen
DEFAULT_USER_ROLE=pending
| Einstellung | Warum |
|---|---|
| TLS am Proxy | Open WebUI terminiert TLS nicht selbst |
| Upgrade- und Connection-Header | WebSockets |
proxy_buffering off | SSE-Streaming, sonst zerrissenes Markdown |
| Timeouts ab 300 Sekunden | lange Antworten dauern Minuten |
CORS_ALLOW_ORIGIN | Standard *, muss zur URL passen |
WEBUI_SESSION_COOKIE_SECURE=true | Standard false |
FORWARDED_ALLOW_IPS | nur den Proxy eintragen, Standard * |
OAUTH_SESSION_TOKEN_ENCRYPTION_KEY | eigener Wert, sonst gleich dem Secret Key |
Modul: Installation und reproduzierbare Konfiguration
Rollen, Gruppen und Berechtigungen
| Rolle | Bedeutung |
|---|---|
admin | volle Kontrolle, umgeht die meisten Prüfungen; das erste Konto wird admin |
user | Standardberechtigungen plus Gruppenrechte |
pending | kein Zugriff bis zur Freigabe |
Gruppen dienen zwei Zwecken: Berechtigungsgruppen schalten Funktionen frei (Who can share to this group: No one), Freigabegruppen ordnen Menschen für Ressourcenfreigaben (Members). Die Default Permissions unter Admin Panel > Users > Groups nimmt keine Gruppe zurück — deshalb schmal halten:
| Berechtigung | Empfehlung | Grund |
|---|---|---|
| Models Access, Knowledge Access | nur Pflegegruppe | Inhalte brauchen eine verantwortliche Person |
| Tools Access | aus | gleichbedeutend mit Root-Zugriff auf den Server |
| Web Search | aus | erst nach geklärter Datenfreigabe |
| API Keys | aus | nur für technische Konten |
| Chats Open Sharing | aus | Links ohne Anmeldung verlassen das Unternehmen |
Modul: Identitäten und Berechtigungen
SSO, Gruppenabgleich und SCIM
| Weg | Kernvariablen |
|---|---|
| OIDC | OAUTH_CLIENT_ID, OPENID_PROVIDER_URL (Pflicht) |
| Microsoft | MICROSOFT_CLIENT_ID, MICROSOFT_CLIENT_TENANT_ID; offline_access für Refresh |
| LDAP | ENABLE_LDAP, LDAP_SERVER_HOST, LDAP_SEARCH_BASE |
| Trusted Header | WEBUI_AUTH_TRUSTED_EMAIL_HEADER |
Nur ein OIDC-Anbieter zugleich, Redirect-URI endet auf /oauth/oidc/callback.
MFA gibt es nur über den Identitätsanbieter.
ENABLE_OAUTH_GROUP_MANAGEMENT=true
ENABLE_OAUTH_GROUP_CREATION=false
OAUTH_GROUP_CLAIM=groups
ENABLE_OAUTH_ROLE_MANAGEMENT=true
OAUTH_ROLES_CLAIM=groups
OAUTH_ALLOWED_ROLES=<Nutzergruppe> # sonst 403 bei der Anmeldung
OAUTH_ADMIN_ROLES=<Admingruppe>
| Ereignis | Nur OIDC | Mit SCIM 2.0 |
|---|---|---|
| Eintritt | Konto bei erster Anmeldung | IdP legt vorab an |
| Gruppenwechsel | erst nach Neuanmeldung | sofort |
| Austritt | ausgestellte Tokens bleiben gültig | active: false setzt pending |
SCIM: ENABLE_SCIM, SCIM_TOKEN, SCIM_AUTH_PROVIDER, Basis /api/v1/scim/v2/.
JWT_EXPIRES_IN steht auf 4w; Widerruf von Tokens und
ENABLE_OAUTH_BACKCHANNEL_LOGOUT funktionieren nur mit Redis.
Modul: Identitäten und Berechtigungen
Modellverbindungen und Parameterebenen
OLLAMA_BASE_URLS=http://<modellserver>:11434
OPENAI_API_BASE_URLS=https://<anbieter>/v1
OPENAI_API_KEYS=...
AIOHTTP_CLIENT_TIMEOUT=300
AIOHTTP_CLIENT_TIMEOUT_MODEL_LIST=5
OpenAI-kompatibel heißt mindestens /v1/chat/completions; /v1/models ist
empfohlen, Tool Calling braucht tools und tool_choice.
| Ebene | Wo | Wirkung |
|---|---|---|
| Global | Admin > Models > Model Defaults | Grundwerte |
| Modell | Advanced Params im Modelleditor | schlägt global |
| Chat | Chat Controls mit Allow Chat Params | schlägt das Modell |
| API | Body der Anfrage | behält immer den eigenen Wert |
| Modellart | Variable |
|---|---|
| Chatmodell | DEFAULT_MODELS, DEFAULT_MODEL_PARAMS |
| Aufgabenmodell (Titel, Tags, Suchanfragen) | TASK_MODEL, TASK_MODEL_EXTERNAL |
| Embedding | RAG_EMBEDDING_MODEL, ab Werk all-MiniLM-L6-v2 |
| Reranking | RAG_RERANKING_MODEL, optional |
Kontext: Ollama wählt OLLAMA_CONTEXT_LENGTH nach VRAM (4096 unter 24 GiB,
32768 bis 48 GiB). num_ctx in Open WebUI überschreibt den Server und füllt
beim Einschalten 2048 vor. Als Mindestklasse für lokales Tool Calling im Native
Mode nennt die Doku Qwen 3.6 27B.
Modul: Modelle anbinden und bereitstellen
Assistenten, Workspace und Freigaben
| Baustein | Wofür |
|---|---|
| Models | Basismodell mit Systemprompt, Wissen und Werkzeugen |
| Knowledge | Dokumentsammlungen für die Suche |
| Prompts | Vorlagen mit Variablen, per / aufrufbar |
| Skills | Arbeitsanweisungen in Markdown, bei Bedarf geladen |
| Tools | Fähigkeiten, die ein Modell aufruft |
| Ressource | Versionsstand |
|---|---|
| Assistenten | keine Historie — als JSON exportieren |
| Prompts | Version History, live erst mit Set as Production |
Freigabe je Ressource: Private plus Gruppen mit Read oder Write. Write
ist eigentümergleich: ändern, löschen, weiter freigeben. Hide blendet aus,
Enabled aus nimmt das Modell für alle weg. Systemprompt-Variablen ohne
Leerzeichen: {{CURRENT_DATE}}, nicht {{ CURRENT_DATE }}.
Modul: Arbeitsbereiche und Assistenten gestalten
RAG: Abrufmodus, Extraktion und Stellschrauben
| Weg | Passt für |
|---|---|
| Focused Retrieval | große Bestände, gezielte Fragen |
| Full Context (Using Entire Document) | kurze Leitfäden, die immer gelten |
| Agentische Suche | Modelle mit verlässlichem Native Function Calling |
CONTENT_EXTRACTION_ENGINE: leer (schwach bei Scans), tika, docling,
mistral_ocr (externer Dienst), document_intelligence, external und weitere.
| Variable | Standard | Wirkung |
|---|---|---|
CHUNK_SIZE / CHUNK_OVERLAP | 1000 / 100 | Abschnittslänge und Überlappung |
ENABLE_MARKDOWN_HEADER_TEXT_SPLITTER | True | trennt zuerst an Überschriften |
CHUNK_MIN_SIZE_TARGET | 0 | verschmilzt zu kleine Abschnitte |
RAG_TOP_K | 3 | Treffer der Vektorsuche |
ENABLE_RAG_HYBRID_SEARCH | False | BM25 plus Vektorsuche |
RAG_HYBRID_BM25_WEIGHT | 0.5 | 1 = nur BM25 |
RAG_TOP_K_RERANKER | 3 | Treffer nach dem Reranking |
RAG_RELEVANCE_THRESHOLD | 0.0 | Mindestwert für Treffer |
Alle sind ConfigVar.
| Änderung | Wissensbasen | Dateien direkt im Chat |
|---|---|---|
| Chunk-Größe oder Überlappung | Reindex empfohlen | neu hochladen |
| Embedding-Modell | Reindex zwingend | neu hochladen |
| Extraktions-Engine | Reindex hilft nicht, neu hochladen | neu hochladen |
Ein an Wissensbasen gebundenes Modell durchsucht nur diese. Die Standard-RAG-Vorlage erlaubt Antworten aus Modellwissen — für einen reinen Wissensassistenten im Systemprompt ausschließen, nicht global.
Modul: Unternehmenswissen mit RAG
Typische Fallen
- Eigenbetrieb gleich Rechtskonformität. Zertifizierungen gelten der Installation, nicht der Software; die Verantwortung bleibt beim Unternehmen.
- Nur das Chatmodell bewerten. Embedding, Extraktion und Websuche empfangen ebenfalls Daten.
- Audit-Log auf
REQUEST_RESPONSE. Kopiert Chatinhalte ins Logsystem. - Löschfristen ohne Backups. Dort bleiben gelöschte Chats erhalten.
- Logo per CSS ausblenden. Ab 51 Nutzern im 30-Tage-Zeitraum ein Lizenzverstoß.
- Produktiv mit SQLite starten. Kein eingebauter Umzug, und auf Netzwerkspeicher ein häufiger Ausfallgrund.
- Eingebaute ChromaDB mit mehreren Workern. Nicht fork-sicher, Worker sterben beim Upload.
- Rolling Updates bei Schemaänderungen. Alle Instanzen müssen gleichzeitig wechseln.
- ConfigVar in der env-Datei ändern. Nach dem Erststart gilt der Datenbankwert — und das Volume zu löschen löscht auch Nutzer und Chats.
ENABLE_PERSISTENT_CONFIG=Falseund weiter in der Oberfläche konfigurieren. Beim Neustart ist alles weg.- Ohne festen
WEBUI_SECRET_KEY. Der erzeugte Schlüssel geht verloren, verschiedene Werte je Instanz brechen Sitzungen und OAuth. - Ausgedachte Variablen wie
OIDC_CONFIG. Sie wirken schlicht nicht. - Gruppen von Hand pflegen. Der Gruppenabgleich entfernt sie bei der
nächsten Anmeldung. Liefert der Keycloak-Mapper volle Pfade wie
/gruppe, passt keine Gruppe. JWT_EXPIRES_IN=-1. Tokens gelten dann für immer.localhostim Container. Meint den Container, nicht den Modellserver.- Tool Calls ohne
indexim Stream. Leere Antworten ohne Fehlermeldung. - Basis sperren statt ausblenden. Assistenten darauf scheitern mit „Model not found“.
- Update All Models. Zieht neue Stände derselben Tags — auch ein Modellwechsel.
- Memory am Modell abschalten. Gespeicherte Erinnerungen sind damit nicht gelöscht.
- Gescannte PDFs ohne OCR-Engine. Indiziert, aber leer.
- Alte Fassung neben der neuen. Widersprüche per Prompt zu glätten ersetzt nicht das Entfernen.
- Nur positive Testfragen. Erst die Frage ohne Antwort im Bestand zeigt, ob ein Assistent erfindet.
Dieses Thema als Schulung für Ihr Team
Dieser Beitrag erklärt das Thema. Damit Ihr Team es danach auch anwendet, gibt es Open WebUI im Unternehmen als Schulung — an Ihrem eigenen Code, mit den Fragen, die ein Text nicht beantwortet. Sie wählen die Module, wir bauen daraus ein Programm.
6 Tage·ab 900 EUR netto pro Tag (bis 3 Teilnehmende) ·Termin nach Vereinbarung
Als Team-Schulung anfragenZum Seminar Open WebUI im Unternehmen →