Cloudflare OS je open-source prostredie určené na používanie AI agentov, vytváranie dokumentov a vývoj jednoduchých aplikácií označovaných ako „Gadgets“. Napriek svojmu názvu nejde o klasický operačný systém, ale o webovú platformu postavenú na technológiách Cloudflare ako Workers, Wrangler a workerd.
Platforma umožňuje pripojiť rôznych poskytovateľov jazykových modelov. Ak nechcete využívať platené komerčné API a platiť za každý spracovaný token, môžete Cloudflare OS prepojiť s lokálnym modelom spusteným pomocou Ollama. Model sa potom vykonáva lokálne, pričom obsah požiadaviek nemusí byť odosielaný poskytovateľovi komerčného API.
V tomto návode spustíme Cloudflare OS, Ollama a model qwen3:4b ako navzájom prepojené Docker služby na macOS. Docker zabezpečí izolované prostredie, takže na váš systém nemusíte samostatne inštalovať Node.js, pnpm, Wrangler ani Ollama.
Model qwen3:4b predstavuje rozumný kompromis medzi kvalitou, rýchlosťou a spotrebou pamäte. Podporuje viac jazykov a používanie nástrojov, ktoré AI agenti v Cloudflare OS potrebujú.
Cloudflare OS je stále aktívne vyvíjaný projekt a lokálny beh cez Wrangler/workerd je určený predovšetkým na skúšanie a vývoj. Konfiguráciu z tohto návodu preto nepovažujte za produkčné nasadenie.
Tento postup vytvorí lokálne prostredie obsahujúce:
- Cloudflare OS na
http://localhost:8787 - Ollama ako samostatný Docker kontajner
- lokálny model
qwen3:4b - uloženie dát Cloudflare OS aj modelu

