---
title: "Cloudflare Workers-এ web tier"
description: "Cloudflare Workers-এ সীমিত Quire web tier চালান।"
image: "https://docs.quirelms.com/og.png"
---

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

# Cloudflare Workers-এ web tier

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

স্থাপত্যের বিবরণ `docs/architecture/23-ops.md`-এর section 6-এ। Workers সীমিত web tier চালায়। Workers-এ পূর্ণ feature parity এই কাজের আওতায় নয় (PRD section 12): এই target যা পারে না, startup-এর সময় তার নাম উল্লেখ করে প্রত্যাখ্যান করে।

## এই release-এর অবস্থা <!--quire:status-in-this-release-->

Configuration প্রস্তুত আছে (`apps/web/wrangler.jsonc`, `cloudflare-module` Nitro preset, Hyperdrive bridge ও startup check)। Worker-এর জন্য R2-তে S3-compatible storage (`QUIRE_STORAGE_DRIVER=s3`), request জুড়ে কাজ করে এমন realtime driver (`QUIRE_REALTIME_DRIVER=durable_objects` অথবা `centrifugo`), shared cache (`QUIRE_CACHE_DRIVER=postgres` অথবা `valkey`) এবং HTTP email provider দরকার। এগুলো না থাকলে Worker চালু হতে অস্বীকার করে এবং log-এ প্রতিটি setting-এর নাম দেয়। Durable Objects driver হলো `apps/realtime-worker`-এর realtime Worker-এর client (fan-out, presence ও history-এর জন্য প্রতি channel-এ একটি Durable Object, disconnect-এর জন্য প্রতি ব্যক্তিতে একটি); নিচে বর্ণিত মতো এর পাশাপাশি এটি deploy করুন অথবা Centrifugo ব্যবহার করুন।

## উপাদান <!--quire:the-pieces-->

| উপাদান | Cloudflare-এ |
| --- | --- |
| `web` | `nodejs_compat`-সহ একটি Worker |
| Postgres | বাহ্যিক, Hyperdrive দিয়ে সংযুক্ত: application role-এর জন্য `HYPERDRIVE`, একই physical database-এ report role-এর জন্য `REPORT_HYPERDRIVE`। Startup-এর সময় web tier প্রতিটি connection string যথাক্রমে `DATABASE_URL` ও `QUIRE_REPORT_DATABASE_URL`-এ কপি করে |
| Files | R2, এর S3 API দিয়ে (`S3_ENDPOINT=https://<account>.r2.cloudflarestorage.com`); `FILES` binding bucket যুক্ত করে |
| Background job | Write-সহ job enqueue করতে হলে Hyperdrive-এর ওপর pg-boss চলে। Companion worker-এ `QUIRE_QUEUE_DRIVER=cloudflare` হলে হালকা job (ক্রমবিহীন notification ও webhook delivery) Cloudflare Queues দিয়ে যায়, ফলে সেগুলোর জন্য Postgres poll হয় না। Companion worker উভয় ধরনের কাজ চালায় |
| Realtime | Durable Objects-সহ realtime Worker, `apps/realtime-worker` |
| `worker`, `scheduler`, `collab`, `content`, ClamAV, Gotenberg, ffmpeg | Companion container host-এ। Worker এগুলো চালাতে পারে না |
| Trace | Workers observability, `wrangler.jsonc`-এ চালু করা হয় |

`REPORT_HYPERDRIVE` `HYPERDRIVE`-এ উল্লেখ করা physical database-এর report role সরবরাহ করে। নিচে বর্ণিত কারণে এই target অতিরিক্ত physical database-এ বাঁধা tenant পরিবেশন করে না।

## এই target-এ যা করা যায় না <!--quire:what-this-target-cannot-do-->

Startup-এ অস্বীকার করে এবং প্রতিটি সমস্যা একসঙ্গে তালিকায় দেখায়:

