---
title: "web tier در Cloudflare Workers"
description: "web tier محدودشدهٔ Quire را روی Cloudflare Workers اجرا کنید."
image: "https://docs.quirelms.com/og.png"
---

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

# web tier در Cloudflare Workers

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

طرح در بخش ۶ از `docs/architecture/23-ops.md` آمده است. Workers نسخه‌ای محدود از web tier را اجرا می‌کنند. برابری کامل قابلیت‌ها در Workers خارج از محدوده است (بخش ۱۲ PRD): هر کاری که این مقصد نتواند انجام دهد هنگام راه‌اندازی، با نامش رد می‌شود.

## وضعیت در این انتشار <!--quire:status-in-this-release-->

پیکربندی آماده است (`apps/web/wrangler.jsonc`، preset نیتروی `cloudflare-module`، پل Hyperdrive و بررسی‌های هنگام راه‌اندازی). Worker برای R2 به ذخیره‌سازی سازگار با S3 نیاز دارد (`QUIRE_STORAGE_DRIVER=s3`)، driver بلادرنگ میان درخواست‌ها (`QUIRE_REALTIME_DRIVER=durable_objects` یا `centrifugo`)، cache مشترک (`QUIRE_CACHE_DRIVER=postgres` یا `valkey`) و ارائه‌دهندهٔ ایمیل HTTP. بدون این‌ها Worker آغاز نمی‌شود و گزارشش هر تنظیم را نام می‌برد. driver مربوط به Durable Objects مشتری realtime Worker در `apps/realtime-worker` است (برای پخش همگانی، حضور و تاریخچه برای هر کانال یک Durable Object و برای قطع‌اتصال‌ها به‌ازای هر شخص یکی)؛ مطابق ادامه آن را کنار Worker مستقر کنید یا از Centrifugo استفاده کنید.

## اجزا <!--quire:the-pieces-->

| جزء | روی Cloudflare |
| --- | --- |
| `web` | یک Worker با `nodejs_compat` |
| Postgres | بیرونی و از راه Hyperdrive: `HYPERDRIVE` برای نقش برنامه و `REPORT_HYPERDRIVE` برای نقش گزارش در همان پایگاه فیزیکی. web tier هنگام آغاز هر رشتهٔ اتصال را به `DATABASE_URL` و `QUIRE_REPORT_DATABASE_URL` کپی می‌کند |
| فایل‌ها | R2 از راه S3 API (`S3_ENDPOINT=https://<account>.r2.cloudflarestorage.com`)؛ binding با نام `FILES` مخزن را وصل می‌کند |
| کارهای پس‌زمینه | کارهایی که باید با نوشتن صف شوند از pg-boss روی Hyperdrive می‌گذرند. اگر worker همکار `QUIRE_QUEUE_DRIVER=cloudflare` داشته باشد، کارهای سبک (اعلان‌های بی‌ترتیب و تحویل وب‌هوک) از Cloudflare Queues می‌گذرند و Postgres برایشان پول نمی‌شود. worker همکار هر دو را اجرا می‌کند |
| بلادرنگ | realtime Worker، یعنی `apps/realtime-worker`، با Durable Objects |
| `worker`، `scheduler`، `collab`، `content`، ClamAV، Gotenberg و ffmpeg | میزبان container همکار؛ Worker نمی‌تواند آن‌ها را اجرا کند |
| رهگیری | مشاهده‌پذیری Workers که در `wrangler.jsonc` فعال شده است |

`REPORT_HYPERDRIVE` نقش گزارش را برای پایگاه فیزیکی‌ای فراهم می‌کند که `HYPERDRIVE` نام می‌برد. همان‌طور که پایین‌تر آمده، این مقصد برای tenantهای سنجاق‌شده به پایگاه فیزیکی افزوده خدمت نمی‌دهد.

## کارهایی که این مقصد نمی‌تواند انجام دهد <!--quire:what-this-target-cannot-do-->

هنگام آغاز همهٔ مشکلات یک‌جا فهرست و پیکربندی رد می‌شود:

- **SMTP وجود ندارد.** از ارائه‌دهندهٔ HTTP در `QUIRE_EMAIL_PROVIDER_CONFIG` استفاده کنید.
- **دیسک محلی وجود ندارد.** `QUIRE_STORAGE_DRIVER` باید به ذخیره‌سازی شیء اشاره کند.
- **بلادرنگ یا cache درون‌فرایندی وجود ندارد.** حافظه میان درخواست‌ها مشترک نیست، پس `QUIRE_REALTIME_DRIVER=inprocess` و `QUIRE_CACHE_DRIVER=memory` رد می‌شوند.
- **Worker نمی‌تواند ClamAV، Gotenberg یا ffmpeg را اجرا کند.** اگر `CLAMAV_URL`، `GOTENBERG_URL` و `FFMPEG_PATH` را روی Worker بگذارید رد می‌شوند؛ آن‌ها را روی worker همکار تنظیم کنید.
- **سازمان‌های دارای پایگاه اختصاصی پشتیبانی نمی‌شوند.** bindingهای Hyperdrive مربوط به Worker هنگام استقرار ثابت‌اند، پس سازمان دارای پایگاه خودش صفحهٔ روشنِ «اینجا در دسترس نیست» می‌بیند. آن را از Compose یا Vercel ارائه کنید.

یک نکته هم هست که رد نمی‌شود اما باید بدانید: **پیش‌رندر و بازتولید افزایشی ایستا روی Workers کار نمی‌کنند**، هرچه مستندات چارچوب بگویند. هر مسیر به‌ازای هر درخواست رندر می‌شود.

در این مقصد transactionها را کوتاه نگه دارید و هیچ transactionای را میان فراخوانی‌های شبکه باز نگذارید: Hyperdrive هنگام بازگرداندن اتصال به pool، وضعیت نشست را پاک می‌کند؛ بنابراین زمینهٔ tenant به‌ازای هر 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 را در `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` مربوط به web tier و راز tokenاش به‌شکل `QUIRE_REALTIME_TOKEN_SECRET` مستقر کنید (web tier tokenهای realtime را با `QUIRE_REALTIME_TOKEN_SECRET` خودش یا، اگر تنظیم نشده باشد، با `QUIRE_SECRET_KEY` امضا می‌کند؛ هرکدام را که به کار می‌برد انتخاب کنید) و `QUIRE_REALTIME_WORKER_URL` را در web tier روی نشانی‌اش بگذارید:
   ```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 همکار تنظیم کنید (token 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. میزبان همکار را طبق گام ۳ [راهنمای Vercel](/fa/ops/vercel/) اجرا کنید. migrationها پیش از هر استقرار Worker همان‌جا اجرا می‌شوند.

پیکربندی ردشده در `bun run --bun wrangler tail` با «The web tier did not start on cloudflare» نمایش می‌یابد و پس از آن هر تنظیمی را که باید تغییر کند فهرست می‌کند.

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