---
title: "የድር ክፍል በCloudflare Workers ላይ"
description: "የQuire የቀነሰ የድር ክፍልን በCloudflare Workers ላይ ያስኬዱ።"
image: "https://docs.quirelms.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.quirelms.com/am/llms.txt
> Use this file to discover all available pages before exploring further.

# የድር ክፍል በCloudflare Workers ላይ

<span id="the-web-tier-on-cloudflare-workers"></span>

ንድፉ በ`docs/architecture/23-ops.md` ክፍል 6 ላይ ነው። Workers የቀነሰ የድር ክፍል ያስኬዳሉ። በWorkers ላይ ሁሉም ባህሪያት እንዲመጣጠኑ ከወሰኑት ውጭ ነው (PRD ክፍል 12)፤ ይህ አካባቢ ማድረግ የማይችለው ሲነሳ በስም ይከለከላል።

## በዚህ እትም ያለው ሁኔታ <!--quire:status-in-this-release-->

ውቅሩ ተዘጋጅቷል (`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 ይጠቀሙ።

## ክፍሎቹ <!--quire:the-pieces-->

| ክፍል | በ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ን አያገለግልም።

## ይህ አካባቢ ማድረግ የማይችለው <!--quire:what-this-target-cannot-do-->

ሲነሳ እምቢ ይላል፣ ችግሮቹንም በአንድ ጊዜ ይዘረዝራል፦

- **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ው ይዘጋጃል።

## ማሰማራት <!--quire:deploying-->

1. ሀብቶቹን ይፍጠሩ፦
   ```sh
   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` ይገንቡና ያሰማሩ፦
   ```sh
   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` በድር ክፍሉ ያዘጋጁ፦
   ```sh
   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)፦
   ```sh
   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 መመሪያ](/am/ops/vercel/) ክፍል 3 እንዳለ ያስኪዱ። ከእያንዳንዱ Worker deployment በፊት ማዛወሮች እዚያ ይሠራሉ።

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

Source: https://docs.quirelms.com/am/ops/cloudflare/index.mdx
