বিষয়বস্তুতে যান

Cloudflare Workers-এ web tier

Cloudflare Workers-এ সীমিত Quire web tier চালান।

Markdown হিসেবে দেখুন

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

এই 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 ব্যবহার করুন।

উপাদান

উপাদান 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-এ যা করা যায় না

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 করা

  1. Resource তৈরি করুন:
    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 করুন:
    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 দিন:
    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 লাগবে):
    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 নির্দেশিকা-এর 3 নম্বর ধাপের মতো companion host চালান। প্রতিটি Worker deployment-এর আগে সেখানেই migration চলে।

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

নেভিগেশন

খুঁজতে লিখুন…

↑↓ নেভিগেট করুন↵ নির্বাচন করুনEsc বন্ধ করুন