Preskoči na sadržaj

Web sloj na Cloudflare Workersu

Pokrenite ograničeni Quire web sloj na Cloudflare Workersu.

Prikaži kao Markdown

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
worker, scheduler, collab, content, ClamAV, Gotenberg, ffmpeg 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

  1. 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-files
    bun run --bun wrangler queues create quire-jobs
    Unesite dva Hyperdrive ID-ja u apps/web/wrangler.jsonc.
  2. 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.
  3. Izgradite i implementirajte iz apps/web:
    NITRO_PRESET=cloudflare-module bun run build
    bun run --bun wrangler deploy
  4. 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-worker
    bun run --bun wrangler secret put QUIRE_REALTIME_WORKER_SECRET
    bun run --bun wrangler secret put QUIRE_REALTIME_TOKEN_SECRET
    bun run --bun wrangler deploy
  5. 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-notifications
    bun run --bun wrangler queues create quire-events-notifications-dead
    bun run --bun wrangler queues create quire-events-webhooks
    bun 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-.
  6. 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.

Navigacija

Upišite pojam za pretragu…

↑↓ navigacija↵ odaberiEsc zatvori