بازدان بۆ ناوەڕۆک

توڕی وێب لەسەر Cloudflare Workers

توڕی وێبی کەمکراوەی Quire لەسەر Cloudflare Workers بەکاربهێنە.

بینین وەک Markdown

دیزاینەکە لە docs/architecture/23-ops.md بەشی 6ە. Workers توڕی وێبێکی کەمکراوە کارپێدەکەن. یەکسانیی تایبەتمەندی لە Workers ئامانج نییە (PRD بەشی 12): ئەوەی ئەم ئامانجە ناتوانێت بیکات کاتی دەستپێکردن بە ناوی ڕەت دەکرێتەوە.

دۆخ لەم بڵاوکراوەدا

ڕێکخستنەکان ئامادەن (apps/web/wrangler.jsonc، پێشڕێکی Nitroی cloudflare-module، پەیوەندیدەری Hyperdrive و پشکنینەکانی دەستپێکردن). Worker پێویستی بە هەڵگرتنی سازگار لەگەڵ S3 بۆ R2 هەیە (QUIRE_STORAGE_DRIVER=s3)، ڕێگای کاتیی ڕاستەوخۆ لە نێوان داواکارییەکان (QUIRE_REALTIME_DRIVER=durable_objects یان centrifugo)، خەزێنەی هاوبەش (QUIRE_CACHE_DRIVER=postgres یان valkey) و دابینکەری ئیمەیڵی HTTP. بەبێ ئەمانە Worker دەستپێکردن ڕەت دەکاتەوە و تۆمارەکەی هەر ڕێکخستنێک ناو دەبات. دابینکەری Durable Objects کڕیارێکی Workerی ڕاستەوخۆ لە apps/realtime-workerە (یەک Durable Object بۆ هەر کەناڵێک بۆ دابەشکردن، بوونی بەکارهێنەر و مێژوو؛ یەکێک بۆ هەر کەس بۆ پچڕان)؛ وەک خوارەوە لە تەنیشتیدا بڵاوی بکەرەوە یان Centrifugo بەکاربهێنە.

پارچەکان