- **SMTP নেই।** `QUIRE_EMAIL_PROVIDER_CONFIG`-এ HTTP provider ব্যবহার করুন।
- **Local disk নেই।** `QUIRE_STORAGE_DRIVER`-এ object storage দিতে হবে।
- **In-process realtime বা cache নেই।** request-এর মধ্যে Workers memory ভাগ করে না, তাই `QUIRE_REALTIME_DRIVER=inprocess` ও `QUIRE_CACHE_DRIVER=memory` প্রত্যাখ্যাত হয়।
- **Worker-এর মধ্যে ClamAV, Gotenberg বা ffmpeg নেই।** Worker-এ দেওয়া `CLAMAV_URL`, `GOTENBERG_URL` ও `FFMPEG_PATH` প্রত্যাখ্যাত হয়; এগুলো companion worker-এ দিন।
- **নির্দিষ্ট database-সহ প্রতিষ্ঠান নেই।** Worker-এর Hyperdrive binding deploy-এর সময় স্থির হয়, তাই নিজস্ব database-সহ প্রতিষ্ঠানের জন্য স্পষ্ট “unavailable here” পৃষ্ঠা দেখায়। সেটিকে Compose অথবা Vercel থেকে পরিবেশন করুন।

আরেকটি বিষয় প্রত্যাখ্যাত হয় না, তবে জানা আবশ্যক: framework-এর documentation যা-ই বলুক, Workers-এ **prerendering ও incremental static regeneration কাজ করে না**। প্রতিটি route প্রতি request-এ render হয়।

এই target-এ transaction সংক্ষিপ্ত রাখুন এবং network call চলাকালে কখনো transaction ধরে রাখবেন না: connection pool-এ ফেরার সময় Hyperdrive session state reset করে, তাই প্রতিটি transaction-এ tenant context সেট হয়।

## Deploy করা <!--quire:deploying-->

1. Resource তৈরি করুন:
   ```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
   ```
   `apps/web/wrangler.jsonc`-এ দুটি Hyperdrive ID দিন।
2. Secret দেওয়ার জন্য `bun run --bun wrangler secret put <NAME>` command একবারে একটি করে `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`। সাধারণ setting (`QUIRE_APP_ORIGIN`, `QUIRE_CONTENT_ORIGIN`, `QUIRE_PLATFORM_DOMAINS`, `QUIRE_DATABASE_ID`, `S3_ENDPOINT`, `S3_BUCKET`, `QUIRE_COLLAB_URL`) `vars`-এ দিন।
3. `apps/web` থেকে build ও deploy করুন:
   ```sh
   NITRO_PRESET=cloudflare-module bun run build
   bun run --bun wrangler deploy
   ```
4. Web tier-এর `QUIRE_REALTIME_WORKER_SECRET` এবং token secret-কে `QUIRE_REALTIME_TOKEN_SECRET` হিসেবে দিয়ে realtime Worker deploy করুন (web tier তার নিজস্ব `QUIRE_REALTIME_TOKEN_SECRET` দিয়ে realtime token sign করে, অথবা সেটি unset থাকলে `QUIRE_SECRET_KEY` দিয়ে; তাই যেটি ব্যবহৃত হয় সেটিই দিন); web tier-এ `QUIRE_REALTIME_WORKER_URL`-এ Worker-এর address দিন:
   ```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-এ হালকা job চালাতে প্রতি light queue-র জন্য একটি queue তৈরি করে companion worker-এ এগুলো দিন (Queues read ও write অনুমতিসহ 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` এবং prefix নির্ধারণে `QUIRE_QUEUE_PREFIX` দিন; default prefix হলো `quire-`।
6. [Vercel নির্দেশিকা](/bn/ops/vercel/)-এর 3 নম্বর ধাপের মতো companion host চালান। প্রতিটি Worker deployment-এর আগে সেখানেই migration চলে।

Configuration প্রত্যাখ্যাত হলে `bun run --bun wrangler tail`-এ "The web tier did not start on cloudflare" দেখা যায় এবং বদলাতে হবে এমন প্রতিটি setting-এর তালিকা থাকে।

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