جدار الحماية وإقامة البيانات.

تعلّم DXPR Builderإدارة الموقعاستيفاء متطلبات الامتثال

يخزّن DXPR Builder صفحاتكم في قاعدة بيانات Drupal الخاصة بكم. وهو يتصل بخدمات DXPR لفحوصات الترخيص وموارد المحرر وطلبات الذكاء الاصطناعي. تسرد هذه الصفحة كل اتصال، وما يحمله كل واحد منها، وأين تعمل نماذج DXAI Kavya، وكيف يُخزَّن مفتاح المنتج، وما الذي يعمل عند تقييد الوصول الصادر.

الاتصالات بنظرة واحدة

المضيف صادر عن الغرض مطلوب لـ
dxpr.com خادم Drupal حالة الترخيص وفحص النطاق ومزامنة المستخدمين المرخّصين التحرير
cdn2.dxpr.com متصفح المحرر JavaScript المحرر وCSS (الأساسية) التحرير
cdn.dxpr.com متصفح المحرر JavaScript المحرر وCSS (الاحتياطية) التحرير
kavya.dxpr.com خادم Drupal طلبات الذكاء الاصطناعي ورصيد الذكاء الاصطناعي ميزات الذكاء الاصطناعي
html-extract.dxpr.com متصفح المحرر «الاستنساخ من URL» بالذكاء الاصطناعي ميزات الذكاء الاصطناعي
r.jina.ai (طرف ثالث) متصفح المحرر يقرأ صفحات الويب التي تظهر عناوينها في أمر نصي ميزات الذكاء الاصطناعي
tuur.dxpr.com متصفح المحرر تحليلات استخدام المحرر اختياري

تستخدم كل الاتصالات HTTPS على المنفذ 443. لا يحمّل زوار الموقع شيئًا من خوادم DXPR أبدًا: تُعرض الصفحات المنشورة من HTML مخزّن في قاعدة البيانات، ويُشحن نص الواجهة الأمامية (dxpr_builder/dxpr_frontend.min.js) داخل الوحدة. ولا يظهر app.dxpr.com إلا في روابط تُعرض للمسؤولين.

فحوصات الترخيص (dxpr.com)

يستدعي خادم Drupal أربع نقاط نهاية معرّفة في src/Service/DxprBuilderLicenseServiceInterface.php، كل منها مع مفتاح المنتج كترويسة Authorization: Bearer.

نقطة النهاية متى البيانات المرسلة
GET /api/user-license كل 24 ساعة عند التصريح، وكل 30 دقيقة عند عدمه gba وusers_tier (عدد الحسابات التي تملك إذن edit with dxpr builder والمستوى الذي تقع فيه)، وvalues_count (عناصر المحتوى التي تستخدم حقل منشئ)، وsite_base_url، وsite (بصمة HMAC لملح التجزئة الخاص بالموقع؛ الملح نفسه لا يُرسل)، وsite_mail (من system.site)، وproject، وversion
GET /api/domain-blacklist/{hostname} كل ساعة اسم المضيف فقط؛ بلا ترويسة تصريح
POST /api/central-user-storage/{add,remove,sync} عند تغيّر الحسابات أو الأذونات أو مفتاح المنتج؛ تُحفظ العمليات اللاحقة في قائمة الانتظار وتُشغَّل عند تشغيل cron اسم المضيف مع عنوان البريد الإلكتروني وأسماء الأدوار لكل حساب يملك إذن التحرير. وتُتخطى الحسابات بلا عنوان بريد صالح
GET /api/user-license/users عند فتح صفحة تراخيص المستخدمين لا شيء غير المفتاح

لا يكون محتوى الصفحة جزءًا من طلب ترخيص أبدًا. وتطبع الوحدة أيضًا <div> مخفية على الصفحة الأولى تحتوي سلسلة علامة ثابتة ومستوى الترخيص وعدد المحررين وعدد مرات الحفظ (dxpr_builder_page_bottom() في dxpr_builder.module). وهي مقروءة في مصدر الصفحة.

موارد المحرر (cdn2.dxpr.com، cdn.dxpr.com)

عندما تكون موارد المحرر سحابية (الافتراضي)، يحمّل متصفح المحرر JavaScript المنشئ وCSS من https://cdn2.dxpr.com/<version>/، مع التراجع إلى https://cdn.dxpr.com/<version>/ بعد فحص /health فاشل. ويُلحق مفتاح المنتج بكل عنوان URL للمورد كمعامل استعلام jwt (dxpr_builder_library_info_build()). وتتحقق شبكة CDN من ذلك المفتاح: فاستجابة 401 تجعل js/editor_validation.js يعرض «مفتاح منتجكم غير صالح».

لا يظهر الخياران المحلية (المصغّرة) والمحلية (غير المصغّرة) في نموذج الإعدادات إلا عند وجود نسخة مبنية من المحرر في مجلد dxpr_builder/ للوحدة، وتُستخدم هذه النسخة تلقائيًا حتى عند اختيار السحابية. ولا يتتبع مستودع git هذه الملفات المبنية، لذا يحمّل الإصدار المنزّل من drupal.org المحرر من شبكة CDN.