پارچە لەسەر Cloudflare
web Worker لەگەڵ nodejs_compat
Postgres دەرەکی و لە ڕێگەی Hyperdriveوە دەستپێی دەگات: HYPERDRIVE بۆ ڕۆڵی بەرنامە، REPORT_HYPERDRIVE بۆ ڕۆڵی ڕاپۆرت لەسەر هەمان بنکەدراوەی جەستەیی. توڕی وێب هەر ڕشتەی پەیوەندییەک بۆ DATABASE_URL و QUIRE_REPORT_DATABASE_URL کۆپی دەکاتەوە کاتی دەستپێکردن
فایلەکان R2 لە ڕێگەی APIی S3وە (S3_ENDPOINT=https://<account>.r2.cloudflarestorage.com)؛ bindingی FILES حەوزەکە دەبەستێتەوە
کارەکانی پاشبنەما pg-boss لەسەر Hyperdrive کاتێک پێویستە لەگەڵ نووسینێک کار زیاد بکرێت. لەگەڵ QUIRE_QUEUE_DRIVER=cloudflare لە workerی هاوڕێ، کارە سووکەکان (ئاگادارکردنەوە و گەیاندنی webhook بەبێ ڕیزبەندی) لە ڕێگەی Cloudflare Queues دەڕۆن بۆیە Postgres بۆیان ناپشکنرێت. workerی هاوڕێ هەردووکیان جێبەجێ دەکات
ڕاستەوخۆ Workerی ڕاستەوخۆ، apps/realtime-worker، لەگەڵ Durable Objects
worker، scheduler، collab، content، ClamAV، Gotenberg، ffmpeg میوانداریی حەوزەی هاوڕێ. Worker ناتوانێت ئەمانە جێبەجێ بکات
چاودێری چاودێریی Workers، لە wrangler.jsonc چالاککراوە

REPORT_HYPERDRIVE ڕۆڵی ڕاپۆرت بۆ هەمان بنکەدراوەی جەستەیی دابین دەکات کە HYPERDRIVE ناوی دەبات. ئەم ئامانجە tenantەکان خزمەت ناکات کە داتابەیسی جەستەیی زیادەیان تێدا جێگیرکراوە، وەک لە خوارەوە ڕوونکراوەتەوە.

ئەم ئامانجە ناتوانێت چی بکات

لە دەستپێکردندا ڕەت دەکرێتەوە و هەموو کێشەکان یەکجار لیست دەکرێن:

  • SMTP نییە. دابینکەرێکی HTTP لە QUIRE_EMAIL_PROVIDER_CONFIG بەکاربهێنە.
  • دیسکی ناوخۆیی نییە. QUIRE_STORAGE_DRIVER دەبێت هەڵگرتنی شتی تۆمارکراو دیاری بکات.
  • ڕاستەوخۆ یان خەزینەی ناوپرۆسێس نییە. Workers لە نێوان داواکارییەکاندا بیرگە هاوبەش ناکەن، بۆیە QUIRE_REALTIME_DRIVER=inprocess و QUIRE_CACHE_DRIVER=memory ڕەت دەکرێنەوە.
  • ClamAV، Gotenberg یان ffmpeg لە Workerدا نییە. دانانی CLAMAV_URL، GOTENBERG_URL و FFMPEG_PATH لەسەر Worker ڕەت دەکرێتەوە؛ لە جیاتی ئەوە لە workerی هاوڕێ دایانبنێ.
  • دامەزراوەی بنکەدراوی تایبەت نییە. bindingەکانی Hyperdriveی Worker کاتی بڵاوکردنەوە جێگیرن، بۆیە دامەزراوەیەک کە بنکەدراوی تایبەتی هەیە پەڕەیەکی ڕوونی “لێرە بەردەست نییە” دەبینێت. لە Compose یان Vercel خزمەتی پێ بکە.

هەروەها یەک شت ڕەت ناکرێتەوە بەڵام پێویستە بزانرێت: پێشتر وێنەکردن و نوێکردنەوەی وردەوردەی دۆخی ساکن لەسەر Workers کار ناکەن، سەربەخۆ لەوەی بەڵگەنامەی چوارچێوەکە چی دەڵێت. هەر ڕێڕەوێک بەپێی داواکاری وێنە دەکرێت.

لەسەر ئەم ئامانجە transactionەکان کورت بهێڵەوە و هەرگیز لە ماوەی پەیوەندیی تۆڕدا بەردەوامیان مەکە: Hyperdrive دۆخی دانیشتن دوای گەڕاندنەوەی پەیوەندییەک بۆ pool ڕێکدەخاتەوە، بۆیە سیاقی tenant بۆ هەر 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 لە 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. Workerی ڕاستەوخۆ بڵاو بکەرەوە، بە QUIRE_REALTIME_WORKER_SECRETی توڕی وێب و tokenی نهێنییەکەی وەک QUIRE_REALTIME_TOKEN_SECRET (توڕی وێب tokenی ڕاستەوخۆ بە QUIRE_REALTIME_TOKEN_SECRETی خۆی واژۆ دەکات، یان ئەگەر دیاری نەکرابێت QUIRE_SECRET_KEY؛ بۆیە هەر ئەوە بەکاربهێنە کە ئەو بەکاری دەهێنێت)، و 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ی هاوڕێ دایانبنێ (tokenی API کە خوێندنەوە و نووسینی 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
    QUIRE_QUEUE_DRIVER=cloudflare، CLOUDFLARE_ACCOUNT_ID، CLOUDFLARE_QUEUES_TOKEN و ئەگەر QUIRE_QUEUE_PREFIX بە quire- نییە دایانبنێ.
  6. میوانداری هاوڕێ وەک لە ڕێنمایی Vercel هەنگاوی 3دا جێبەجێ بکە. کۆچکردنەکان پێش هەر بڵاوکردنەوەی Worker لەوێ ڕوودەدەن.

ڕێکخستنی ڕەتکراوە لە bun run --bun wrangler tail وەک “The web tier did not start on cloudflare” دەردەکەوێت و هەر ڕێکخستنێکی پێویست بە گۆڕین لیست دەکات.

ڕێنیشاندەر

بۆ گەڕان بنووسە…

↑↓ بۆ گەڕان↵ بۆ هەڵبژاردنEsc بۆ داخستن