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-os

Overte, že ste v správnom priečinku:

pwd
ls

Mali 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.js

Ná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 Dockerfile

Vlož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 .dockerignore

Vlož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.yaml

Vlož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.vars

Do 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 config

Ak konfigurácia neobsahuje chybu, môžete pokračovať.

9. Zostavenie Cloudflare OS image

Spustite:

docker compose build

Pri 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 -d

Pri prvom štarte sa automaticky:

  1. spustí Ollama
  2. skontroluje jej dostupnosť
  3. stiahne model qwen3:4b
  4. model uloží do Docker volume
  5. 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 -f

Sledovanie logov ukončíte pomocou Ctrl + C. Kontajnery budú ďalej bežať.

11. Kontrola kontajnerov

docker compose ps -a

Očakávaný stav:

  • cloudflare-osUp
  • ollamaUp (healthy)
  • ollama-modelExited (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 list

Výstup by mal obsahovať:

qwen3:4b

13. 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:8787

Pri 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:11434

Pole 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:11434

Cloudflare 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:11434

16. Základné ovládanie

Zobrazenie stavu

docker compose ps

Zobrazenie logov

docker compose logs -f

Iba logy Cloudflare OS

docker compose logs -f cloudflare-os

Iba logy Ollama

docker compose logs -f ollama

Zastavenie kontajnerov

docker compose stop

Opätovné spustenie

docker compose start

Reštart

docker compose restart

Zastavenie a odstránenie kontajnerov

docker compose down

Tento 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 --volumes

Po ďalšom spustení sa model bude musieť stiahnuť znova.

17. Aktualizácia Cloudflare OS

Najskôr zastavte stack:

docker compose down

Stiahnite nové zmeny:

git pull

Pozor: 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 -d

18. 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 -d

Po 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:11434

Model 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:

  1. spustiť Cloudflare OS v Dockeri
  2. spustiť Ollama natívne v macOS
  3. 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.