انتقل إلى المحتوى

طبقة الويب على Cloudflare Workers

شغّل طبقة ويب Quire مخفّضة على Cloudflare Workers.

عرض بتنسيق Markdown

يوضح التصميم docs/architecture/23-ops.md في القسم 6. تشغّل Workers طبقة ويب مخفّضة. ولا يشمل النطاق التكافؤ الكامل للميزات على Workers (PRD القسم 12)؛ إذ يُرفض بدء تشغيل المزايا التي لا تدعمها هذه البيئة، مع ذكر اسمها.

الحالة في هذا الإصدار

الإعداد موجود (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.

المكونات

المكون على 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. ولا تخدم هذه البيئة مستأجرين مثبتين على قواعد بيانات فعلية إضافية، كما هو موضح أدناه.

ما لا تستطيع هذه البيئة فعله

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

  • لا يدعم 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 ضبط حالة الجلسة عند إعادة الاتصال إلى المجمع، لذا يُضبط سياق المستأجر لكل معاملة.

النشر

  1. أنشئ الموارد:
    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:
    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 في طبقة الويب على عنوانه:
    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):
    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. تُنفذ الترحيلات هناك قبل كل نشر لـWorker.

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

التنقل

اكتب للبحث…

↑↓ للتنقل↵ للاختيارEsc للإغلاق