Salti al enhavo

La reta tavolo ĉe Cloudflare Workers

Ruli reduktitan retan tavolon de Quire ĉe Cloudflare Workers.

Vidi kiel Markdown

La dezajno troviĝas en sekcio 6 de docs/architecture/23-ops.md. Workers rulas reduktitan retan tavolon. Funkcia egaleco ĉe Workers estas ekster la amplekso (PRD sekcio 12): tio, kion ĉi tiu celo ne povas fari, estas rifuzata ĉe starto kaj nomata.

Stato en ĉi tiu eldono

La agordo jam ekzistas (apps/web/wrangler.jsonc, Nitro-antaŭagordo cloudflare-module, Hyperdrive-ponto kaj startkontroloj). Worker bezonas S3-kongruan stokadon por R2 (QUIRE_STORAGE_DRIVER=s3), realtempan pelilon tra petoj (QUIRE_REALTIME_DRIVER=durable_objects aŭ centrifugo), komunan kaŝmemoron (QUIRE_CACHE_DRIVER=postgres aŭ valkey) kaj HTTP-retpoŝtprovizanton. Sen ili Worker rifuzas starti kaj ĝia protokolo nomas ĉiun agordon. Pelilo Durable Objects estas kliento de realtempa Worker en apps/realtime-worker (unu Durable Object por kanalo por disa sendado, ĉeesto kaj historio, unu por persono por malkonektoj); disfaldigu ĝin kune, kiel sube, aŭ uzu Centrifugo.

La partoj

Parto Ĉe Cloudflare
web Worker kun nodejs_compat
Postgres Ekstera, atingata per Hyperdrive: HYPERDRIVE por la aplikaĵa rolo, REPORT_HYPERDRIVE por la raportrola konekto al la sama fizika datumbazo. La reta tavolo kopias ĉiun konektotringon al DATABASE_URL kaj QUIRE_REPORT_DATABASE_URL ĉe starto
Dosieroj R2 per ĝia S3-API (S3_ENDPOINT=https://<account>.r2.cloudflarestorage.com); binding FILES ligas la bucket
Fonaj taskoj pg-boss tra Hyperdrive kiam tasko devas esti envicigita per skribo. Kun QUIRE_QUEUE_DRIVER=cloudflare ĉe akompana worker, malpezaj taskoj (senorda livero de sciigoj kaj webhooks) anstataŭe trairas Cloudflare Queues, do ili ne pridemandiĝas de Postgres. La akompana worker rulas ambaŭ
Reala tempo La realtempa Worker apps/realtime-worker kun Durable Objects
worker, scheduler, collab, content, ClamAV, Gotenberg, ffmpeg Akompana ujo-gastiganto. Worker ne povas ruli ilin
Spuradon Observado de Workers, ŝaltita en wrangler.jsonc

REPORT_HYPERDRIVE provizas la raportrolon por la fizika datumbazo nomita per HYPERDRIVE. Ĉi tiu celo ne servas luantojn ligitajn al pliaj fizikaj datumbazoj, kiel priskribite sube.

Kion ĉi tiu celo ne povas fari

Rifuzata ĉe starto, kun ĉiuj problemoj listigitaj samtempe:

  • Neniu SMTP. Uzu HTTP-provizanton en QUIRE_EMAIL_PROVIDER_CONFIG.
  • Neniu loka disko. QUIRE_STORAGE_DRIVER devas nomi objektan stokadon.
  • Neniu enloka realtempigo aŭ kaŝmemoro. Workers ne kunhavas memoron inter petoj, do QUIRE_REALTIME_DRIVER=inprocess kaj QUIRE_CACHE_DRIVER=memory estas rifuzataj.
  • Neniu ClamAV, Gotenberg aŭ ffmpeg en Worker. CLAMAV_URL, GOTENBERG_URL kaj FFMPEG_PATH agorditaj ĉe Worker estas rifuzataj; agordu ilin ĉe akompana worker.
  • Neniuj organizaĵoj kun dediĉitaj datumbazoj. La Hyperdrive-ligoj de Worker estas fiksitaj ĉe disfaldo, do organizaĵo kun propra datumbazo ricevas klaran paĝon “ne disponeblas ĉi tie”. Servu ĝin de Compose aŭ Vercel.

Estas ankaŭ unu afero ne rifuzata sed grava: antaŭrenderigo kaj inkrementa statika regenerado ne funkcias ĉe Workers, malgraŭ tio, kion diras la kadra dokumentaro. Ĉiu vojo estas renderata por ĉiu peto.

Ĉe ĉi tiu celo tenu transakciojn mallongaj kaj neniam malfermu unu dum reta voko: Hyperdrive restarigas sesian staton kiam konekto revenas al la lageto, do luanta kunteksto estas agordata por ĉiu transakcio.

Disfaldi

  1. Kreu la rimedojn:
    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
    Metu la du Hyperdrive-ID-ojn en apps/web/wrangler.jsonc.
  2. Agordu la sekretojn unuope per bun run --bun wrangler secret put <NAME> el 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. Simplaj agordoj (QUIRE_APP_ORIGIN, QUIRE_CONTENT_ORIGIN, QUIRE_PLATFORM_DOMAINS, QUIRE_DATABASE_ID, S3_ENDPOINT, S3_BUCKET, QUIRE_COLLAB_URL) apartenas en vars.
  3. Konstruu kaj disfaldigu el apps/web:
    NITRO_PRESET=cloudflare-module bun run build
    bun run --bun wrangler deploy
  4. Disfaldigu la realtempan Worker kun la QUIRE_REALTIME_WORKER_SECRET de la reta tavolo kaj ĝia ĵetona sekreto kiel QUIRE_REALTIME_TOKEN_SECRET (la reta tavolo subskribas realtempajn ĵetonojn per propra QUIRE_REALTIME_TOKEN_SECRET aŭ per QUIRE_SECRET_KEY, se la unua ne estas agordita; uzu tiun efektive uzatan), kaj agordu QUIRE_REALTIME_WORKER_URL ĉe la reta tavolo al ĝia adreso:
    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. Por malpezaj taskoj per Cloudflare Queues, kreu atendovicon por ĉiu malpeza atendovico kaj agordu ĉi tion ĉe akompana worker (API-ĵetono kun legado kaj skribado de 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
    Agordu QUIRE_QUEUE_DRIVER=cloudflare, CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_QUEUES_TOKEN kaj QUIRE_QUEUE_PREFIX se ĝi ne estas quire-.
  6. Rulu akompanan gastiganton kiel ĉe la Vercel-gvidilo, paŝo 3. Migradoj ruliĝas tie antaŭ ĉiu Worker-disfaldo.

Rifuzita agordo aperas ĉe bun run --bun wrangler tail kiel “The web tier did not start on cloudflare”, sekvata de ĉiu ŝanĝenda agordo.

Navigado

Tajpu por serĉi…

↑↓ navigi↵ elektiEsc fermi