Zum Hauptinhalt springen

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

Verwandte Dokumentation