طلبات الذكاء الاصطناعي (kavya.dxpr.com)

لا يتصل المتصفح بـ kavya.dxpr.com أبدًا. يرسل المحرر طلبات POST إلى مسارات على موقعكم (/dxpr_builder/ajax/ai/chat، و/dxpr_builder/ajax/ai/image، و/dxpr_builder/ajax/ai/image/edit؛ وكلها تتطلب إذن edit with dxpr builder ورمز CSRF وحسابًا مرخّصًا). يمرّر الموقع كل طلب عبر موفّر DXPR لوحدة Drupal AI (ai_provider_dxpr) إلى https://kavya.dxpr.com/v1/chat/completions أو /v1/images/generations أو /v1/images/edits، موثّقًا بمفتاح DXPR API المخزّن في وحدة Key. ويمكن لإعداد host للموفّر (ai_provider_dxpr.settings) توجيه الطلبات إلى مضيف مختلف. وبشكل منفصل، تستدعي صفحة إعدادات الذكاء الاصطناعي GET https://kavya.dxpr.com/v1/account/balance مع مفتاح المنتج لعرض رصيدكم.

ما يحتويه طلب الذكاء الاصطناعي

لا ترسل ميزات الذكاء الاصطناعي وحدها محتوى الصفحة خارج الموقع، إلا عندما يطلقها محرر (dxpr_builder/build/dxpr-global/ai-service.js).

الطلب المحتوى المرسل
توليد النصوص والصفحات الأمر النصي للنظام وأمر المحرر النصي وسجل المحادثة
مع تحديد عنصر HTML الخارجي للعنصر: كاملًا إذا كان 500 حرف أو أقل، وإلا فأول 200 حرف وآخر 200 حرف منه
عمليات مستوى الصفحة HTML الصفحة الحالي، حتى 50,000 حرف؛ والصفحة الكاملة عند استبدال الصفحة كلها
حقول اختيارية اسم النموذج وترتيب الموفّرين الممكّنين ونتيجة HTML متوقعة والوسوم والفئات المسموحة وعلامة web_search وتنسيق استجابة
توليد الصور الأمر النصي والحجم والجودة والخلفية
تحرير الصور الشيء نفسه مع الصورة المصدر، مشفّرة بـ base64

يجلب تسهيلان صفحات الويب من متصفح المحرر (ai-service-url-fetch.js): يُطلب عنوان URL في أمر نصي مع إلحاق .md، وإذا فشل ذلك فعبر https://r.jina.ai/<url>، وهي خدمة قراءة خارجية لا تشغّلها DXPR؛ ويرسل الأمر النصي الذي يطلب استنساخ صفحة العنوان إلى https://html-extract.dxpr.com/?url=.... وفي الحالتين لا يُرسل إلا العنوان.

تُرشَّح مخرجات الذكاء الاصطناعي في طريق العودة. وتُضبط النطاقات المسموحة والوسوم المحظورة والوسوم المسموحة في /admin/dxpr_studio/dxpr_builder/ai_settings تحت ترشيح مخرجات الذكاء الاصطناعي.

أين تعمل نماذج DXAI Kavya

يقدّم DXPR Builder ثلاثة نماذج (src/Constants/AiModelConstants.php):

النموذج اسم API الوصف المعروض في نموذج الإعدادات
DXAI Kavya M1 kavya-m1 أفضل أداء (OpenAI وGoogle Gemini وAnthropic)
DXAI Kavya M1 EU kavya-m1-eu يركّز على الخصوصية (MistralAI)
DXAI Kavya M1 Fast kavya-m1-fast أسرع استجابات وجودة أقل

لا يوجد إعداد منطقة في أي من الوحدتين. تُختار إقامة البيانات بالنموذج وبموفّري المنبع الذين تمكّنونهم:

  • kavya-m1 يتحوّل تلقائيًا بين خمسة موفّرين عند الفشل، مدرجين مع بلدانهم في نموذج إعدادات DXPR AI Provider: Anthropic (الولايات المتحدة) وGoogle Gemini (الولايات المتحدة) وMistralAI (فرنسا) وOpenAI (الولايات المتحدة) وXAI (الولايات المتحدة). وفي وضع الأولوية اليدوية تسحبون الموفّرين بين الممكّن والمعطّل وتضبطون ترتيبهم.
  • kavya-m1-eu يستخدم MistralAI فقط. يذكر ملف README لـ DXPR AI Provider أنه «keeps data within European boundaries (servers in Netherlands)»؛ وتذكر وثائقه أن خادم Kavya يعمل في هولندا مع نسخة احتياطية في ألمانيا، وأن الطلبات تمر عبر خوادم MistralAI في فرنسا، وأنه لا يتراجع أبدًا إلى موفّر خارج الاتحاد الأوروبي. هذه المواقع وثّقتها DXPR، ولا يفرضها شيء في شيفرة Drupal.