1. Požiadavky
- Git
- Docker Desktop
- aspoň 8 GB pamäte pridelenej Dockeru
- približne 8–10 GB voľného diskového miesta
Na Macu otvorte Docker Desktop a skontrolujte:
Settings → Resources → Memory
Pre qwen3:4b postačuje približne 8 GB. Pre väčší qwen3:8b odporúčam 12–16 GB.
2. Stiahnutie Cloudflare OS
Otvorte Terminal a spustite:
mkdir -p ~/Projects
cd ~/Projects
git clone https://github.com/cloudflare/cloudflare-os.git
cd cloudflare-osOverte, že ste v správnom priečinku:
pwd
lsMali by ste vidieť súbory ako package.json, pnpm-lock.yaml, run-dev-server.js a priečinok packages.
3. Úprava servera pre Docker
Cloudflare Wrangler musí v kontajneri počúvať na všetkých sieťových rozhraniach, nie iba na localhost.
Otvorte súbor:
nano run-dev-server.jsNájdite tento riadok:
const args = configs.flatMap(c => ["-c", c]);Hneď pod neho vložte:
const wranglerIp = process.env.WRANGLER_IP;
if (wranglerIp) {
args.push("--ip", wranglerIp);
}Výsledok má vyzerať takto:
const args = configs.flatMap(c => ["-c", c]);
const wranglerIp = process.env.WRANGLER_IP;
if (wranglerIp) {
args.push("--ip", wranglerIp);
}
const backendHost = process.env.VITE_BACKEND_HOST;4. Vytvorenie Dockerfile
V adresári cloudflare-os vytvorte súbor:
nano DockerfileVložte doň:
FROM node:22.14.0-bookworm-slim
ENV PNPM_HOME=/pnpm
ENV PATH=$PNPM_HOME:$PATH
WORKDIR /app
RUN corepack enable
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
COPY packages ./packages
COPY scripts ./scripts
COPY run-dev-server.js tsconfig.json wrangler.jsonc ./
RUN pnpm install --frozen-lockfile \
&& pnpm --filter @gadgets/typed-storage build \
&& pnpm --filter @gadgets/workshop-frontend exec vite build
ENV WRANGLER_IP=0.0.0.0
EXPOSE 8787
CMD ["node", "run-dev-server.js", "--serve-frontend-assets"]Súbor uložte.
5. Vytvorenie .dockerignore
nano .dockerignoreVložte:
.git
.github
.wrangler
.run-local-stamp
node_modules
**/node_modules
**/dist
.dev.vars
npm-debug.log*
pnpm-debug.log*Tento súbor zabráni kopírovaniu nepotrebných alebo citlivých dát do Docker image.
6. Vytvorenie compose.yaml
nano compose.yamlVložte:
services:
cloudflare-os:
build:
context: .
ports:
- "8787:8787"
init: true
environment:
WRANGLER_IP: 0.0.0.0
env_file:
- path: .dev.vars
required: false
volumes:
- cloudflare-os-data:/app/.wrangler
depends_on:
ollama-model:
condition: service_completed_successfully
restart: unless-stopped
ollama:
image: ollama/ollama:latest
volumes:
- ollama-data:/root/.ollama
healthcheck:
test: ["CMD", "ollama", "list"]
interval: 5s
timeout: 5s
retries: 20
restart: unless-stopped
ollama-model:
image: ollama/ollama:latest
environment:
OLLAMA_HOST: http://ollama:11434
command: ["pull", "qwen3:4b"]
depends_on:
ollama:
condition: service_healthy
volumes:
- ollama-data:/root/.ollama
restart: "no"
volumes:
cloudflare-os-data:
ollama-data:Súbor uložte.
7. Voliteľná konfigurácia .dev.vars
Pre samotnú Ollama nie je API kľúč potrebný. Súbor .dev.vars teda nemusíte vytvárať.
Ak ho chcete pripraviť pre budúce integrácie:
touch .dev.vars
chmod 600 .dev.varsDo tohto súboru neskôr môžete pridávať OAuth údaje pre GitHub, Google, Slack a ďalšie služby.
Súbor .dev.vars neposielajte do Gitu a nezverejňujte jeho obsah.
8. Kontrola Docker konfigurácie
Spustite:
docker compose configAk konfigurácia neobsahuje chybu, môžete pokračovať.
9. Zostavenie Cloudflare OS image
Spustite:
docker compose buildPri prvom zostavení Docker:
- stiahne Node.js image
- nainštaluje
pnpm - stiahne JavaScript závislosti
- zostaví frontend
- pripraví Cloudflare OS image
Prvé zostavenie môže trvať niekoľko minút.
10. Spustenie celého prostredia
docker compose up -dPri prvom štarte sa automaticky:
- spustí Ollama
- skontroluje jej dostupnosť
- stiahne model
qwen3:4b - model uloží do Docker volume
- spustí Cloudflare OS
Model má približne 2,5 GB. Prvé spustenie preto môže chvíľu trvať.
Priebeh môžete sledovať:
docker compose logs -fSledovanie logov ukončíte pomocou Ctrl + C. Kontajnery budú ďalej bežať.
11. Kontrola kontajnerov
docker compose ps -aOčakávaný stav:
cloudflare-os–Upollama–Up (healthy)ollama-model–Exited (0)
Stav Exited (0) pri ollama-model je správny. Tento pomocný kontajner iba stiahne model a po úspešnom dokončení sa ukončí.
12. Kontrola nainštalovaného modelu
Spustite:
docker compose exec ollama ollama listVýstup by mal obsahovať:
qwen3:4b13. Test Ollama API z Cloudflare OS
Týmto príkazom overíte, že Cloudflare OS kontajner vidí Ollama server:
docker compose exec cloudflare-os node -e \
'const r = await fetch("http://ollama:11434/v1/models"); console.log(r.status, await r.text())'Očakávajte stav 200 a model qwen3:4b.
14. Otvorenie Cloudflare OS
V prehliadači otvorte:
http://localhost:8787Pri prvom otvorení si vytvorte lokálny účet podľa pokynov aplikácie.
15. Pridanie Ollama modelu do Cloudflare OS
V Cloudflare OS otvorte nastavenia AI modelov a zvoľte pridanie nového modelu.
Vyplňte:
Select Model: Other Ollama...
Model ID: qwen3:4b
Display Name: Qwen 3 4B (Local)
API Token:
API URL: http://ollama:11434Pole API Token nechajte prázdne.
Kliknite na Add Model a následne model nastavte ako aktívny.
Prečo sa nepoužíva localhost?
Nepoužívajte:
http://localhost:11434Cloudflare OS a Ollama sú dva samostatné kontajnery. localhost v Cloudflare OS kontajneri označuje samotný Cloudflare OS kontajner.
Názov ollama je interný sieťový názov služby definovaný v compose.yaml, preto správna adresa je:
http://ollama:1143416. Základné ovládanie
Zobrazenie stavu
docker compose psZobrazenie logov
docker compose logs -fIba logy Cloudflare OS
docker compose logs -f cloudflare-osIba logy Ollama
docker compose logs -f ollamaZastavenie kontajnerov
docker compose stopOpätovné spustenie
docker compose startReštart
docker compose restartZastavenie a odstránenie kontajnerov
docker compose downTento príkaz zachová Cloudflare OS dáta aj stiahnutý model.
Odstránenie vrátane všetkých lokálnych dát
Pozor: nasledujúci príkaz odstráni používateľské dáta Cloudflare OS aj stiahnuté Ollama modely:
docker compose down --volumesPo ďalšom spustení sa model bude musieť stiahnuť znova.
17. Aktualizácia Cloudflare OS
Najskôr zastavte stack:
docker compose downStiahnite nové zmeny:
git pullPozor: ak upstream zmenil run-dev-server.js, skontrolujte, či v ňom zostala úprava s WRANGLER_IP.
Následne image znovu zostavte a spustite:
docker compose build --no-cache
docker compose up -d18. Prechod na väčší model
Ak chcete použiť kvalitnejší qwen3:8b, najskôr zvýšte pamäť Docker Desktop približne na 12–16 GB.
V compose.yaml zmeňte:
command: ["pull", "qwen3:4b"]na:
command: ["pull", "qwen3:8b"]Potom spustite:
docker compose up -dPo stiahnutí modelu ho pridajte v Cloudflare OS:
Select Model: Other Ollama...
Model ID: qwen3:8b
Display Name: Qwen 3 8B (Local)
API Token:
API URL: http://ollama:11434Model qwen3:8b má približne 5,2 GB a poskytuje lepšie výsledky, ale potrebuje viac pamäte a bude pomalší.
19. Dôležité obmedzenie na Macu
Ollama spustená v Linux Docker kontajneri na Macu spravidla nepoužíva Apple Metal GPU. Inferencia preto môže byť citeľne pomalšia než pri natívnej Ollama aplikácii pre macOS.
Naše Docker riešenie má výhodu jednoduchého a izolovaného nasadenia. Ak bude rýchlosť nedostatočná, vhodným ďalším krokom je:
- spustiť Cloudflare OS v Dockeri
- spustiť Ollama natívne v macOS
- prepojiť Cloudflare OS s hostiteľskou Ollama cez
host.docker.internal.
Pri čisto Docker variante je qwen3:4b rozumný kompromis medzi kvalitou, veľkosťou a spotrebou pamäte.
Záver
Po dokončení návodu budete mať plne lokálne prostredie, v ktorom Cloudflare OS komunikuje s modelom qwen3:4b prostredníctvom Ollama. Všetky služby bežia v Docker kontajneroch a ich dáta sú uložené v trvalých Docker volumes, takže zostanú zachované aj po zastavení alebo opätovnom vytvorení kontajnerov.
Takéto riešenie prináša niekoľko výhod:
- model a používateľské dáta zostávajú pod vašou kontrolou
- celé prostredie môžete spustiť alebo zastaviť jedným príkazom
- konfigurácia je prenositeľná medzi počítačmi s Dockerom
- neskôr môžete vymeniť model bez preinštalovania Cloudflare OS
- neplatíte za jednotlivé AI tokeny
Treba však počítať s tým, že kvalita a rýchlosť lokálneho modelu závisia od dostupného hardvéru. Menší model qwen3:4b je vhodný na úvodné skúšanie, jednoduchšie otázky a základnú prácu agentov. Pri náročnejších úlohách môžete prejsť na qwen3:8b alebo iný výkonnejší model, ak Dockeru pridelíte dostatok pamäte.
Na Macu môže byť Ollama v Docker kontajneri pomalšia, pretože spravidla nevyužíva Apple Metal akceleráciu. Ak vám výkon nebude postačovať, môžete neskôr ponechať Cloudflare OS v Dockeri, spustiť Ollama natívne v macOS a prepojiť ich cez adresu host.docker.internal.
Výsledná zostava je vhodná najmä na experimentovanie, oboznámenie sa s Cloudflare OS a súkromné lokálne používanie AI bez závislosti od plateného modelového API.
