Docker
Docker ist die einfachste produktionsähnliche Bereitstellung auf einem Server. Für einen internetfähigen Host beginne mit
Privater Remote-Bereitstellung: keine veröffentlichten Ports, main, Cloudflare Access,
Hostkontrollen, Sicherungen und Limits.
Work-Verfügbarkeit
Work ist in Repository-Compose-Dateien aktiv. Das Image enthält die Docker-CLI und bindet /var/run/docker.sock ein;
Aufgabencontainer sind Geschwister und erscheinen in docker ps. Socketzugriff ist root-äquivalent: Jeder Libre-WebUI-
Administrator ist faktisch Hostadministrator. Nutze einen vertrauenswürdigen Host, exponiere den Port nicht ungeschützt und
entferne den Socket ohne Work; dann erscheint Laufzeit nicht verfügbar.
Unter Linux benötigt der Nicht-root-Benutzer die Socket-Gruppen-ID:
echo "DOCKER_GID=$(docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
alpine stat -c '%g' /var/run/docker.sock)" >> .env
Lies sie wie gezeigt im Container; macOS meldet wegen der VM außen einen anderen Wert. Falsche Gruppen werden in Work erklärt. Siehe Work: isolierte Workspaces.
Work-Vorschauen und der Work-Computer veröffentlichen zufällige Ports nur auf einer privaten
Hostschnittstelle. Docker Desktop funktioniert mit den Compose-Standards: Host-Loopback für die
Bindung und host.docker.internal für die Backend-Verbindung. Native Docker Engine erreicht
einen Listener auf dem Host-Loopback aus einem Geschwistercontainer nicht. Binde stattdessen an
das nicht öffentliche Docker-Bridge-Gateway:
echo "WORK_PREVIEW_BIND=$(docker network inspect bridge \
--format '{{(index .IPAM.Config 0).Gateway}}')" >> .env
echo "WORK_DOCKER_PUBLISHED_HOST=host.docker.internal" >> .env
docker compose up -d --force-recreate libre-webui
Die Compose-Dateien bilden host.docker.internal über host-gateway ab. Verwende niemals
WORK_PREVIEW_BIND=0.0.0.0; das würde unauthentifizierte kurzlebige Aufgabenports auf jeder
Hostschnittstelle veröffentlichen, statt sie hinter dem signierten Proxy von Libre WebUI zu halten.
Enthaltenes Ollama
docker compose up -d
Öffne http://localhost:8080. WebUI bindet standardmäßig Loopback. Setze
WEBUI_BIND_ADDRESS=0.0.0.0 nur für vertrauenswürdiges LAN oder Reverse-Proxy und sichere den Port.
Ollama bleibt im Compose-Netz. Für Host-Loopback:
docker compose -f docker-compose.yml -f docker-compose.ollama-host.yml up -d
Setze OLLAMA_BIND_ADDRESS nur für andere Rechner und schütze den Port.
NVIDIA-GPU
docker compose -f docker-compose.gpu.yml up -d
Prüfe GPU-Zugriff im Ollama-Container, falls Modelle CPU nutzen.
Externes Ollama
docker compose -f docker-compose.external-ollama.yml up -d
OLLAMA_BASE_URL=http://192.168.1.10:11434 docker compose -f docker-compose.external-ollama.yml up -d
Socket-isoliertes Work
Für Work ohne Socket in der Webanwendung:
docker compose -f docker-compose.socket-proxy.yml up -d
Ein interner Proxy hält /var/run/docker.sock und erlaubt nur Container, Images, Volumes, Netzwerke, exec und info;
Swarm, Secrets, Configs, Build und System werden verweigert. Libre nutzt
DOCKER_HOST=tcp://docker-socket-proxy:2375, ohne DOCKER_GID; Terminal und Diagnose bleiben gleich. Die
Workspaces-Dokumentation erklärt Grenzen.
Datenpersistenz
Backend-Daten liegen unter /app/backend/data, von Compose als Volume eingebunden. Auch docker run nutzt diesen Pfad;
Preflight-Scratch liegt in /app/backend/temp. Binde den Datenpfad bei möglicher Neuerstellung ein.
JWT_SECRET=replace-with-a-long-random-secret
ENCRYPTION_KEY=replace-with-64-hex-characters
Sichere Volume und Schlüssel zusammen. Prüfe vor Löschen alter Direktcontainer .encryption_key oder notiere
ENCRYPTION_KEY, da alte Images den einzigen automatisch erzeugten Schlüssel in der Containerschicht speichern konnten.
Prüfe insbesondere /app/backend/data/.encryption_key.
Benutzerdefinierte Work-Volumes sind nicht in der normalen Sicherung enthalten.
Öffentlicher Zugriff
Repository-Compose bindet Loopback und setzt CORS_ORIGIN literal; Shell oder .env überschreiben es nicht. Nutze:
Bearbeite dafür libre-webui.environment oder speichere das Override als compose.origin.yml. Die Socketgruppe heißt docker.
services:
libre-webui:
environment:
CORS_ORIGIN: https://your-domain.example
BASE_URL: https://your-domain.example
docker compose -f docker-compose.yml -f compose.origin.yml up -d
Stelle danach HTTPS über Proxy oder Loadbalancer bereit und binde WEBUI_BIND_ADDRESS nur an die benötigte Schnittstelle.
Gehashte Bundles unter /js/ und /assets/ liefert der Server bereits brotli-/gzip-komprimiert mit einem Jahr
immutable-Cache; index.html und Service Worker sind no-cache, sodass ein Release beim nächsten Laden greift.
Ein Proxy muss diese Pfade weder neu komprimieren noch cachen; reiche Accept-Encoding durch.
Nützliche Befehle
docker compose ps
docker compose logs -f libre-webui
docker compose logs -f ollama
docker compose pull
docker compose up -d