Dizajn je opisan u odjeljku 6 dokumenta docs/architecture/23-ops.md. Workers pokreće ograničeni web sloj Quirea. Potpuna jednakost funkcija na Workersu nije cilj (odjeljak 12 PRD-a): pri pokretanju se odbijaju nepodržane mogućnosti, uz navođenje razloga.
Stanje u ovom izdanju
Konfiguracija je pripremljena (apps/web/wrangler.jsonc, Nitro preset cloudflare-module, Hyperdrive most i provjere pri pokretanju). Workeru su potrebni S3-kompatibilno spremište za R2 (QUIRE_STORAGE_DRIVER=s3), realtime upravljački program za više zahtjeva (QUIRE_REALTIME_DRIVER=durable_objects ili centrifugo), zajednički keš (QUIRE_CACHE_DRIVER=postgres ili valkey) i HTTP pružatelj e-pošte. Bez njih Worker odbija pokretanje, a evidencija navodi svaku postavku. Durable Objects upravljački program je klijent realtime Workera u apps/realtime-worker (po jedan Durable Object po kanalu za širenje, prisustvo i historiju te po jedan po osobi za prekide veze); implementirajte ga uz web sloj kao u nastavku ili koristite Centrifugo.
Komponente
Komponenta
Na Cloudflareu
web
Worker s nodejs_compat
Postgres
Vanjska baza dostupna kroz Hyperdrive: HYPERDRIVE za ulogu aplikacije i REPORT_HYPERDRIVE za ulogu izvještavanja na istoj fizičkoj bazi. Pri pokretanju web sloj kopira svaki niz veze u DATABASE_URL i QUIRE_REPORT_DATABASE_URL
Datoteke
R2 putem S3 API-ja (S3_ENDPOINT=https://<account>.r2.cloudflarestorage.com); povezivanje FILES priključuje spremnik
Pozadinski zadaci
pg-boss preko Hyperdrivea kada se zadatak mora staviti u red zajedno sa zapisom. Ako je na pratećem workeru postavljeno QUIRE_QUEUE_DRIVER=cloudflare, laki zadaci (nesortirana obavještenja i isporuke webhookova) idu putem Cloudflare Queuesa, pa se Postgres zbog njih ne provjerava. Prateći worker obrađuje oboje
Realtime
Realtime Worker apps/realtime-worker s Durable Objects
Prateći host s kontejnerima. Worker ih ne može pokretati
Praćenje
Workers observability, uključen u wrangler.jsonc
REPORT_HYPERDRIVE pruža ulogu izvještavanja za fizičku bazu navedenu u HYPERDRIVE. Ova platforma ne poslužuje organizacije vezane za dodatne fizičke baze, kako je opisano u nastavku.
Šta ova platforma ne može
Pri pokretanju se odbijaju sve neispravne postavke, uz prikaz svih problema:
Nema SMTP-a. Koristite HTTP pružatelja u QUIRE_EMAIL_PROVIDER_CONFIG.
Nema lokalnog diska.QUIRE_STORAGE_DRIVER mora označavati spremište objekata.
Nema realtimea ni keša unutar procesa. Workers ne dijele memoriju između zahtjeva, pa se odbijaju QUIRE_REALTIME_DRIVER=inprocess i QUIRE_CACHE_DRIVER=memory.
Nema ClamAV-a, Gotenberga ni ffmpega u Workeru. Ako su Workeru postavljeni CLAMAV_URL, GOTENBERG_URL ili FFMPEG_PATH, odbijaju se; umjesto toga postavite ih na pratećem workeru.
Nema organizacija sa zasebnim bazama. Hyperdrive veze Workera fiksiraju se pri implementaciji, pa organizacija sa svojom bazom dobija jasnu stranicu da usluga ovdje nije dostupna. Poslužite je putem Composea ili Vercela.
Postoji i mogućnost koja se ne odbija, ali treba je imati na umu: predrenderiranje i inkrementalno generisanje statičkih stranica ne rade na Workersu, bez obzira na dokumentaciju okvira. Svaka ruta renderuje se pri svakom zahtjevu.
Na ovoj platformi transakcije trebaju biti kratke i ne smiju ostati otvorene tokom mrežnog poziva: Hyperdrive vraća stanje sesije na početno kada se veza vrati u pool, pa se kontekst klijenta postavlja za svaku transakciju.
Implementacija
Kreirajte resurse:
bun run --bun wrangler hyperdrive create quire-app --connection-string="postgres://quire_app:...@db.example.com:5432/quire"bun run --bun wrangler hyperdrive create quire-report --connection-string="postgres://quire_report:...@db.example.com:5432/quire"bun run --bun wrangler r2 bucket create quire-filesbun run --bun wrangler queues create quire-jobs
Unesite dva Hyperdrive ID-ja u apps/web/wrangler.jsonc.
Postavite tajne, jednu po jednu, naredbom bun run --bun wrangler secret put <NAME> iz direktorija apps/web: QUIRE_SECRET_KEY, QUIRE_MASTER_KEY, QUIRE_EMAIL_PROVIDER_CONFIG, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, QUIRE_COLLAB_SIGNING_KEY, QUIRE_REALTIME_WORKER_SECRET. Obične postavke (QUIRE_APP_ORIGIN, QUIRE_CONTENT_ORIGIN, QUIRE_PLATFORM_DOMAINS, QUIRE_DATABASE_ID, S3_ENDPOINT, S3_BUCKET, QUIRE_COLLAB_URL) unesite u vars.
Izgradite i implementirajte iz apps/web:
NITRO_PRESET=cloudflare-module bun run buildbun run --bun wrangler deploy
Implementirajte realtime Worker koristeći QUIRE_REALTIME_WORKER_SECRET web sloja i tajnu tokena kao QUIRE_REALTIME_TOKEN_SECRET (web sloj potpisuje realtime tokene svojim QUIRE_REALTIME_TOKEN_SECRET, ili s QUIRE_SECRET_KEY ako prva varijabla nije postavljena; koristite onu koju web sloj primjenjuje). Na web sloju postavite QUIRE_REALTIME_WORKER_URL na njegovu adresu:
cd apps/realtime-workerbun run --bun wrangler secret put QUIRE_REALTIME_WORKER_SECRETbun run --bun wrangler secret put QUIRE_REALTIME_TOKEN_SECRETbun run --bun wrangler deploy
Za lake zadatke putem Cloudflare Queuesa kreirajte po jedan red za svaki laki red i postavite sljedeće na pratećem workeru (API token treba dozvole za čitanje i pisanje u Queues):
bun run --bun wrangler queues create quire-events-notificationsbun run --bun wrangler queues create quire-events-notifications-deadbun run --bun wrangler queues create quire-events-webhooksbun run --bun wrangler queues create quire-events-webhooks-dead
Postavite QUIRE_QUEUE_DRIVER=cloudflare, CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_QUEUES_TOKEN i QUIRE_QUEUE_PREFIX ako prefiks nije quire-.
Pokrenite prateći host prema 3. koraku vodiča za Vercel. Migracije se izvršavaju tamo prije svake implementacije Workera.
Odbijena konfiguracija u bun run --bun wrangler tail prikazuje se kao „The web tier did not start on cloudflare“, a zatim slijedi spisak postavki koje treba promijeniti.