---
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/ar/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` وإعداد 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 عميل لعامل الوقت الحقيقي في `apps/realtime-worker` (كائن دائم واحد لكل قناة لتوزيع الأحداث والحضور والسجل، وآخر لكل شخص لقطع الاتصال)؛ انشره معه كما يلي، أو استخدم Centrifugo.

## المكونات <!--quire:the-pieces-->

| المكون | على Cloudflare |
| --- | --- |
| `web` | Worker مع `nodejs_compat` |
| Postgres | خارجي، عبر Hyperdrive: يربط `HYPERDRIVE` بدور التطبيق و`REPORT_HYPERDRIVE` بدور التقارير في قاعدة البيانات الفعلية نفسها. تنسخ طبقة الويب سلسلتي الاتصال إلى `DATABASE_URL` و`QUIRE_REPORT_DATABASE_URL` عند بدء التشغيل |
| الملفات | R2 عبر واجهة S3 API (`S3_ENDPOINT=https://<account>.r2.cloudflarestorage.com`)؛ يربط `FILES` الحاوية |
| المهام الخلفية | pg-boss عبر Hyperdrive عندما يجب إضافة المهمة ضمن معاملة كتابة. وعند ضبط `QUIRE_QUEUE_DRIVER=cloudflare` على العامل المرافق، تمر المهام الخفيفة (تسليمات الإشعارات وخطافات الويب غير المرتبة) عبر Cloudflare Queues بدل استطلاع Postgres. ويشغل العامل المرافق كليهما |
| الوقت الحقيقي | عامل الوقت الحقيقي `apps/realtime-worker` مع Durable Objects |
| `worker` و`scheduler` و`collab` و`content` وClamAV وGotenberg وffmpeg | مضيف حاويات مرافق؛ لا يستطيع Worker تشغيلها |
| التتبع | مراقبة Workers المفعّلة في `wrangler.jsonc` |

يوفر `REPORT_HYPERDRIVE` دور التقارير لقاعدة البيانات الفعلية التي يحددها `HYPERDRIVE`. ولا تخدم هذه البيئة مستأجرين مثبتين على قواعد بيانات فعلية إضافية، كما هو موضح أدناه.

## ما لا تستطيع هذه البيئة فعله <!--quire:what-this-target-cannot-do-->

يُرفض بدء التشغيل مع سرد المشكلات كلها مرة واحدة:

- **لا يدعم 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؛ اضبطها على العامل المرافق.
- **لا تتوفر المؤسسات ذات قواعد البيانات المخصصة.** تثبت روابط Hyperdrive الخاصة بـWorker وقت النشر، لذا تعرض المؤسسة التي تملك قاعدة بيانات مستقلة صفحة واضحة تفيد بعدم التوفر هنا. شغّلها من Compose أو Vercel.

وثمة أمر لا يُرفض لكنه يجب أن يكون معلومًا: **لا يعمل العرض المسبق وإعادة التوليد الساكن التدريجي على Workers** مهما قالت وثائق إطار العمل. تُعرض كل المسارات لكل طلب.

في هذه البيئة، اجعل المعاملات قصيرة ولا تتركها مفتوحة أثناء اتصال شبكي: يعيد Hyperdrive ضبط حالة الجلسة عند إعادة الاتصال إلى المجمع، لذا يُضبط سياق المستأجر لكل معاملة.

## النشر <!--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 في `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. انشر عامل الوقت الحقيقي مع `QUIRE_REALTIME_WORKER_SECRET` الموجود في طبقة الويب ورمز العامل السري بوصفه `QUIRE_REALTIME_TOKEN_SECRET` (توقع طبقة الويب رموز الوقت الحقيقي باستخدام `QUIRE_REALTIME_TOKEN_SECRET` الخاص بها أو `QUIRE_SECRET_KEY` إذا لم يُحدد؛ استخدم القيمة التي تستخدمها)، واضبط `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 للمهام الخفيفة، أنشئ قائمة لكل طابور خفيف واضبطها على العامل المرافق (مع رمز API تتوفر له صلاحيتا القراءة والكتابة في Queues):
   ```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. شغّل المضيف المرافق كما في الخطوة 3 من [دليل Vercel](/ar/ops/vercel/). تُنفذ الترحيلات هناك قبل كل نشر لـWorker.

يظهر رفض الإعداد في `bun run --bun wrangler tail` بالعبارة «The web tier did not start on cloudflare»، متبوعة بكل إعداد يجب تغييره.

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