Přeskočit na hlavní obsah

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

Související dokumentace​