ንድፉ በdocs/architecture/23-ops.md ክፍል 6 ላይ ነው። Workers የቀነሰ የድር ክፍል ያስኬዳሉ። በWorkers ላይ ሁሉም ባህሪያት እንዲመጣጠኑ ከወሰኑት ውጭ ነው (PRD ክፍል 12)፤ ይህ አካባቢ ማድረግ የማይችለው ሲነሳ በስም ይከለከላል።
በዚህ እትም ያለው ሁኔታ
ውቅሩ ተዘጋጅቷል (apps/web/wrangler.jsonc፣ cloudflare-module Nitro preset፣ Hyperdrive bridgeና የጅማሬ ምርመራዎች)። Worker ከR2 ጋር የሚሠራ S3 ማከማቻ (QUIRE_STORAGE_DRIVER=s3)፣ በጥያቄዎች መካከል የሚሠራ realtime driver (QUIRE_REALTIME_DRIVER=durable_objects ወይም centrifugo)፣ የጋራ cache (QUIRE_CACHE_DRIVER=postgres ወይም valkey) እና HTTP የኢሜይል አቅራቢ ያስፈልጋሉ። እነዚህ ከሌሉ Worker መነሳት እምቢ ይላል፤ ምዝግቡም ቅንብር ሁሉን በስም ይጠራል። Durable Objects driver በapps/realtime-worker ያለው realtime Worker ደንበኛ ነው (ለfan-out፣ መኖርና ታሪክ በእያንዳንዱ channel አንድ Durable Object፣ ለመቋረጥም በእያንዳንዱ ሰው አንድ)፤ ከታች እንዳለው አብረው ያሰማሩት ወይም Centrifugo ይጠቀሙ።
ክፍሎቹ
| ክፍል | በCloudflare |
|---|---|
web |
nodejs_compat ያለው Worker |
| Postgres | ውጫዊ፣ በHyperdrive በኩል የሚደረስበት፦ ለመተግበሪያ ሚና HYPERDRIVE፣ በዚያው አካላዊ database ላይ ለሪፖርት ሚና REPORT_HYPERDRIVE። የድር ክፍሉ ሲነሳ እያንዳንዱን connection string ወደ DATABASE_URLና QUIRE_REPORT_DATABASE_URL ይቀዳል። |
| ፋይሎች | R2፣ በS3 API በኩል (S3_ENDPOINT=https://<account>.r2.cloudflarestorage.com)፤ FILES binding bucketን ያገናኛል። |
| የጀርባ ሥራዎች | ከጽሑፍ ጋር ሥራ መጀመር በሚያስፈልግበት ጊዜ pg-boss በHyperdrive ላይ ይሠራል። በተያያዥ worker QUIRE_QUEUE_DRIVER=cloudflare ከሆነ ቀላል ሥራዎች (በቅደም ተከተል ያልተያዙ ማሳወቂያዎችና webhook መላኪያዎች) በCloudflare Queues ይሄዳሉ፤ Postgres አይፈተሽም። ተያያዥ worker ሁለቱንም ያስኬዳል። |
| Realtime | የrealtime Worker፣ apps/realtime-worker፣ Durable Objects ያለው |
worker፣ scheduler፣ collab፣ content፣ ClamAV፣ Gotenberg፣ ffmpeg |
ተያያዥ container ሆስት። Worker እነዚህን ማስኬድ አይችልም። |
| ክትትል | Workers observability፣ በwrangler.jsonc የበራ |
REPORT_HYPERDRIVE በHYPERDRIVE የተጠቀሰው አካላዊ database የሪፖርት ሚናን ይሰጣል። ይህ አካባቢ ከታች እንደተገለጸው በተጨማሪ አካላዊ database ላይ የተቀመጡ tenantsን አያገለግልም።
ይህ አካባቢ ማድረግ የማይችለው
ሲነሳ እምቢ ይላል፣ ችግሮቹንም በአንድ ጊዜ ይዘረዝራል፦
- SMTP የለም። በ
QUIRE_EMAIL_PROVIDER_CONFIGውስጥ HTTP አቅራቢ ይጠቀሙ። - አካባቢያዊ ዲስክ የለም።
QUIRE_STORAGE_DRIVERየobject storage መምረጥ አለበት። - በሂደት ውስጥ realtime ወይም cache የለም። Workers በጥያቄዎች መካከል ማህደረ ትውስታ አይጋሩም፤
QUIRE_REALTIME_DRIVER=inprocessእናQUIRE_CACHE_DRIVER=memoryይከለከላሉ። - በWorker ውስጥ ClamAV፣ Gotenberg ወይም ffmpeg የለም። በWorker ላይ የተዘጋጁ
CLAMAV_URL፣GOTENBERG_URLእናFFMPEG_PATHይከለከላሉ፤ በምትኩ በተያያዥ worker ላይ ያዘጋጇቸው። - የተለየ database ያላቸው ድርጅቶች አይቻሉም። የWorker Hyperdrive bindings በማሰማራት ጊዜ ይወሰናሉ፤ ስለዚህ የራሱ database ያለው ድርጅት “እዚህ አይገኝም” የሚል ግልጽ ገጽ ያያል። ከCompose ወይም Vercel ያቅርቡት።
የማይከለከል ነገር ግን ማወቅ ያለበት አንድ ነገር፦ prerenderingና incremental static regeneration በWorkers ላይ አይሠሩም፣ የframework ሰነድ ምንም ቢል። route ሁሉ በእያንዳንዱ ጥያቄ ይቀረባል።
በዚህ አካባቢ transactionዎችን አጭር ያድርጉ፤ በnetwork call ላይ ክፍት አታቆዩ። Hyperdrive ግንኙነት ወደ pool ሲመለስ session stateን ያጸዳል፤ ስለዚህ tenant context በየtransactionው ይዘጋጃል።
ማሰማራት
- ሀብቶቹን ይፍጠሩ፦
ሁለቱን Hyperdrive id ወደ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-jobsapps/web/wrangler.jsoncያስገቡ። bun run --bun wrangler secret put <NAME>ትዕዛዝን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። መደበኛ ቅንብሮች (QUIRE_APP_ORIGIN፣QUIRE_CONTENT_ORIGIN፣QUIRE_PLATFORM_DOMAINS፣QUIRE_DATABASE_ID፣S3_ENDPOINT፣S3_BUCKET፣QUIRE_COLLAB_URL) በvarsውስጥ ይገባሉ።- ከ
apps/webይገንቡና ያሰማሩ፦NITRO_PRESET=cloudflare-module bun run build bun run --bun wrangler deploy - የrealtime Workerን በድር ክፍሉ የ
QUIRE_REALTIME_WORKER_SECRETና የtoken ምስጢሩን እንደQUIRE_REALTIME_TOKEN_SECRETያስተዋውቁ (የድር ክፍሉ በራሱQUIRE_REALTIME_TOKEN_SECRET፣ ያልተዘጋጀ ከሆነምQUIRE_SECRET_KEYተጠቅሞ realtime token ይፈርማል፤ እሱ የሚጠቀመውን ይጠቀሙ)፤ የአድራሻውንም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 - ቀላል ሥራዎች በCloudflare Queues እንዲሄዱ ለእያንዳንዱ ቀላል ወረፋ queue ይፍጠሩና በተያያዥ worker ላይ ያዘጋጁ (Queues ለማንበብና ለመጻፍ ፈቃድ ያለው API token)፦
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-deadQUIRE_QUEUE_DRIVER=cloudflare፣CLOUDFLARE_ACCOUNT_ID፣CLOUDFLARE_QUEUES_TOKENእናQUIRE_QUEUE_PREFIXከquire-የተለየ ከሆነ ያዘጋጁ። - ተያያዥ ሆስትን በVercel መመሪያ ክፍል 3 እንዳለ ያስኪዱ። ከእያንዳንዱ Worker deployment በፊት ማዛወሮች እዚያ ይሠራሉ።
ውቅሩ ካልተቀበለ bun run --bun wrangler tail ውስጥ “የድር ክፍሉ በcloudflare ላይ አልተነሳም” ከሚል በኋላ ሊቀየሩ የሚገቡ ቅንብሮችን ሁሉ ያሳያል።