Lumaktaw sa nilalaman

Web tier sa Cloudflare Workers

Patakbuhin ang pinasimpleng web tier ng Quire sa Cloudflare Workers.

Tingnan bilang Markdown

Nasa seksiyon 6 ng docs/architecture/23-ops.md ang disenyo. Pinapatakbo ng Workers ang pinasimpleng web tier. Hindi saklaw ng layunin ang feature parity sa Workers (PRD seksiyon 12): tinatanggihan sa pagsisimula ang hindi kayang gawin gamit ang pangalan nito.

Katayuan sa release na ito

Nakahanda na ang configuration (apps/web/wrangler.jsonc, ang cloudflare-module Nitro preset, Hyperdrive bridge, at mga startup check). Kailangan ng Worker ang S3-compatible na storage para sa R2 (QUIRE_STORAGE_DRIVER=s3), realtime driver sa iba’t ibang request (QUIRE_REALTIME_DRIVER=durable_objects o centrifugo), shared cache (QUIRE_CACHE_DRIVER=postgres o valkey), at HTTP email provider. Kung wala ang mga ito, tatanggi itong magsimula at ililista ng log ang setting. Client ng realtime Worker sa apps/realtime-worker ang Durable Objects driver (isang Durable Object bawat channel para sa fan-out, presence, at history; isa bawat tao para sa mga disconnect); i-deploy ito sa tabi ayon sa ibaba, o gumamit ng Centrifugo.

Mga bahagi

Bahagi Sa Cloudflare
web Worker na may nodejs_compat
Postgres External, naaabot gamit ang Hyperdrive: HYPERDRIVE para sa application role at REPORT_HYPERDRIVE para sa report role sa parehong pisikal na database. Kinokopya ng web tier sa DATABASE_URL at QUIRE_REPORT_DATABASE_URL ang bawat connection string sa pagsisimula
Files R2 gamit ang S3 API (S3_ENDPOINT=https://<account>.r2.cloudflarestorage.com); ikinakabit ng FILES binding ang bucket
Mga background job pg-boss sa Hyperdrive kapag dapat ipila ang trabaho kasama ng write. Kapag QUIRE_QUEUE_DRIVER=cloudflare sa kasamang worker, dumaraan naman sa Cloudflare Queues ang magaang trabaho (walang pagkakasunod na notification at webhook delivery), kaya hindi ito i-poll sa Postgres. Pareho itong pinapatakbo ng kasamang worker
Realtime Realtime Worker na apps/realtime-worker na may Durable Objects
worker, scheduler, collab, content, ClamAV, Gotenberg, ffmpeg Kasamang container host. Hindi kayang patakbuhin ng Worker ang mga ito
Tracing Workers observability na naka-enable sa wrangler.jsonc

Ibinibigay ng REPORT_HYPERDRIVE ang report role para sa pisikal na database na pinangalanan ng HYPERDRIVE. Hindi nagsisilbi ang target na ito sa tenant na naka-pin sa dagdag na pisikal na database, gaya ng inilalarawan sa ibaba.

Hindi kayang gawin ng target na ito

Tinatanggihan ito sa pagsisimula at sabay-sabay na inililista ang lahat ng problema:

  • Walang SMTP. Gumamit ng HTTP provider sa QUIRE_EMAIL_PROVIDER_CONFIG.
  • Walang lokal na disk. Kailangang tumukoy ang QUIRE_STORAGE_DRIVER sa object storage.
  • Walang in-process realtime o cache. Walang memory na pinaghahatian ang request ng Workers, kaya tinatanggihan ang QUIRE_REALTIME_DRIVER=inprocess at QUIRE_CACHE_DRIVER=memory.
  • Walang ClamAV, Gotenberg, o ffmpeg sa Worker. Tinatanggihan ang CLAMAV_URL, GOTENBERG_URL, at FFMPEG_PATH kapag itinakda sa Worker; sa kasamang worker itakda ang mga ito.
  • Walang organisasyong may dedicated database. Nakatakda sa deployment ang Hyperdrive binding ng Worker, kaya makakakita ng malinaw na “unavailable here” page ang organisasyong may sariling database. I-serve ito mula Compose o Vercel.

May isang bagay pang hindi tinatanggihan ngunit dapat malaman: hindi gumagana sa Workers ang prerendering at incremental static regeneration, anuman ang sinasabi ng dokumentasyon ng framework. Sa bawat request nirere-render ang route.

Sa target na ito, panatilihing maikli ang transaction at huwag itong panatilihing bukas habang may network call: nire-reset ng Hyperdrive ang session state kapag bumalik sa pool ang connection kaya itinatakda ang konteksto ng tenant bawat transaction.

Pag-deploy

  1. Gumawa ng resource:
    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
    Ilagay ang dalawang Hyperdrive ID sa apps/web/wrangler.jsonc.
  2. Isa-isang itakda ang secret gamit ang bun run --bun wrangler secret put <NAME> sa 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. Itakda rin ang ordinaryong setting (QUIRE_APP_ORIGIN, QUIRE_CONTENT_ORIGIN, QUIRE_PLATFORM_DOMAINS, QUIRE_DATABASE_ID, S3_ENDPOINT, S3_BUCKET, QUIRE_COLLAB_URL) sa vars.
  3. Mag-build at mag-deploy mula sa apps/web:
    NITRO_PRESET=cloudflare-module bun run build
    bun run --bun wrangler deploy
  4. I-deploy ang realtime Worker gamit ang QUIRE_REALTIME_WORKER_SECRET ng web tier at token secret nito na QUIRE_REALTIME_TOKEN_SECRET (pinipirmahan ng web tier ang realtime token gamit ang sarili nitong QUIRE_REALTIME_TOKEN_SECRET o QUIRE_SECRET_KEY kung wala ang una, kaya gamitin kung ano ang ginagamit nito). Itakda sa web tier ang address nito sa QUIRE_REALTIME_WORKER_URL:
    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. Para sa magaang trabaho sa Cloudflare Queues, gumawa ng queue bawat light queue at itakda ang mga ito sa kasamang worker (API token na may Queues read at write):
    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
    Itakda ang QUIRE_QUEUE_DRIVER=cloudflare, CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_QUEUES_TOKEN, at QUIRE_QUEUE_PREFIX kung hindi quire-. +6. Patakbuhin ang companion host gaya ng hakbang 3 sa gabay sa Vercel.
  • Tumatakbo roon ang migration bago ang bawat Worker deployment.

+Makikita ang tinanggihang configuration sa bun run --bun wrangler tail bilang +“The web tier did not start on cloudflare”, na sinusundan ng setting na dapat baguhin. +EOF perl -pi -e ‘s/^+//’ apps/docs-site/locales/fil/guides/ops/cloudflare.md bun apps/docs-site/scripts/import-guide.ts fil ops/cloudflare.md

Nabigasyon

Mag-type para maghanap…

↑↓ mag-navigate↵ pumiliEsc isara