Ga naar hoofdinhoud

Docker

Docker is de eenvoudigste productieachtige implementatie voor één server.

Begin voor een via internet bereikbare installatie op één server met Besloten externe implementatie. Het Compose-sjabloon publiceert geen applicatiepoorten, gebruikt standaard de image main en voegt een buitenste Cloudflare Access-grens, hostcontroles, back-ups en containerlimieten toe.

Beschikbaarheid van Work

Work is standaard ingeschakeld in de Compose-bestanden van de repository. De image bevat de Docker CLI en Compose koppelt /var/run/docker.sock, waardoor de taakcontainers van Work nevengeschikte containers van de Libre WebUI-container zijn. Ze verschijnen in docker ps op de host.

Een proces met toegang tot die socket heeft op de Docker-host rechten die gelijkstaan aan rootrechten. Work standaard inschakelen is een bewuste keuze: Work is een kernfunctie en kan niet zonder toegang tot de daemon werken. Het gevolg is dat elke Libre WebUI-beheerder feitelijk een hostbeheerder is. Houd hier rekening mee:

  • Houd de stack op een host waarvan u de beheerders al vertrouwt.
  • Stel de gepubliceerde poort niet bloot aan een niet-vertrouwd netwerk.
  • Verwijder de koppeling van /var/run/docker.sock wanneer Work niet nodig is. De Work-pagina meldt dan Runtime unavailable.

Op Linux behoort de socket tot de groep docker in plaats van root. De appgebruiker zonder rootrechten heeft daarom de groeps-ID nodig. Stel die eenmaal in:

echo "DOCKER_GID=$(docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
alpine stat -c '%g' /var/run/docker.sock)" >> .env

Lees de waarde via een container uit zoals hierboven. Een macOS-host meldt een andere waarde dan de container ziet, omdat Docker Desktop de socket via een virtuele machine proxyt. Als de groep onjuist is, benoemt de Work-pagina het probleem in plaats van stil te falen. Zie Work: geïsoleerde werkruimten.

Work-previews en de Work Computer publiceren willekeurige poorten uitsluitend op een privé-interface van de host. Docker Desktop werkt met de standaardwaarden van Compose: de host-loopback voor de bind en host.docker.internal voor de backendverbinding. Native Docker Engine kan een listener op de host-loopback niet bereiken vanuit een zustercontainer. Stel de bind dan in op de niet-publieke gateway van de Docker-bridge:

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

De Compose-bestanden koppelen host.docker.internal via host-gateway. Gebruik nooit WORK_PREVIEW_BIND=0.0.0.0; daarmee komen niet-geauthenticeerde tijdelijke taakpoorten op elke host-interface te staan in plaats van achter de ondertekende proxy van Libre WebUI.

Meegeleverde Ollama

Voert Libre WebUI en Ollama uit in één Compose-stack:

docker compose up -d

Open http://localhost:8080.

De WebUI-poort bindt standaard aan de loopback van de host. Stel WEBUI_BIND_ADDRESS=0.0.0.0 alleen in wanneer een vertrouwd LAN of een reverse proxy op de host toegang nodig heeft en beperk de poort met de firewall van de host.

Ollama blijft privé binnen het Compose-netwerk. Voeg de expliciete host-override toe om Ollama via loopback beschikbaar te maken voor hosttoepassingen:

docker compose -f docker-compose.yml -f docker-compose.ollama-host.yml up -d

Stel OLLAMA_BIND_ADDRESS uitsluitend in wanneer een andere computer Ollama moet kunnen bereiken en bescherm die poort met een firewall en een proxy die authenticatie ondersteunt.

NVIDIA GPU

Gebruik het GPU Compose-bestand wanneer Docker toegang heeft tot de NVIDIA-runtime:

docker compose -f docker-compose.gpu.yml up -d

Controleer de GPU-toegang vanuit de Ollama-container als modellen nog steeds op de CPU draaien.

Externe Ollama

Gebruik dit wanneer Ollama al op de host of een andere server draait:

docker compose -f docker-compose.external-ollama.yml up -d