مع تثبيت ai_provider_dxpr، يُختار النموذج في /admin/config/ai/providers/dxpr، ويتحكم إعداده allowed_models في النماذج التي يجوز للمحررين اختيارها. وبدونه، يُضبط النموذج وترتيب الموفّرين في /admin/dxpr_studio/dxpr_builder/ai_settings.

كيفية تخزين مفتاح المنتج

يقدّم قسم الترخيص في /admin/dxpr_studio/dxpr_builder/settings خيارَي طريقة التخزين (src/Form/DxprBuilderSettingsForm.php وsrc/Service/DxprBuilderKeyService.php):

  • وحدة Key: يُقرأ المفتاح من كيان Key المختار تحت المفتاح. تنقل dxpr_builder_update_9020() المفتاح الموجود في dxpr_builder.settings إلى كيان Key dxpr_builder_jwt، الذي ما زال موفّر الإعدادات يصدّره. ولا يُبقي المفتاح خارج صادرات الإعدادات إلا موفّر الملف أو البيئة.
  • تخزين الإعدادات: يُحفظ المفتاح نصًا صريحًا كـ dxpr_builder.settings.json_web_token ويُشمل في صادرات الإعدادات.

مفتاح المنتج رمز JSON Web Token يوثّق مكالمات الترخيص ومكالمة الرصيد وعناوين URL لموارد CDN؛ فتعاملوا معه كبيانات اعتماد.

ضبط جدار الحماية

من السماح بـ HTTPS الصادر إلى ملاحظات
خادم Drupal dxpr.com الترخيص
خادم Drupal kavya.dxpr.com للذكاء الاصطناعي فقط
محطات عمل المحررين cdn2.dxpr.com، cdn.dxpr.com موارد المحرر
محطات عمل المحررين html-extract.dxpr.com، r.jina.ai للذكاء الاصطناعي فقط؛ وحظرهما يعطّل بحث العناوين والاستنساخ فقط
محطات عمل المحررين tuur.dxpr.com التحليلات؛ والحظر لا يؤثر على التحرير

تحدّد التحليلات (dxpr_builder/build/dxpr-analytics/ وPostHog) الأحداث بعنوان البريد الإلكتروني للمحرر واسم مضيف الموقع. أوقفوها بـ drush config:set dxpr_builder.settings record_analytics 0؛ وليس للمفتاح حقل نموذج. ويُقرأ مفتاحان آخران بلا حقل نموذج من dxpr_builder.settings: يستبدل cloud_url عنوان URL الأساسي لشبكة CDN (يُستبدل VERSION بإصدار الوحدة) ويستبدل license_endpoint نقطة نهاية تخزين المستخدمين المركزية. اضبطوهما بتجاوز إعدادات في settings.php.

ضبط الوكيل

تستخدم مكالمات الترخيص والذكاء الاصطناعي عميل HTTP في Drupal، لذا يُضبط الوكيل في settings.php:

$settings['http_client_config']['proxy'] = [
  'http' => 'http://proxy.example.com:8080',
  'https' => 'http://proxy.example.com:8080',
  'no' => ['localhost', '127.0.0.1'],
];

تحمّل متصفحات المحررين موارد CDN وتستدعي خدمات التحليلات والقراءة مباشرة، فتتبع تلك الطلبات إعدادات الوكيل لمحطة العمل.

عمليات النشر المعزولة والمحلية

يعمل DXPR Builder على خادمكم الخاص؛ ولا يمر أي محتوى عبر مكوّن مستضاف. وعندما يتعذّر على الخادم والمحررين الوصول إلى DXPR:

الإمكانية دون أي وصول إلى DXPR
عرض الصفحات المنشورة يعمل؛ لا يُحمَّل شيء من DXPR
تخزين المحتوى يعمل؛ الصفحات قيم حقول في قاعدة بياناتكم
تحميل المحرر يفشل ما لم توجد نسخة محلية مبنية من المحرر في dxpr_builder/
التحقق من الترخيص يفشل. تسجّل الوحدة الخطأ، وتعرض «نواجه صعوبة في الاتصال بخوادم DXPR» للمسؤولين، وتحاول مجددًا كل 30 دقيقة. ولا يُحظر التحرير ما دام مفتاح المنتج مضبوطًا
صفحة تراخيص المستخدمين فارغة؛ تحتاج dxpr.com
ميزات الذكاء الاصطناعي غير متوفرة؛ يمر كل طلب عبر kavya.dxpr.com
التحليلات وبحث العناوين والاستنساخ من URL تُتخطى بصمت

ودون مفتاح منتج إطلاقًا، تطبّق الوحدة حدود المستوى المجاني في الشيفرة: محرر واحد و100 عنصر محتوى.

لذا يعمل النشر المحلي الكامل لعرض المحتوى وتخزينه؛ ويحتاج التحرير وصولًا إلى CDN أو نسخة محرر محلية، ويحتاج التحقق من الترخيص dxpr.com. اتصلوا بـ DXPR إذا احتجتم نسخة محرر لاستضافتها داخليًا.

ما الخطوة التالية؟