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

طبقة الويب على Vercel

شغّل طبقة ويب Quire على Vercel مع عامل مرافق.

عرض بتنسيق Markdown

يوضح التصميم docs/architecture/23-ops.md في القسم 5. تشغّل Vercel طبقة الويب فقط. وتعمل كل المكونات الأخرى على مضيف مرافق تديره أنت، وهو مطلوب.

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

الإعداد موجود (apps/web/vercel.json وإعداد Nitro المسبق لـvercel وفحوص بدء التشغيل). تحتاج Vercel إلى تخزين ملفات مشترك (QUIRE_STORAGE_DRIVER=s3 أو azure) ومشغل آني يعمل بين مثيلات الدوال (QUIRE_REALTIME_DRIVER=sse أو centrifugo) وموفر بريد إلكتروني عبر HTTP. دونها ترفض طبقة الويب بدء التشغيل، ويسمي سجلها كل إعداد مفقود.

المكونات

المكون مكان تشغيله
web Vercel Functions، بيئة Node: الصفحات وREST وMCP وLTI واستقبال خطافات الويب
worker وscheduler وcollab وcontent مضيف مرافق: Fly أو Railway أو ECS أو مضيف Docker خاص بك مع docker/compose.yaml
Postgres خارجي، خلف مجمع معاملات: Neon أو Supabase أو RDS مع PgBouncer
الملفات S3 أو R2. لا يوجد قرص دائم
المهام الخلفية تضاف إلى قائمة الانتظار باستخدام pg-boss ضمن معاملة الطلب ويشغلها العامل المرافق. وعند ضبط QUIRE_QUEUE_DRIVER=vercel على العامل المرافق، تمر المهام الخفيفة (تسليمات الإشعارات وخطافات الويب غير المرتبة) عبر Vercel Queues (VERCEL_QUEUE_REGION وVERCEL_QUEUE_TOKEN) كي لا يُستطلع Postgres المجمع عنها
المهام المتكررة مجدول المضيف المرافق. لا يوجد مسار Vercel Cron لأن تنفيذ عمل cron داخل دالة يتجاوز مهلة التشغيل
التتبع OpenTelemetry إلى مجمّعك عبر OTEL_EXPORTER_OTLP_ENDPOINT

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

تفحص طبقة الويب الإعدادات عند بدء التشغيل وترفضه، مع ذكر كل مشكلة، بدلًا من الفشل لاحقًا عند أول رسالة بريد لا تُرسل:

  • لا يدعم SMTP. اجعل QUIRE_EMAIL_PROVIDER_CONFIG يشير إلى موفر عبر HTTP (Postmark أو SES أو Mailgun أو SendGrid أو Resend). ويُرفض QUIRE_SMTP_URL.
  • لا يوجد قرص محلي. يُرفض QUIRE_STORAGE_DRIVER=local.
  • لا توجد ذاكرة مشتركة بين الاستدعاءات. يُرفض QUIRE_REALTIME_DRIVER=inprocess. وتُحد أحداث الخادم المرسلة للمستخدم بمهلة الدالة؛ ويعيد العميل الاتصال باستخدام مؤشر، فلا يضيع حدث، لكن لا تتوفر معرفة الحضور الآني.
  • عدد قواعد بيانات المستأجرين المخصصة محدود إلى نحو ثماني قواعد، إذ تتطلب كل قاعدة أخرى مجمع اتصال مستقلًا في بيئة لا يمكنها مشاركة المجمعات.

النشر

  1. أنشئ مشروع Vercel من المستودع واجعل Root Directory هو apps/web. يحدد apps/web/vercel.json أوامر التثبيت والبناء (NITRO_PRESET=vercel) ويقدم /sw.js دون تخزين مؤقت.
  2. عيّن متغيرات البيئة. استخدم docker/.env.example، وأدرج على الأقل: QUIRE_DEPLOY_TARGET=vercel وQUIRE_APP_ORIGIN وQUIRE_CONTENT_ORIGIN وQUIRE_PLATFORM_DOMAINS وQUIRE_SECRET_KEY وQUIRE_MASTER_KEY وDATABASE_URL (عنوان مجمّع الاتصالات) وQUIRE_REPORT_DATABASE_URL وQUIRE_AUDIT_DATABASE_URL وQUIRE_DATABASE_ID وQUIRE_EMAIL_PROVIDER_CONFIG وQUIRE_MAIL_FROM وإعدادات التخزين وQUIRE_COLLAB_URL وQUIRE_COLLAB_SIGNING_KEY اللذين يشيران إلى خدمة collab على المضيف المرافق. ترتبط QUIRE_REPORT_DATABASE_URL بقاعدة البيانات الفعلية التي يحددها DATABASE_URL. ولكل قاعدة إضافية مسجلة، أضف عنوان اتصال quire_report الخاص بها إلى بيئتي الويب والعامل، ثم سجّل اسم متغير البيئة كـenv:NAME في لوحة المنصة. وتتعطل التحليلات بأمان إذا غاب عنوان التقرير الخاص بقاعدة البيانات.
  3. على المضيف المرافق، شغّل docker/compose.yaml دون خدمة web وباستخدام docker/.env نفسه:
    docker compose -f docker/compose.yaml up -d migrate init worker scheduler collab content
    تُنفذ الترحيلات هناك قبل ترقية كل نشر على Vercel.
  4. انشر. إذا رُفض الإعداد، يبدأ سجل الدالة بالعبارة «The web tier did not start on vercel» ويسرد كل إعداد يحتاج إلى تغيير.

الترقية

نفذ الترحيلات من المضيف المرافق أولًا، ثم رقِّ نشر Vercel، وبعدها حدّث عمال المضيف المرافق: بالترتيب الموضح في upgrade.md. ويُعد التراجع الفوري في Vercel تراجعًا عن الشيفرة وآمنًا دائمًا ضمن الإصدار.

التنقل

اكتب للبحث…

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