الانتقال إلى المحتوى الرئيسي

نظرة عامة

هل هي المرة الأولى التي تقوم فيها بالتثبيت؟ اتبع دليل تثبيت Docker Compose لتشغيل Twenty، ثم عد هنا للإعداد.
يوفر Twenty وضعين للإعداد ليلائم احتياجات النشر المختلفة: الوصول إلى لوحة الإدارة: يمكن للمستخدمين الذين لديهم صلاحيات المسؤول (canAccessFullAdminPanel: true) فقط الوصول إلى واجهة التكوين.

1. إعداد لوحة الإدارة (افتراضي)

يحدث أغلب التكوين عبر واجهة المستخدم بعد التثبيت:
  1. الوصول إلى نسخة Twenty الخاصة بك (عادة http://localhost:3000)
  2. اذهب إلى الإعدادات / لوحة الإدارة / متغيرات التكوين
  3. اضبط التكاملات، والبريد الإلكتروني، والتخزين، والمزيد
  4. تسري التغييرات على الفور (خلال 15 ثانية لعمليات النشر متعددة الحاويات)
نشرات متعددة الحاويات: عند استخدام إعدادات قاعدة البيانات (IS_CONFIG_VARIABLES_IN_DB_ENABLED=true)، يقوم كل من حاويات الخادم والعامل بالقراءة من نفس قاعدة البيانات. التغييرات في لوحة الإدارة تؤثر عليهما تلقائيًا، مما يلغي الحاجة إلى تكرار متغيرات البيئة بين الحاويات (باستثناء متغيرات البنية التحتية).
ما يمكنك تكوينه عبر لوحة الإدارة:
  • المصادقة - Google/Microsoft OAuth، إعدادات كلمة المرور
  • البريد الإلكتروني - إعدادات SMTP، القوالب، التحقق
  • التخزين - تكوين S3، مسارات التخزين المحلية
  • التكاملات - Gmail، تقويم Google، خدمات Microsoft
  • حدود التشغيل ومعدل التكنولوجيا - حدود التنفيذ، API الحد من السرعة
  • والمزيد من الأمور…
متغيرات تكوين لوحة الإدارة
كل متغير موثق بوصف في لوحة الإدارة الخاصة بك في الإعدادات → لوحة الإدارة → متغيرات التكوين. بعض إعدادات البنية التحتية مثل اتصالات قاعدة البيانات (PG_DATABASE_URL)، عناوين الخوادم (SERVER_URL)، والأسرار (ENCRYPTION_KEY, FALLBACK_ENCRYPTION_KEY) يمكن ضبطها فقط عبر ملف .env.مرجع تقني كامل →

مفاتيح التشفير

تستخدم Twenty مفتاحَي تشفير يحددان حصراً عبر متغيرات البيئة: لضمان التوافق مع الإصدارات السابقة، إذا لم يتم تعيين ENCRYPTION_KEY، فإن Twenty تستخدم APP_SECRET كبديل لتشفير البيانات أثناء التخزين — بما يطابق سلوك الإصدارات القديمة في عمليات النشر الأقدم. يجب على عمليات التثبيت الجديدة دائماً تعيين قيمة مخصصة لـ ENCRYPTION_KEY. قم بإنشاء القيم باستخدام الأمر openssl rand -base64 32 وخزنها في مكان آمن (مثل مدير الأسرار، إعدادات مُشفَّرة، إلخ). فقدان ENCRYPTION_KEY يعني فقدان الوصول إلى كل سر مخزن في قاعدة البيانات. لتدوير ENCRYPTION_KEY بدون وقت توقف، راجع دليل تدوير المفاتيح.

2. إعداد بيئي فقط

جميع الإعدادات تتم إدارتها عبر ملفات .env:
  1. قم بتعيين IS_CONFIG_VARIABLES_IN_DB_ENABLED=false في ملف .env الخاص بك
  2. أضف جميع متغيرات الإعداد إلى ملف .env الخاص بك
  3. أعد تشغيل الحاويات لتصبح التغييرات نافذة
  4. ستظهر لوحة الإدارة القيم الحالية لكنها لن تتمكن من تعديلها

وضع تعدد مساحات العمل

افتراضيًا، تعمل Twenty في وضع مساحة عمل واحدة — وهو مثالي لمعظم عمليات النشر المستضافة ذاتيًا حيث تحتاج إلى مثيل واحد من نظام إدارة علاقات العملاء لمؤسستك.

وضع مساحة العمل الواحدة (الافتراضي)

  • مساحة عمل واحدة لكل مثيل من Twenty
  • أول مستخدم يصبح تلقائيًا مشرفًا مع صلاحيات كاملة (canImpersonate وcanAccessFullAdminPanel)
  • يتم تعطيل عمليات التسجيل الجديدة بعد إنشاء مساحة العمل الأولى
  • بنية URL بسيطة: https://your-domain.com

تمكين وضع تعدد مساحات العمل

قم بتمكين وضع تعدد مساحات العمل لعمليات النشر المشابهة لـ SaaS حيث تحتاج عدة فرق مستقلة إلى مساحات عمل خاصة بها على نفس مثيل Twenty. الاختلافات الرئيسية مقارنة بوضع مساحة العمل الواحدة:
  • يمكن إنشاء مساحات عمل متعددة على نفس المثيل
  • تحصل كل مساحة عمل على نطاق فرعي خاص بها (مثل: sales.your-domain.com، marketing.your-domain.com)
  • يسجل المستخدمون ويقومون بتسجيل الدخول عبر {DEFAULT_SUBDOMAIN}.your-domain.com (مثل: app.your-domain.com)
  • لا توجد صلاحيات مشرف تلقائية — أول مستخدم في كل مساحة عمل يكون مستخدمًا عاديًا
  • إعدادات خاصة بمساحة العمل مثل النطاق الفرعي والنطاق المخصص تصبح متاحة ضمن إعدادات مساحة العمل
إعداد خاص بالبيئة فقط: لا يمكن تكوين IS_MULTIWORKSPACE_ENABLED إلا عبر ملف .env ويتطلب إعادة تشغيل. لا يمكن تغييره عبر لوحة الإدارة.

تكوين DNS لوضع تعدد مساحات العمل

عند استخدام وضع تعدد مساحات العمل، قم بتكوين DNS لديك بسجل wildcard للسماح بإنشاء النطاقات الفرعية ديناميكيًا:
يُمكّن هذا توجيه النطاقات الفرعية تلقائيًا لمساحات العمل الجديدة دون تكوين DNS يدوي.

تقييد إنشاء مساحات العمل

في وضع تعدد مساحات العمل، قد ترغب في تقييد من يمكنه إنشاء مساحات عمل جديدة:
عند التمكين، يمكن فقط للمستخدمين الذين لديهم canAccessFullAdminPanel إنشاء مساحات عمل إضافية. لا يزال بإمكان المستخدمين إنشاء مساحة العمل الأولى الخاصة بهم أثناء التسجيل الأولي.

تكامل Gmail و Google Calendar

إنشاء مشروع Google Cloud

  1. اذهب إلى وحدة تحكم السحابة من Google
  2. أنشئ مشروعًا جديدًا أو اختر أحد المشاريع الموجودة
  3. قم بتفعيل هذه الـ APIs:

تكوين OAuth

  1. اذهب إلى بيانات اعتماد
  2. قم بإنشاء معرف عميل OAuth 2.0
  3. أضف هذه الـ URIs لإعادة التوجيه:
    • https://{your-domain}/auth/google/redirect (لتسجيل الدخول الفردي)
    • https://{your-domain}/auth/google-apis/get-access-token (للتكاملات)

الإعداد في Twenty

  1. اذهب إلى الإعدادات → لوحة الإدارة → متغيرات التكوين
  2. ابحث بسهولة عن قسم Google Auth
  3. حدد هذه المتغيرات:
    • MESSAGING_PROVIDER_GMAIL_ENABLED=true
    • CALENDAR_PROVIDER_GOOGLE_ENABLED=true
    • AUTH_GOOGLE_CLIENT_ID={client-id}
    • AUTH_GOOGLE_CLIENT_SECRET={client-secret}
    • AUTH_GOOGLE_CALLBACK_URL=https://{your-domain}/auth/google/redirect
    • AUTH_GOOGLE_APIS_CALLBACK_URL=https://{your-domain}/auth/google-apis/get-access-token
وضع بيئي فقط: إذا كنت قد ضبطت IS_CONFIG_VARIABLES_IN_DB_ENABLED=false، فأضف هذه المتغيرات إلى ملف .env الخاص بك بدلاً من ذلك.
النطاقات المطلوبة (يتم تكوينها تلقائيًا): انظر الشيفرة المصدرية ذات الصلة
  • https://www.googleapis.com/auth/calendar.events
  • https://www.googleapis.com/auth/gmail.readonly
  • https://www.googleapis.com/auth/profile.emails.read

إذا كان تطبيقك في وضع الاختبار

إذا كان تطبيقك في وضع الاختبار، ستحتاج إلى إضافة مستخدمين اختباريين إلى مشروعك. تحت شاشة موافقة OAuth، أضف مستخدمي الاختبار إلى قسم “مستخدمو الاختبار”.

تكامل Microsoft 365

يجب على المستخدمين الحصول على ترخيص Microsoft 365 ليتمكنوا من استخدام تقويم API ورسائل. لن يتمكنوا من مزامنة حسابهم في Twenty دون واحد منها.

إنشاء مشروع في Microsoft Azure

ستحتاج إلى إنشاء مشروع في Microsoft Azure والحصول على بيانات الاعتماد.

تمكين APIs

على وحدة تحكم Microsoft Azure، قم بتمكين الواجهات التالية في “أذونات”:
  • Microsoft Graph: Mail.ReadWrite
  • Microsoft Graph: Mail.Send
  • Microsoft Graph: قراءة التقويمات وكتابتها (Calendars.ReadWrite)
  • Microsoft Graph: User.Read
  • Microsoft Graph: openid
  • Microsoft Graph: email
  • Microsoft Graph: profile
  • Microsoft Graph: offline_access
كل هذه الأذونات مطلوبة، حتى إذا كنت تريد مزامنة رسائل البريد الإلكتروني وأحداث التقويم فقط. يطلب Twenty دائمًا “Mail.ReadWrite” و”Mail.Send” و”Calendars.ReadWrite” عندما يربط المستخدم حسابه، لذا فإن أذونات القراءة فقط مثل “Mail.Read” أو “Calendars.Read” غير كافية.
إذا كان المستأجر الخاص بك لا يسمح للمستخدمين العاديين بالموافقة على هذه الأذونات، فسيظهر لهم الخطأ AADSTS90094 عند ربط حسابهم. يمكن للمسؤول إصلاح ذلك بالنقر فوق “Grant admin consent for ” في صفحة “API permissions” الخاصة بتسجيل التطبيق.

URIs لإعادة التوجيه المصرح بها

ستحتاج إلى إضافة URIs التالية لإعادة التوجيه إلى مشروعك:
  • https://{your-domain}/auth/microsoft/redirect إذا كنت تريد استخدام تسجيل الدخول الفردي في Microsoft
  • https://{your-domain}/auth/microsoft-apis/get-access-token

الإعداد في Twenty

  1. اذهب إلى الإعدادات → لوحة الإدارة → متغيرات التكوين
  2. ابحث عن قسم Microsoft Auth
  3. حدد هذه المتغيرات:
    • MESSAGING_PROVIDER_MICROSOFT_ENABLED=true
    • CALENDAR_PROVIDER_MICROSOFT_ENABLED=true
    • AUTH_MICROSOFT_ENABLED=true
    • AUTH_MICROSOFT_CLIENT_ID={client-id}
    • AUTH_MICROSOFT_CLIENT_SECRET={client-secret}
    • AUTH_MICROSOFT_CALLBACK_URL=https://{your-domain}/auth/microsoft/redirect
    • AUTH_MICROSOFT_APIS_CALLBACK_URL=https://{your-domain}/auth/microsoft-apis/get-access-token
وضع بيئي فقط: إذا كنت قد ضبطت IS_CONFIG_VARIABLES_IN_DB_ENABLED=false، فأضف هذه المتغيرات إلى ملف .env الخاص بك بدلاً من ذلك.

تكوين النطاقات

انظر الشيفرة المصدرية ذات الصلة
  • ‘openid’
  • ‘البريد الإلكتروني’
  • ‘profile’
  • ‘offline_access’
  • ‘Mail.ReadWrite’
  • ‘Mail.Send’
  • ‘Calendars.ReadWrite’
  • ‘User.Read’

إذا كان تطبيقك في وضع الاختبار

إذا كان تطبيقك في وضع الاختبار، ستحتاج إلى إضافة مستخدمين اختباريين إلى مشروعك. أضف مستخدمي الاختبار إلى قسم “المستخدمون والمجموعات”.

مهام الخلفية للتقويم والمراسلة

بعد إعداد تكامل Gmail، أو Google Calendar، أو Microsoft 365، تحتاج إلى بدء وظائف الخلفية التي تقوم بمزامنة البيانات. سجل الوظائف المتكررة التالية في حاوية العمل الخاصة بك:

حدود ذاكرة قائمة انتظار المهام

يعمل Redis الخاص بقائمة الانتظار باستخدام noeviction: وبمجرد امتلائه، تفشل كل عملية إدراج في قائمة الانتظار لكل مساحة عمل. لمنع مساحة عمل أو تطبيق واحد من ملئها، يجوز لكل منهما استخدام حصة من الذاكرة التي يتركها الآخرون خالية، ويُحدد حجم كل مهمة بحد أقصى. يتطلب حد الحصة ضبط maxmemory على Redis الخاص بقائمة الانتظار. تُسجَّل حالات الرفض وتُحتسب في job_memory_limit_refused_total حسب قائمة الانتظار واسم المهمة والسبب، ويتتبع twenty_queue_memory_used_ratio استخدام الذاكرة. إذا كان موفر الخدمة لديك يحجز جزءًا من maxmemory (على سبيل المثال reserved-memory-percent في ElastiCache)، فأدرجه في JOB_QUEUE_MEMORY_RESERVE ما لم يكن maxmemory يستثنيه بالفعل. تُحتسب تكلفة المهمة حتى تكتمل أو تفشل نهائيًا، ولا تنتهي صلاحية التكاليف. تحتفظ المهمة التي تُزال من قائمة انتظار خارج العامل (حذف من لوحة الإدارة، تنظيف قائمة الانتظار) بتكلفتها إلى أن تشغّل yarn command:prod job-memory:reconcile. يحرر الأمر رسوم كل مهمة تم إلغاؤها أو انتهت، مع التحقق مرتين بفاصل بضع ثوانٍ (--grace-seconds، القيمة الافتراضية 10) حتى لا يتم تحرير مهمة قيد الإدراج في قائمة الانتظار عن طريق الخطأ.

الاتصالات الصادرة إلى المضيفين الداخليين

بشكل افتراضي، يرفض Twenty الاتصالات الصادرة إلى عناوين IP الخاصة/الداخلية (حماية SSRF). يشمل ذلك إجراءات سير عمل HTTP، وخطافات الويب، وموفري الهوية لـ SSO، واتصالات IMAP/SMTP/CalDAV. إذا كان موفر الهوية أو خادم البريد أو التقويم لديك يعمل على شبكة خاصة، فأدرج اسم مضيفه أو عنوان IP حرفيًا:
تتم مطابقة الإدخالات بناءً على اسم المضيف فقط، من دون أحرف بدل: بالنسبة إلى مُصدر OIDC مثل http://keycloak:8080/realms/twenty، أدرج keycloak. تظل جميع العناوين الخاصة الأخرى محظورة، وحتى المضيف المسموح له لا يمكنه أبدًا الوصول إلى نطاق عناوين البيانات الوصفية للسحابة. عيّن المتغير إلى * لتعطيل الحماية بالكامل، وهذا مناسب فقط على الشبكات الموثوقة والمعزولة. OUTBOUND_HTTP_SAFE_MODE_ENABLED مهمل. أثناء تعيينه إلى false، تظل الحماية معطلة بالكامل ويتم تجاهل OUTBOUND_HTTP_ALLOWED_INTERNAL_HOSTS، لذا أزِله عند الترحيل إلى القائمة. لا تغطي هذه القائمة مرفقات ملفات الذكاء الاصطناعي: تصل الصور وملفات PDF إلى النموذج كروابط مُنشأة من SERVER_URL، يجلبها إما موفر الذكاء الاصطناعي أو AI SDK في العامل، الذي يرفض العناوين الخاصة. لكي تعمل المرفقات، يجب أن يكون SERVER_URL عامًا؛ عند استخدام localhost أو SERVER_URL خاص، تعمل محادثات ووكلاء الذكاء الاصطناعي مع النص فقط.

تكوين البريد الإلكتروني

  1. اذهب إلى الإعدادات → لوحة الإدارة → متغيرات التكوين
  2. ابحث عن قسم Email
  3. قم بضبط إعدادات SMTP الخاصة بك:
ستحتاج إلى توفير كلمة مرور التطبيق.
  • EMAIL_DRIVER=smtp
  • EMAIL_SMTP_HOST=smtp.gmail.com
  • EMAIL_SMTP_PORT=465
  • EMAIL_SMTP_USER=gmail_email_address
  • EMAIL_SMTP_PASSWORD=‘gmail_app_password’
وضع بيئي فقط: إذا كنت قد ضبطت IS_CONFIG_VARIABLES_IN_DB_ENABLED=false، فأضف هذه المتغيرات إلى ملف .env الخاص بك بدلاً من ذلك.

تخزين S3

افتراضياً، تقوم Twenty بتخزين الملفات المرفوعة على نظام الملفات المحلي. بالنسبة لعمليات النشر في بيئة الإنتاج، استخدم S3 أو خدمة متوافقة مع S3 (MinIO، DigitalOcean Spaces، إلخ) لضمان بقاء الملفات عبر إعادة تشغيل الحاويات وإتاحة التوسّع عبر مثيلات خوادم متعددة.
عيّن STORAGE_TYPE=S_3 وقم بتهيئة متغيرات STORAGE_S3_* من خلال لوحة الإدارة أو .env. ملف .env بسيط لـ AWS S3 مع مستخدم IAM:
يُمرّر ملف Docker Compose المتغيرات STORAGE_TYPE وSTORAGE_S3_REGION وSTORAGE_S3_NAME وSTORAGE_S3_ENDPOINT ومتغيرَي بيانات الاعتماد من .env. عيّن متغيرات عنوان URL الموقّع مسبقًا في لوحة الإدارة، أو أضفها إلى كتلة environment لخدمتَي server وworker.

بيانات الاعتماد

عندما يكون STORAGE_S3_ACCESS_KEY_ID غير محدد، يحل الخادم بيانات الاعتماد عبر السلسلة الافتراضية لـ AWS SDK: متغيرا البيئة AWS_ACCESS_KEY_ID وAWS_SECRET_ACCESS_KEY، أو ملف بيانات اعتماد مشترك، أو دور مهمة ECS، أو دور حساب خدمة EKS ‏(IRSA)، أو ملف تعريف مثيل EC2.
ملفات تعريف مثيلات EC2 وDocker: تُقدَّم بيانات ملف تعريف المثيل من خلال خدمة بيانات تعريف المثيل، وتكون الحاوية الموجودة على شبكة الجسر الافتراضية لـ Docker على بُعد قفزة شبكة إضافية منها مقارنةً بالمضيف. مع حد القفزات الافتراضي لـ IMDSv2 البالغ 1، لا تتلقى الحاوية بيانات الاعتماد مطلقًا رغم أن AWS CLI يعمل على المضيف. ارفع الحد إلى 2 على المثيل، أو استخدم بيانات اعتماد ثابتة.
عندما لا يمكن العثور على بيانات اعتماد، يسجل الخادم CredentialsProviderError: Could not load credentials from any providers عند أول تحميل، بينما تعرض واجهة المستخدم خطأً عامًا فقط.

أذونات الحاوية

يُكتب الملف المُحمّل أولًا إلى مسار معلّق، ثم يُتحقق منه، وبعد ذلك يُنسخ إلى مساره النهائي، ويُحذف الكائن المعلّق. لذلك تحتاج السياسة إلى أكثر من s3:PutObject:
يُستخدم s3:ListBucket لحذف المجلدات، مثلًا عند حذف مساحة عمل. من دونه، يرد S3 على طلبات الكائنات المفقودة برفض الوصول بدلًا من عدم العثور عليها، لذلك لا يستطيع الخادم التمييز بين ملف مفقود ومشكلة أذونات.

الواجهة النهائية والعنونة

يستخدم Twenty دائمًا عنونة بنمط المسار، لذا تذهب الطلبات إلى https://endpoint/bucket/key. بالنسبة إلى AWS S3 الأصلية، اترك STORAGE_S3_ENDPOINT غير محدد: تنشئ SDK العنوان https://s3.{region}.amazonaws.com من STORAGE_S3_REGION، ولهذا يظهر إدخال منطقة غير صحيح كخطأ DNS بدلًا من خطأ S3. عيّن الواجهة النهائية فقط للخدمات المتوافقة مع S3، أو عندما يصل الخادم إلى S3 عبر واجهة VPC نهائية.

مشاركة الموارد عبر المصادر (CORS)

عندما تكون قيمة STORAGE_S3_PRESIGNED_URL_ENABLED هي true، تتواصل المتصفحات مع الحاوية مباشرةً. التنزيلات هي طلبات GET، والتحميلات هي طلبات PUT تحمل ترويسة Content-Type، مما يجعل المتصفح يرسل طلب تحقق مسبق أولًا. لذلك يجب أن تسمح سياسة CORS الخاصة بالحاوية بمصدر Twenty الخاص بك، وكلتا الطريقتين وتلك الترويسة:
من دون عناوين URL الموقعة مسبقًا، تمر كل حركة مرور الملفات عبر الخادم ولا تحتاج الحاوية إلى أي إعدادات CORS.

استكشاف الأخطاء وإصلاحها

تصل إخفاقات التحميل إلى واجهة المستخدم كخطأ عام. يوجد خطأ S3 الأساسي في سجلات الخادم (docker compose logs server) وفي استجابة GraphQL الظاهرة في علامة تبويب الشبكة بالمتصفح.

الوظائف المنطقية ومفسر الشيفرة

تدعم Twenty الوظائف المنطقية لعمليات سير العمل ومفسر الشيفرة لتحليل بيانات الذكاء الاصطناعي. كلاهما يقوم بتشغيل الشيفرة المقدمة من المستخدم ويتطلب تهيئة صريحة لأغراض الأمان.

الإعدادات الافتراضية للأمان

في بيئة الإنتاج (NODE_ENV=production): يكون الإعداد الافتراضي لكل من الوظائف المنطقية ومفسر الشيفرة هو معطل. يجب تمكينهما صراحة باستخدام LOGIC_FUNCTION_TYPE وCODE_INTERPRETER_TYPE إذا كنت تحتاج إلى هذه الميزات. في بيئة التطوير (NODE_ENV=development): يكون الإعداد الافتراضي لكليهما LOCAL لتسهيل التشغيل محلياً.
ملاحظة أمنية: يقوم برنامج التشغيل المحلي (LOGIC_FUNCTION_TYPE=LOCAL أو CODE_INTERPRETER_TYPE=LOCAL) بتشغيل الشيفرة مباشرة على المضيف ضمن عملية Node.js من دون عزل. يجب استخدامه فقط للشيفرة الموثوقة أثناء التطوير. لعمليات النشر الإنتاجية التي تتعامل مع شيفرة غير موثوقة، استخدم LOGIC_FUNCTION_TYPE=LAMBDA أو CODE_INTERPRETER_TYPE=E2B (مع وضع الحماية)، أو اتركهما مُعطَّلَيْن.

الوظائف المنطقية - برامج التشغيل المتاحة

الوظائف المنطقية - الإعداد الموصى به

للتطوير:
للإنتاج (AWS):
يحمّل برنامج تشغيل Lambda طبقة تبعيات كل تطبيق إلى LOGIC_FUNCTION_LAMBDA_LAYER_BUCKET، وهي حاوية تملكها في المنطقة نفسها التي توجد فيها وظائفك. عند عدم تعيينه، يستخدم برنامج التشغيل حاوية التخزين لديك (STORAGE_S3_NAME). إذا لم يتم تعيين أي منهما، تفشل الدوال المنطقية بسبب خطأ في التهيئة. لتعطيل الوظائف المنطقية:

مفسر الشيفرة - برامج التشغيل المتاحة

عند استخدام LOGIC_FUNCTION_TYPE=DISABLED أو CODE_INTERPRETER_TYPE=DISABLED، سترجع أي محاولة للتنفيذ خطأً. يكون هذا مفيدًا إذا كنت ترغب في تشغيل Twenty من دون هذه الإمكانات.

واجهة برمجة التطبيقات (API) والواجهة الأمامية على مضيفين منفصلين

ينطبق فقط إذا كنت لا تدع الواجهة الخلفية تقوم بخدمة الواجهة الأمامية. عمليات النشر ذات الأصل نفسه لا تحتاج إلى أي شيء هنا. صرّح بجميع أصول المتصفحات التي تتواصل مع واجهة برمجة التطبيقات (API)، مفصولة بفواصل. SERVER_URL وFRONTEND_URL موثوق بهما بالفعل. يقوم الخادم بتسجيل تحذير عندما يتصل به متصفح من مصدر غير مصرح به.
ترسل الواجهة الأمامية بيانات الاعتماد مع كل طلب، وتقوم المتصفحات برفض الاستجابة التي تحتوي على بيانات اعتماد إذا جاءت من مصدر غير مصرح به، لذلك يفشل التطبيق في التحميل حتى تقوم بتعيين هذا الإعداد.
إذا كان المضيفان على نطاقات قابلة للتسجيل مختلفة (وليس مجرد نطاقات فرعية مختلفة)، قم أيضًا بتعيين AUTH_COOKIE_SAME_SITE=none، والذي يتطلب HTTPS. مع تمكين ميزة تعدد مساحات العمل، لا تُدرِج كل نطاق فرعي لكل مساحة عمل هنا. بدلًا من ذلك، قم بتوجيه مسارات واجهة برمجة التطبيقات (API) (/graphql، /metadata، /rest، /auth/، /client-config، /file) إلى الواجهة الخلفية على كل اسم مضيف لمساحة عمل، بحيث تبقى كل مساحة عمل من نفس المصدر (same-origin) — هكذا تعمل Twenty Cloud.