Overschrijf zo nodig de Ollama-URL:

OLLAMA_BASE_URL=http://192.168.1.10:11434 docker compose -f docker-compose.external-ollama.yml up -d

Work met geïsoleerde socket

De standaard Compose-bestanden koppelen de Docker-socket in de Libre WebUI-container, zodat Work taakcontainers kan uitvoeren; die koppeling geeft rechten op de Docker-host die gelijkstaan aan rootrechten. Gebruik de socketproxyvariant om Work te behouden zonder de webtoepassing toegang tot de socket te geven:

docker compose -f docker-compose.socket-proxy.yml up -d

Een socketproxy in een intern netwerk beheert /var/run/docker.sock en stuurt uitsluitend de API-secties door die Work gebruikt (containers, images, volumes, netwerken, exec, info). Swarm-, geheimen-, configuratie-, build- en systeemeindpunten worden door de proxy geweigerd. Libre WebUI bereikt hem via DOCKER_HOST=tcp://docker-socket-proxy:2375: geen socketkoppeling, geen DOCKER_GID, terwijl de interactieve terminal en systeemdiagnostiek ongewijzigd werken. In de documentatie over werkruimten leest u wat deze grens wel en niet afdekt.

Gegevenspersistentie

Libre WebUI bewaart backendgegevens in /app/backend/data in de container. De Compose-bestanden koppelen dat pad als benoemd volume.

De image gebruikt dat pad ook standaard wanneer hij rechtstreeks met docker run wordt gestart; de tijdelijke databasecontrole blijft afzonderlijk onder /app/backend/temp. Koppel /app/backend/data telkens wanneer de container opnieuw kan worden gemaakt.

Stel voor productie stabiele geheimen in:

JWT_SECRET=replace-with-a-long-random-secret
ENCRYPTION_KEY=replace-with-64-hex-characters

Maak samen een back-up van het gegevensvolume en de versleutelingssleutel.

Controleer voordat u een rechtstreeks gestarte container uit een oudere image verwijdert of /app/backend/data/.encryption_key bestaat, of leg de geconfigureerde ENCRYPTION_KEY vast. Oudere images konden een automatisch gegenereerde sleutel alleen naar de containerlaag schrijven; als u die container verwijdert, verwijdert u ook de enige sleutel waarmee de permanente database kan worden ontsleuteld.

Als u een aangepaste runtime met Work-ondersteuning gebruikt, staan de taakbestanden in afzonderlijke benoemde Docker-volumes en zijn ze niet opgenomen in de normale back-up van /app/backend/data.

Openbare toegang

De Compose-bestanden van de repository binden de WebUI aan loopback en stellen CORS_ORIGIN rechtstreeks in. Een waarde in uw shell- of .env-bestand vervangt die letterlijke waarde niet. Bewerk de vermelding libre-webui.environment of sla een expliciete override op als compose.origin.yml:

services:
libre-webui:
environment:
CORS_ORIGIN: https://your-domain.example
BASE_URL: https://your-domain.example

Pas de override samen met het gekozen Compose-bestand uit de repository toe:

docker compose -f docker-compose.yml -f compose.origin.yml up -d

Plaats Libre WebUI vervolgens achter HTTPS met een reverse proxy of loadbalancer van het platform. Stel WEBUI_BIND_ADDRESS in op de exacte interface die de proxy nodig heeft; publiceer de poort niet op elke interface, tenzij de firewall dat vereist.

De server levert de gebouwde frontend al efficiënt af: bundels met een hash onder /js/ en /assets/ worden brotli- of gzip-gecomprimeerd verstuurd met een immutable cachelevensduur van een jaar, terwijl index.html en de service worker als no-cache worden gemarkeerd, zodat een nieuwe release bij de volgende keer laden wordt opgepikt. Een proxy hoeft die paden niet opnieuw te comprimeren of te cachen; laat Accept-Encoding door.

Nuttige opdrachten

docker compose ps
docker compose logs -f libre-webui
docker compose logs -f ollama
docker compose pull
docker compose up -d

Gerelateerde documentatie