Title: Vlastn%C3%AD hosting LLM: provoz stacku %E2%80%94 LLM EU Canonical: https://llmeu.com/cs/docs/self-hosting/ Markdown mirror: https://llmeu.com/cs/docs/self-hosting.md Machine-readable: https://llmeu.com/llms.txt (index) - https://llmeu.com/llms-full.txt (full catalogue) - https://llmeu.com/llms-catalogue.json Za%C4%8D%C3%ADn%C3%A1me - [Rychl%C3%BD start](/cs/docs/quickstart/) - [Konzole](/cs/docs/console/) - [Migrace](/cs/docs/migration/) - [API reference](/cs/docs/api/) Reference - [Autentizace](/cs/docs/authentication/) - [Endpointy](/cs/docs/endpoints/) - [Chyby](/cs/docs/errors/) - [Limity rychlosti](/cs/docs/rate-limits/) - [Streamov%C3%A1n%C3%AD](/cs/docs/streaming/) - [Politiky](/cs/docs/policies/) - [Sm%C4%9Brov%C3%A1n%C3%AD a politika](/cs/docs/routing/) - [Rezidence a oblasti](/cs/docs/residency/) - [D%C5%AFkazy a ov%C4%9B%C5%99ov%C3%A1n%C3%AD](/cs/docs/evidence/) - [Kompatibilita s OpenAI](/cs/docs/openai-compat/) Provoz - [Vlastn%C3%AD hostov%C3%A1n%C3%AD](/cs/docs/self-hosting/) # Vlastn%C3%AD hostov%C3%A1n%C3%AD Node a zapisovateln%C3%BD adres%C3%A1%C5%99 jsou cel%C3%BD po%C5%BEadavek. N%C3%AD%C5%BEe uveden%C3%A1 tvrzen%C3%AD byla p%C5%99e%C4%8Dtena ze soubor%C5%AF uveden%C3%BDch vedle nich; cokoli, co nebylo mo%C5%BEn%C3%A9 potvrdit, zde nen%C3%AD. ## Vstupn%C3%AD body - package.json vy%C5%BEaduje Node >= 22.5. %C3%9Alo%C5%BEi%C5%A1t%C4%9B SQLite je vlastn%C3%AD modul Node node:sqlite. - Neexistuje v%C5%AFbec %C5%BE%C3%A1dn%C3%BD seznam z%C3%A1vislost%C3%AD: aplikace, bal%C3%AD%C4%8Dky, skripty a testy b%C4%9B%C5%BE%C3%AD na standardn%C3%AD knihovn%C4%9B Node a Dockerfile nic neinstaluje. - Existuj%C3%AD t%C5%99i procesy; ka%C5%BEd%C3%BD otev%C3%ADr%C3%A1 datab%C3%A1zi a p%C5%99i spu%C5%A1t%C4%9Bn%C3%AD spou%C5%A1t%C3%AD migraci. ``` node apps/web/server/main.mjs # hub + console + embedded API API_EMBED=false node apps/api/src/main.mjs # API only, no pages node apps/worker/src/run.mjs # probes, latency, rollup, housekeeping ``` ## Datov%C3%A9 %C3%BAlo%C5%BEi%C5%A1t%C4%9B DATABASE_URL=sqlite:./data/llmeu.db nepot%C5%99ebuje server a adres%C3%A1%C5%99 a soubor se vytvo%C5%99%C3%AD p%C5%99i prvn%C3%ADm otev%C5%99en%C3%AD. Handle b%C4%9B%C5%BE%C3%AD v re%C5%BEimu WAL se zapnut%C3%BDmi ciz%C3%ADmi kl%C3%AD%C4%8Di a p%C4%9Btisekundov%C3%BDm %C4%8Dasov%C3%BDm limitem zanepr%C3%A1zdn%C4%9Bn%C3%AD. packages/shared/src/db/schema.sql je sch%C3%A9ma. Je pouze vytv%C3%A1%C5%99ec%C3%AD a idempotentn%C3%AD, tak%C5%BEe op%C4%9Btovn%C3%A9 spu%C5%A1t%C4%9Bn%C3%AD je bezpe%C4%8Dn%C3%A9; sloupec p%C5%99idan%C3%BD do existuj%C3%ADc%C3%AD tabulky mus%C3%AD b%C3%BDt tak%C3%A9 deklarov%C3%A1n v aditivn%C3%ADm kroku v packages/shared/src/db/index.mjs. URL postgres:// pou%C5%BE%C3%ADv%C3%A1 samostatnou v%C4%9Btev adapt%C3%A9ru. Tato v%C4%9Btev vy%C5%BEaduje bal%C3%AD%C4%8Dek pg, kter%C3%BD nen%C3%AD deklarovanou z%C3%A1vislost%C3%AD, a hlavi%C4%8Dka schema.sql %C5%99%C3%ADk%C3%A1, %C5%BEe cestu Postgres je t%C5%99eba pova%C5%BEovat za neov%C4%9B%C5%99enou, dokud nebude existovat skute%C4%8Dn%C3%BD ovlada%C4%8D a otestovan%C3%A1 migrace. SQLite je cesta, kterou tento repozit%C3%A1%C5%99 pou%C5%BE%C3%ADv%C3%A1. ## Oper%C3%A1torsk%C3%A9 CLI node scripts/db.mjs %C4%8Dte DATABASE_URL a nepot%C5%99ebuje %C5%BE%C3%A1dn%C3%A9 slu%C5%BEby. P%C5%99%C3%ADkazy: ## Prost%C5%99ed%C3%AD Seskupeno tak, jak je seskupuje .env.example. ## Docker Compose a image jsou voliteln%C3%A9: vlastn%C3%AD sada test%C5%AF repozit%C3%A1%C5%99e nevy%C5%BEaduje Docker a prim%C3%A1rn%C3%AD cestou je lok%C3%A1ln%C3%AD proces bez slu%C5%BEeb. - V%C3%BDchoz%C3%AD profil spou%C5%A1t%C3%AD web: porty 3000 a 8088, SQLite na svazku llmeu-data v /app/data, vestav%C4%9Bn%C3%A9 API a healthcheck na /healthz. - Stejn%C3%BD image spou%C5%A1t%C3%AD worker pomoc%C3%AD node apps/worker/src/run.mjs, %C4%8Dek%C3%A1, a%C5%BE web bude zdrav%C3%BD, a sd%C3%ADl%C3%AD svazek llmeu-data. - Dva dodate%C4%8Dn%C3%A9 profily jsou ve v%C3%BDchoz%C3%ADm nastaven%C3%AD vypnut%C3%A9: postgres (postgres:16-alpine) a redis (redis:7-alpine, rezervovan%C3%BD a ne%C4%8Dten%C3%BD cestou k%C3%B3du v1). - Profil gpu spou%C5%A1t%C3%AD vllm/vllm-openai s rezervac%C3%AD za%C5%99%C3%ADzen%C3%AD NVIDIA a p%C5%99ipojuje v%C3%A1hy z hostitele pouze pro %C4%8Dten%C3%AD; nen%C3%AD ve v%C3%BDchoz%C3%ADm nastaven%C3%AD povolen, proto%C5%BEe tvrdit inferenci v EU bez GPU by bylo nepravdiv%C3%A9. - Dockerfile je FROM node:24-alpine s tini, bez kroku sestaven%C3%AD a bez instalace z%C3%A1vislost%C3%AD, b%C4%9B%C5%BE%C3%AD jako u%C5%BEivatel node, zapisuje pouze pod /app/data, vystavuje 3000 a 8088 a spou%C5%A1t%C3%AD apps/web/server/main.mjs. ## Z%C3%A1lohy node scripts/backup.mjs bez p%C5%99ep%C3%ADna%C4%8D%C5%AF zapisuje ./backups/llmeu- .db. SQLite se kop%C3%ADruje pomoc%C3%AD VACUUM INTO, nikdy cp, proto%C5%BEe %C5%BEiv%C3%A1 datab%C3%A1ze WAL zkop%C3%ADrovan%C3%A1 pomoc%C3%AD cp m%C5%AF%C5%BEe v%C3%A9st k po%C5%A1kozen%C3%A9mu nebo zastaral%C3%A9mu stavu. ``` node scripts/backup.mjs # ./backups/llmeu-.db node scripts/backup.mjs --out /srv/backups/ # explicit destination node scripts/backup.mjs --verify ./backups/llmeu-.db node scripts/backup.mjs --restore ./backups/llmeu-.db --yes node scripts/backup.mjs --list ``` Ka%C5%BEd%C3%A1 z%C3%A1loha SQLite se p%C5%99ed ohl%C3%A1%C5%A1en%C3%ADm %C3%BAsp%C4%9Bchu skriptem ov%C4%9B%C5%99%C3%AD: obnov%C3%AD se do do%C4%8Dasn%C3%A9 kopie, PRAGMA integrity_check mus%C3%AD vr%C3%A1tit ok, sch%C3%A9ma se znovu aplikuje a vyp%C3%AD%C5%A1ou se po%C4%8Dty %C5%99%C3%A1dk%C5%AF pro modely, organizace a u%C5%BEivatele. S URL postgres:// skript pou%C5%BE%C3%ADv%C3%A1 pg_dump --format=custom a pot%C5%99ebuje pg_dump v PATH; dump nelze otev%C5%99%C3%ADt jako datab%C3%A1zi, tak%C5%BEe jeho po%C4%8Dty %C5%99%C3%A1dk%C5%AF vy%C5%BEaduj%C3%AD zku%C5%A1ebn%C3%AD obnoven%C3%AD. ## E-mail Transak%C4%8Dn%C3%AD e-mail %E2%80%94 reset hesla, ov%C4%9B%C5%99en%C3%AD adresy, pozv%C3%A1nky %E2%80%94 pou%C5%BE%C3%ADv%C3%A1 MAIL_SMTP_* nebo MAIL_API_URL s MAIL_FROM. Transport se vol%C3%AD jednou p%C5%99i spu%C5%A1t%C4%9Bn%C3%AD a je uveden na ka%C5%BEd%C3%A9 str%C3%A1nce, kter%C3%A1 pot%C5%99ebuje e-mail. Nasazen%C3%AD bez ani jednoho je podporovan%C3%BD stav: registrace, p%C5%99ihl%C3%A1%C5%A1en%C3%AD, zm%C4%9Bna hesla, t%C3%BDmy a pozv%C3%A1nky funguj%C3%AD, ale e-mail pro reset hesla a ov%C4%9B%C5%99en%C3%AD tam nelze zpracovat. Str%C3%A1nky to uv%C3%A1d%C4%9Bj%C3%AD a node scripts/db.mjs passwd je cesta k obnoven%C3%AD. ## Backendy inference %C5%98%C3%A1dek koncov%C3%A9ho bodu pojmenov%C3%A1v%C3%A1 runtime a region a registr backend%C5%AF vyb%C3%ADr%C3%A1 adapt%C3%A9r podle regionu, tak%C5%BEe na koncov%C3%BD bod m%C5%AF%C5%BEe odpov%C4%9Bd%C4%9Bt pouze stroj v regionu, kter%C3%BD pojmenov%C3%A1v%C3%A1. - INFERENCE_MOCK=true zachov%C3%A1v%C3%A1 deterministick%C3%BD v%C3%BDvojov%C3%BD backend, kter%C3%BD nepot%C5%99ebuje GPU ani v%C3%A1hy. - GPU_ENABLED=false vylu%C4%8Duje spravovan%C3%A9 backendy; p%C5%99i GPU_ENABLED=true se VLLM_BASE_URL vztahuje na jedin%C3%BD region pojmenovan%C3%BD VLLM_REGION. - Nasazen%C3%AD s n%C4%9Bkolika regiony nastavuje jednu prom%C4%9Bnnou na region, pojmenovanou podle slugu regionu (nap%C5%99%C3%ADklad VLLM_BASE_URL_DE_FRA). Koncov%C3%BD bod v regionu bez nakonfigurovan%C3%A9ho backendu je odm%C3%ADtnut, m%C3%ADsto aby byl obslou%C5%BEen ze stroje v jin%C3%A9m regionu. - Partnersk%C3%A9 backendy poch%C3%A1zej%C3%AD z PARTNER_BASE_URL_ a p%C5%99eb%C3%ADraj%C3%AD PARTNER_SOVEREIGNTY a PARTNER_API_KEY; server povoluje pou%C5%BEit%C3%AD partnera, kdy%C5%BE je nastaveno PARTNER_BASE_URL. Pokud nen%C3%AD nakonfigurov%C3%A1no GPU, odpov%C3%ADd%C3%A1 deterministick%C3%BD v%C3%BDvojov%C3%BD backend a jeho v%C3%BDstup uv%C3%A1d%C3%AD, %C5%BEe neb%C4%9B%C5%BEely %C5%BE%C3%A1dn%C3%A9 skute%C4%8Dn%C3%A9 v%C3%A1hy a %C5%BEe inference prvn%C3%AD strany vy%C5%BEaduje VLLM_BASE_URL a p%C5%99%C3%ADznak gpu_enabled. N%C3%A1hradn%C3%AD %C3%BAsp%C4%9Bch, kter%C3%BD by vypadal jako skute%C4%8Dn%C3%BD, je jedin%C3%A1 v%C4%9Bc, kterou tento produkt nikdy nesm%C3%AD vydat.