النشر والتشغيل

صورة عامة لمكوّنات أي تثبيت عامل وكيف يُحافَظ على سلامته. لا تحتوي عمدًا على أي أسماء خوادم سوى النطاقات العامة، ولا على بيانات دخول أو تفاصيل خوادم.

العناوين الحية على helsen-med.com

العنوان العامما يقدّمه
helsen-med.comالمتجر (Next.js): العربية على /ar والإنجليزية على /en. ويُحوَّل www.helsen-med.com إليه.
seller.helsen-med.comلوحة البائع على الويب (ملفات ثابتة).
delivery.helsen-med.comلوحة التوزيع والتوصيل على الويب (ملفات ثابتة)، لحسابات المرسِلين.
api.helsen-med.comالواجهة البرمجية على /api/v1، وواجهة Swagger على /docs، وفحوص الصحة، والاتصالات الفورية، ووسائط المنتجات.
docs.helsen-med.comموقع التوثيق هذا: ملفات ثابتة يقدّمها nginx.
ملفات APK لأندرويدتطبيقات المشتري والبائع والسائق، يوزّعها الفريق كملفات (ليست على Google Play بعد). تتصل بـ api.helsen-med.com وتثبّت المفتاح العام لشهادته.
غير منشورة: لوحة الإدارة

لوحة الإدارة مبنية لكنها غير منشورة على أي عنوان عام؛ وذلك بانتظار قرار. يستخدم المديرون واجهة Swagger في الأثناء. راجع المنصة الحية والخطوات الأولى لمعرفة ما يعمل اليوم.

التفاصيل في دليل التشغيل

بنية الخوادم، وإدارة العمليات، وشهادات TLS، والنسخ الاحتياطي، ومتغيرات البيئة، وصلاحيات الوصول موثّقة في دليل التشغيل المحفوظ لدى الفريق — الملف infra/deploy/README.md في المستودع — وليس في هذا الموقع العام. لا يُعدّ أي شيء هنا إجراءً للنشر.

ما الذي يجب أن يعمل

بيئة الإنتاج خادم واحد. ينهي nginx اتصالات HTTPS بشهادات Let's Encrypt تتجدد تلقائيًا وتعيد استخدام المفتاح نفسه، فتبقى تثبيتات الشهادة في التطبيقات صالحة عبر التجديدات. ويحدّ nginx أيضًا معدل الطلبات لكل عنوان IP، بشدة أكبر على مسارات الدخول، قبل حدود الواجهة البرمجية الخاصة لكل عنوان. وكل ما عدا ذلك يعمل في Docker.

العملية / الخدمةالسبب
الواجهة البرمجية (dist/main.js)تخدم كل العملاء.
العامل الخلفي (dist/worker.js)يفرّغ صندوق الصادر (outbox) وينفّذ كل المهام المجدولة. بدونه لا يُعالَج أي إشعار ولا تعمل أي مهمة مجدولة — ومنها تحرير الحجوزات المنتهية، والإكمال التلقائي للطلبات، والمدفوعات للبائعين، والمطابقات.
PostgreSQL 16مصدر الحقيقة، بما في ذلك صندوق الصادر وأقفال المهام.
Redis 7مطلوب في الإعدادات؛ ومحجوز لميزات تعدد النسخ (الحضور، وإلغاء الاتصالات المفتوحة).
Meilisearch 1.12بحث المشترين عن المنتجات.
SeaweedFS (متوافق مع S3)تخزين الكائنات لصور المنتجات والمستندات وصور إثبات التسليم. لا يُستخدم MinIO إلا في بيئة التطوير.
المتجر (Next.js)متجر يُعرض من الخادم. أما لوحتا البائع والتوصيل فملفات Vite ثابتة يقدّمها nginx.
لا يعمل في الإنتاج بعد
  • imgproxy غير منشور: تُعرض صور المنتجات بملفاتها الأصلية المرفوعة دون تصغير.
  • مشغّلات البريد والرسائل النصية والإشعارات الفورية مضبوطة على none. تُنشأ الإشعارات وتوضع في الطابور لكنها لا تُرسل؛ والإشعارات داخل التطبيق تعمل. وعند تهيئة SMTP (أو حساب رسائل نصية أو إشعارات فورية) يُرسل ما تراكم.
  • الدفع بالبطاقة: لم يُضبط Stripe ولا Paymob. الدفع عند الاستلام فقط.
  • لوحة الإدارة غير منشورة.
شغّل نسخة واحدة من الواجهة البرمجية

تسجّل قائمة الإطلاق أن الذاكرة المؤقتة وحضور الاتصال الفوري وبعض الأجزاء الأخرى تعمل داخل العملية حاليًا، فلا تكون صحيحة إلا مع نسخة واحدة حتى تتوفر محوّلات مبنية على Redis. وسّع الموارد رأسيًا حتى ذلك الحين.

فحوص الصحة

  • GET /health — الحياة؛ العملية تعمل.
  • GET /ready — الجاهزية؛ تُرجع ready عندما تستجيب قاعدة البيانات، وdegraded عندما لا تستجيب.

الإصدارات

  • تُبنى صورة الواجهة البرمجية من infra/docker/api.Dockerfile (متعددة المراحل، بمستخدم غير جذري) وتوسم برقم الإيداع، وليس latest أبدًا.
  • ترحيلات قاعدة البيانات تسير للأمام فقط (Prisma Migrate عبر migrate deploy). تتبع تغييرات المخطط أسلوب «التوسيع ثم التقليص» ليعمل الكود القديم والجديد معًا — راجع docs/zero-downtime-migrations.md.
  • التراجع بعد إصدار رحّل قاعدة البيانات ليس مجرد إرجاع الصورة؛ اتبع الدليل §8.

أدلة الحوادث

يغطي الملف docs/runbooks.md في المستودع، من بين أمور أخرى:

  1. دفتر الأستاذ غير متوازن
  2. إشعار دفع (webhook) انتهى في قائمة الرسائل الميتة
  3. إتمام الشراء بطيء
  4. اتصالات قاعدة البيانات مشبعة
  5. تراكم صندوق الصادر
  6. بيع مخزون أكثر من المتاح
  7. نقد السائقين لا يطابق دفتر الأستاذ
  8. الحاجة إلى التراجع عن إصدار
  9. لا يوجد سائقون في مناوبة
  10. إشارات الموقع تُغرق قاعدة البيانات
  11. العامل الخلفي متوقف أو مهمة لا تعمل

تُتابَع جاهزية الإطلاق لكل بند (العوائق، البيانات والاستعادة، المراقبة، الأمان) في docs/GO_LIVE_CHECKLIST.md.

نشر هذا الموقع

الموقع ملفات HTML بسيطة مع ملف تنسيق واحد وسكربت صغير، بلا أي خطوة بناء. وجّه كتلة خادم nginx للنطاق docs.helsen-med.com إلى المجلد docs/site مع index index.html؛ الصفحات الإنجليزية في الجذر والعربية تحت /ar/.