Docker
Docker je nejjednodušší produkční nasazení na jediném serveru. Pro server dostupný z internetu začněte Soukromým vzdáleným nasazením, jehož šablona nepublikuje aplikační porty a přidává Cloudflare Access, ochranu hostitele, zálohy a limity kontejnerů.
Výchozí image sleduje větev main. Místní hodnoty, například DOCKER_GID, ukládejte do .env.
Dostupnost Work
Work je ve výchozím stavu povolen v Compose souborech repository. Image obsahuje Docker CLI a Compose připojuje /var/run/docker.sock, takže kontejnery úloh Work jsou sourozenci kontejneru Libre WebUI a zobrazí se v docker ps hostitele.
Proces s přístupem k tomuto socketu ovládá Docker hostitele jako root. Každý administrátor Libre WebUI je proto prakticky administrátorem hostitele. Používejte důvěryhodný hostitel, nepublikujte port do nedůvěryhodné sítě a pokud Work nepotřebujete, připojení /var/run/docker.sock odstraňte; stránka Work pak hlásí Runtime unavailable.
V Linuxu patří socket skupině docker, takže uživatel aplikace potřebuje její číselné 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
Hodnotu čtěte přes kontejner. Hostitel macOS hlásí kvůli VM Docker Desktopu jinou hodnotu než kontejner. Je-li skupina chybná, stránka Work problém pojmenuje. Viz Work: izolované pracovní prostory.
Náhledy Work a Work Computer publikují náhodné porty pouze na privátním rozhraní hostitele. Docker Desktop funguje s výchozími hodnotami Compose: loopback hostitele pro vazbu a host.docker.internal pro spojení z backendu. Nativní Docker Engine se ze sourozeneckého kontejneru na posluchač na loopbacku hostitele nedostane, proto vazbu nastavte na neveřejnou bránu mostu Docker:
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
Compose soubory mapují host.docker.internal přes host-gateway. Nikdy nepoužívejte WORK_PREVIEW_BIND=0.0.0.0; publikovalo by to neověřené dočasné porty úloh na všech rozhraních hostitele místo toho, aby zůstaly za podepsanou proxy Libre WebUI.
Vestavěná Ollama
Spustí Libre WebUI a Ollama v jedné Compose sestavě:
docker compose up -d
Otevřete http://localhost:8080. Port WebUI se ve výchozím stavu váže na loopback hostitele. WEBUI_BIND_ADDRESS=0.0.0.0 nastavte jen tehdy, když jej potřebuje důvěryhodná LAN nebo reverse proxy, a port omezte firewallem.
Ollama zůstává soukromá v síti Compose. Pro zpřístupnění aplikacím hostitele na loopbacku přidejte override:
docker compose -f docker-compose.yml -f docker-compose.ollama-host.yml up -d
OLLAMA_BIND_ADDRESS nastavujte pouze pro přístup z jiného stroje a port chraňte firewallem a proxy s ověřením.
NVIDIA GPU
Má-li Docker přístup k runtime NVIDIA, použijte GPU Compose soubor:
docker compose -f docker-compose.gpu.yml up -d
Pokud modely stále běží na CPU, ověřte přístup ke GPU z kontejneru Ollama.
Externí Ollama
Použijte, když Ollama již běží na hostiteli nebo jiném serveru:
docker compose -f docker-compose.external-ollama.yml up -d
Podle potřeby změňte URL:
OLLAMA_BASE_URL=http://192.168.1.10:11434 docker compose -f docker-compose.external-ollama.yml up -d
Work s izolovaným socketem
Chcete-li zachovat Work bez předání raw socketu webové aplikaci, použijte variantu se socket proxy:
docker compose -f docker-compose.socket-proxy.yml up -d
Interní proxy drží /var/run/docker.sock a předává pouze části API používané Work (containers, images, volumes, networks, exec, info). Swarm, secrets, configs, build a system odmítá. Libre WebUI ji používá přes DOCKER_HOST=tcp://docker-socket-proxy:2375 bez připojeného socketu či DOCKER_GID; terminál a diagnostika fungují stejně. Hranice zužuje API, ale nepředstavuje úplnou izolaci tenantů, protože vytváření kontejnerů stále umožňuje bind-mount cest hostitele.
Trvalost dat
Libre WebUI ukládá backendová data do /app/backend/data v kontejneru a Compose tuto cestu připojuje jako pojmenovaný volume. Přímé docker run ji používá také; dočasná data kontroly databáze jsou odděleně v /app/backend/temp. /app/backend/data připojte vždy, když může být kontejner znovu vytvořen.
V produkci nastavte stabilní tajemství:
JWT_SECRET=replace-with-a-long-random-secret
ENCRYPTION_KEY=replace-with-64-hex-characters
Datový volume a šifrovací klíč zálohujte společně. Před smazáním přímo spuštěného kontejneru ze staršího image ověřte /app/backend/data/.encryption_key nebo uchovejte ENCRYPTION_KEY; starší image mohly jediný automaticky vytvořený klíč uložit pouze ve vrstvě kontejneru. Soubory Work ve zvláštních pojmenovaných volumes nejsou součástí běžné zálohy.
Veřejný přístup
Compose soubory repository vážou WebUI na loopback a nastavují CORS_ORIGIN přímo. Upravte položku libre-webui.environment nebo vytvořte compose.origin.yml:
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
Poté umístěte Libre WebUI za HTTPS reverse proxy nebo load balancer. WEBUI_BIND_ADDRESS nastavte na přesné rozhraní, které proxy potřebuje; port nepublikujte na všech rozhraních, pokud to firewall nevyžaduje.
Server už sestavený frontend doručuje efektivně: hashované bundly pod /js/ a /assets/ odesílá komprimované přes brotli nebo gzip s roční immutable platností cache, zatímco index.html a service worker označuje jako no-cache, takže se nové vydání načte při dalším otevření. Proxy tyto cesty nemusí znovu komprimovat ani ukládat do cache; propusťte hlavičku Accept-Encoding.
Užitečné příkazy
docker compose ps
docker compose logs -f libre-webui
docker compose logs -f ollama
docker compose pull
docker compose up -d