ወደ ይዘቱ ዝለል

የድር ክፍል በCloudflare Workers ላይ

የQuire የቀነሰ የድር ክፍልን በCloudflare Workers ላይ ያስኬዱ።

ንድፉ በ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ው ይዘጋጃል።

ማሰማራት

  1. ሀብቶቹን ይፍጠሩ፦
    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
    ሁለቱን Hyperdrive id ወደ apps/web/wrangler.jsonc ያስገቡ።
  2. 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 ውስጥ ይገባሉ።
  3. ከapps/web ይገንቡና ያሰማሩ፦
    NITRO_PRESET=cloudflare-module bun run build
    bun run --bun wrangler deploy
  4. የ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
  5. ቀላል ሥራዎች በ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-dead
    QUIRE_QUEUE_DRIVER=cloudflare፣ CLOUDFLARE_ACCOUNT_ID፣ CLOUDFLARE_QUEUES_TOKEN እና QUIRE_QUEUE_PREFIX ከquire- የተለየ ከሆነ ያዘጋጁ።
  6. ተያያዥ ሆስትን በVercel መመሪያ ክፍል 3 እንዳለ ያስኪዱ። ከእያንዳንዱ Worker deployment በፊት ማዛወሮች እዚያ ይሠራሉ።

ውቅሩ ካልተቀበለ bun run --bun wrangler tail ውስጥ “የድር ክፍሉ በcloudflare ላይ አልተነሳም” ከሚል በኋላ ሊቀየሩ የሚገቡ ቅንብሮችን ሁሉ ያሳያል።

ዳሰሳ

ለመፈለግ ይተይቡ…

↑↓ ዳስስ↵ ምረጥEsc ዝጋ