# التثبيت الذاتي الاستضافة {#self-host-installation}
نحن نقدم نسخة ذاتية الاستضافة من خادم تويست للمؤسسات التي تحتاج إلى مزيد من
التحكم في بنيتها التحتية. يسمح لك هذا الإصدار باستضافة تويست على البنية التحتية
الخاصة بك، مما يضمن بقاء بياناتك آمنة وخاصة.
::: warning LICENSE REQUIRED
تتطلب الاستضافة الذاتية لـ Tuist ترخيصًا مدفوعًا صالحًا قانونيًا. الإصدار المحلي
من تويست متاح فقط للمؤسسات على خطة المؤسسة. إذا كنت مهتمًا بهذا الإصدار، يُرجى
التواصل مع [contact@tuist.dev] (mailto:contact@tuist.dev).
:::
## إيقاع الإصدار {#release-cadence}
نصدر إصدارات جديدة من تويست باستمرار مع وصول التغييرات الجديدة القابلة للإصدار
إلى الرئيسي. نحن نتبع [الإصدار الدلالي] (https://semver.org/) لضمان إمكانية
التنبؤ بالإصدارات والتوافق.
يُستخدم المكون الرئيسي للإبلاغ عن التغييرات العاجلة في خادم تويست التي ستتطلب
التنسيق مع المستخدمين في مكان العمل. لا يجب أن تتوقع منا استخدامه، وفي حال
احتجنا إلى ذلك، كن مطمئنًا أننا سنعمل معك في جعل الانتقال سلسًا.
## النشر المستمر {#continuous-deployment}
نوصي بشدة بإعداد خط أنابيب للنشر المستمر يقوم تلقائياً بنشر أحدث إصدار من تويست
كل يوم. وهذا يضمن لك الوصول دائماً إلى أحدث الميزات والتحسينات والتحديثات
الأمنية.
إليك مثالاً على سير عمل إجراءات GitHub التي تتحقق من الإصدارات الجديدة وتنشرها
يومياً:
```yaml
name: Update Tuist Server
on:
schedule:
- cron: '0 3 * * *' # Run daily at 3 AM UTC
workflow_dispatch: # Allow manual runs
jobs:
update:
runs-on: ubuntu-latest
steps:
- name: Check and deploy latest version
run: |
# Your deployment commands here
# Example: docker pull ghcr.io/tuist/tuist:latest
# Deploy to your infrastructure
```
## متطلبات وقت التشغيل {#runtime-requirements}
يوضح هذا القسم متطلبات استضافة خادم تويست على البنية التحتية الخاصة بك.
### مصفوفة التوافق {#compatibility-matrix}
تم اختبار خادم Tuist وهو متوافق مع الحد الأدنى من الإصدارات التالية:
| المكوّن | الحد الأدنى من الإصدار | الملاحظات |
| --------------- | ---------------------- | ------------------------------ |
| PostgreSQL | 15 | مع امتداد TimecaleDB |
| الجدول الزمنيDB | 2.16.1 | ملحق PostgreSQL المطلوب (مهمل) |
| كليك هاوس | 25 | مطلوب للتحليلات |
::: warning TIMESCALEDB DEPRECATION
يعتبر TimescaleDB حاليًا امتداد PostgreSQL مطلوبًا لخادم Tuist، ويُستخدم لتخزين
بيانات السلاسل الزمنية والاستعلام عنها. ومع ذلك، تم إهمال **TimescaleDB** وسيتم
إسقاطه كملحق مطلوب في المستقبل القريب حيث نقوم بترحيل جميع وظائف السلاسل الزمنية
إلى ClickHouse. في الوقت الحالي، تأكد من أن مثيل PostgreSQL الخاص بك يحتوي على
TimescaleDB مثبت وممكّن.
:::
### تشغيل صور Docker-الافتراضية {#running-dockervirtualized-images}
نقوم بتوزيع الخادم كصورة [Docker] (https://www.docker.com/) عبر [سجل حاويات
GitHub]
(https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry).
لتشغيلها، يجب أن تدعم بنيتك التحتية تشغيل صور Docker. لاحظ أن معظم مزودي البنية
التحتية يدعمونها لأنها أصبحت الحاوية القياسية لتوزيع وتشغيل البرامج في بيئات
الإنتاج.
### قاعدة بيانات Postgres {#postgres-database}
بالإضافة إلى تشغيل صور Docker، ستحتاج إلى [قاعدة بيانات Postgres]
(https://www.postgresql.org/) مع امتداد [TimescaleDB]
(https://www.timescale.com/) لتخزين البيانات العلائقية وبيانات السلاسل الزمنية.
يتضمن معظم مزودي البنية التحتية قواعد بيانات Postgres في عروضهم (على سبيل
المثال، [AWS] (https://aws.amazon.com/rds/postgresql/) و [Google Cloud]
(https://cloud.google.com/sql/docs/postgres)).
**مطلوب ملحق TimescaleDB:** يتطلب Tuist امتداد TimescaleDB لتخزين بيانات السلاسل
الزمنية والاستعلام عنها بكفاءة. يُستخدم هذا الامتداد لأحداث الأوامر والتحليلات
والميزات الأخرى المستندة إلى الوقت. تأكد من أن مثيل PostgreSQL الخاص بك يحتوي
على TimescaleDB مثبت وممكّن قبل تشغيل Tuist.
::: info MIGRATIONS
تقوم نقطة دخول صورة Docker تلقائيًا بتشغيل أي عمليات ترحيل مخطط معلقة قبل بدء
الخدمة. إذا فشلت عمليات الترحيل بسبب فقدان ملحق TimescaleDB، فستحتاج إلى تثبيته
في قاعدة البيانات أولاً.
:::
### قاعدة بيانات ClickHouse {#clickhouse-database}
يستخدم تويست [ClickHouse] (https://clickhouse.com/) لتخزين كميات كبيرة من بيانات
التحليلات والاستعلام عنها. ClickHouse هو **مطلوب** لميزات مثل بناء الرؤى وسيكون
قاعدة بيانات السلاسل الزمنية الأساسية مع الاستغناء التدريجي عن TimescaleDB.
يمكنك الاختيار بين الاستضافة الذاتية لـ ClickHouse أو استخدام خدمتهم المستضافة.
::: info MIGRATIONS
تقوم نقطة دخول صورة Docker تلقائيًا بتشغيل أي عمليات ترحيل مخطط ClickHouse معلقة
قبل بدء تشغيل الخدمة.
:::
### التخزين {#storage}
ستحتاج أيضًا إلى حل لتخزين الملفات (مثل ثنائيات إطار العمل والمكتبة). ندعم
حاليًا أي تخزين متوافق مع S3.
## التكوين {#configuration}
يتم تكوين الخدمة في وقت التشغيل من خلال متغيرات البيئة. نظرًا للطبيعة الحساسة
لهذه المتغيرات، ننصح بتشفيرها وتخزينها في حلول آمنة لإدارة كلمات المرور. كن
مطمئناً، يتعامل تويست مع هذه المتغيرات بعناية فائقة، مما يضمن عدم عرضها في
السجلات.
::: info LAUNCH CHECKS
يتم التحقق من المتغيرات الضرورية عند بدء التشغيل. إذا كان أي منها مفقودًا، سيفشل
بدء التشغيل وستظهر رسالة الخطأ تفاصيل المتغيرات الغائبة.
:::
### تكوين الترخيص {#license-configuration}
بصفتك مستخدمًا محليًا، ستتلقى مفتاح ترخيص ستحتاج إلى عرضه كمتغير بيئة. يُستخدم
هذا المفتاح للتحقق من صحة الترخيص والتأكد من أن الخدمة تعمل ضمن شروط الاتفاقية.
| متغير البيئة | الوصف | مطلوب | افتراضي | مثال على ذلك |
| ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- | ------- | ----------------------------------------------- |
| `TUIST_LICENSE` | الترخيص المقدم بعد توقيع اتفاقية مستوى الخدمة | نعم* | | `******` |
| `tuist_license_clicense_certificate_base64` | **بديل استثنائي لـ 'TUIST_LICENSE'**. شهادة عامة مشفرة بترميز Base64 للتحقق من صحة الترخيص دون اتصال بالإنترنت في البيئات التي لا يمكن للخادم الاتصال بالخدمات الخارجية. تستخدم فقط عندما يتعذر استخدام `TUIST_LICENSE` | نعم* | | `LS0tLS1CRUdJTiBDRDRVJUSUSUZJZJQ0FURS0tLS0t...` |
\ * يجب توفير إما `TUIST_LICENSE` أو `TUIST_LICENSE_CERTIFICATE_BASE64` ولكن ليس
كلاهما. استخدم `TUIST_LICENSE` لعمليات النشر القياسية.
::: warning EXPIRATION DATE
التراخيص لها تاريخ انتهاء صلاحية. سيتلقى المستخدمون تحذيرًا أثناء استخدام أوامر
تويست التي تتفاعل مع الخادم إذا انتهت صلاحية الترخيص في أقل من 30 يومًا. إذا كنت
مهتمًا بتجديد ترخيصك، يرجى التواصل مع [contact@tuist.dev]
(mailto:contact@tuist.dev).
:::
### تكوين البيئة الأساسية {#base-environment-configuration}
| متغير البيئة | الوصف | مطلوب | افتراضي | مثال على ذلك | |
| -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- | ------------------------------------ | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| `TUIST_APP_URL` | عنوان URL الأساسي للوصول إلى المثيل من الإنترنت | نعم | | https://tuist.dev | |
| `tuist_secret_secret_key_base` | مفتاح الاستخدام لتشفير المعلومات (مثل الجلسات في ملف تعريف الارتباط) | نعم | | | `c5786d9f869239cbddeca645575349a570ffebb332b64400c37256e1c9cb7ec831345d03dc0188edd129d09580d8cbf3ceaf17768e2048c037d9c31da5dcacfa` |
| `tuist_secret_secret_key_password` | الفلفل لإنشاء كلمات مرور مجزأة | لا يوجد | `$TUIST_secret_secret_key_base` | | |
| `tuist_secret_secret_key_tokens` | المفتاح السري لتوليد رموز عشوائية | لا يوجد | `$TUIST_secret_secret_key_base` | | |
| `tuist_secret_secret_key_encryption` | مفتاح 32 بايت لتشفير AES-GCM للبيانات الحساسة | لا يوجد | `$TUIST_secret_secret_key_base` | | |
| `TUIST_USE_USE_IPV6` | عند `1` يقوم التطبيق بتهيئة التطبيق لاستخدام عناوين IPv6 | لا يوجد | `0` | `1` | |
| `مستوى_مستوى_سجل_التسجيل` | مستوى السجل المراد استخدامه للتطبيق | لا يوجد | `المعلومات` | [مستويات السجل] (https://hexdocs.pm/logger/1.12.3/Logger.html#module-levels) | |
| `tuist_github_github_app_name` | إصدار عنوان URL الخاص باسم تطبيق GitHub الخاص بك | لا يوجد | | `تطبيقي` | |
| `tuist_github_github_app_private_key_base64` | المفتاح الخاص المشفر بترميز القاعدة 64 المستخدم في تطبيق GitHub لفتح وظائف إضافية مثل نشر تعليقات العلاقات العامة التلقائية | لا يوجد | `LS0t0tLS1CRUDJTIBSU0EgUFJJVKFUR...` | | |
| `tuist_github_github_app_private_key` | المفتاح الخاص المستخدم لتطبيق GitHub لإلغاء قفل وظائف إضافية مثل نشر تعليقات العلاقات العامة التلقائية. **نوصي باستخدام الإصدار المرمز بالقاعدة 64 بدلاً من ذلك لتجنب المشاكل مع الأحرف الخاصة** | لا يوجد | `-----بداية RSA...` | | |
| `معالجات_عمليات_المستخدم_المستخدم_المعالج` | قائمة مفصولة بفاصلة بمقابض المستخدمين الذين لديهم حق الوصول إلى عناوين URL للعمليات | لا يوجد | | `مستخدم1،مستخدم2` | |
| `TUIST_WEB` | تمكين نقطة نهاية خادم الويب | لا يوجد | `1` | `1` أو `0` | |
### تكوين قاعدة البيانات {#database-configuration}
تُستخدم متغيرات البيئة التالية لتكوين اتصال قاعدة البيانات:
| متغير البيئة | الوصف | مطلوب | افتراضي | مثال على ذلك |
| ------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | --------- | ---------------------------------------------------------------------- |
| `DATABASE_URL` | عنوان URL للوصول إلى قاعدة بيانات Postgres. لاحظ أن عنوان URL يجب أن يحتوي على معلومات المصادقة | نعم | | `postgres://username:password@cloud.us-east-2.aws.test.com/production` |
| `tuist_clickhouse_click_url` | عنوان URL للوصول إلى قاعدة بيانات ClickHouse. لاحظ أن عنوان URL يجب أن يحتوي على معلومات المصادقة | لا يوجد | | `http://username:password@cloud.us-east-2.aws.test.com/production` |
| `tuist_use_ssl_ssl_for_database` | عندما يكون صحيحًا، فإنه يستخدم [SSL] (https://en.wikipedia.org/wiki/Transport_Layer_Security) للاتصال بقاعدة البيانات | لا يوجد | `1` | `1` |
| `tuist_database_dpool_spool_size` | عدد الاتصالات التي يجب الاحتفاظ بها مفتوحة في تجمع الاتصالات | لا يوجد | `10` | `10` |
| `tuist_database_queue_queue_target` | الفاصل الزمني (بالمللي ثانية) للتحقق مما إذا كانت جميع الاتصالات التي تم سحبها من التجمع قد استغرقت أكثر من الفاصل الزمني لقائمة الانتظار [(مزيد من المعلومات)] (https://hexdocs.pm/db_connection/DBConnection.html#start_link/2-queue-config) | لا يوجد | `300` | `300` |
| `tuist_database_queue_interval_interval_interval` | زمن العتبة (بالمللي ثانية) في قائمة الانتظار التي يستخدمها المجمع لتحديد ما إذا كان ينبغي أن يبدأ في إسقاط الاتصالات الجديدة [(مزيد من المعلومات)] (https://hexdocs.pm/db_connection/DBConnection.html#start_link/2-queue-config) | لا يوجد | `1000` | `1000` |
| `tuist_clickhouse_clickhouse_flush_interval_ms` | الفاصل الزمني بالمللي ثانية بين عمليات تنظيف المخزن المؤقت ClickHouse | لا يوجد | `5000` | `5000` |
| `tuist_clickhouse_clickhouse_max_buffer_size` | الحد الأقصى لحجم المخزن المؤقت ل ClickHouse بالبايت قبل فرض التدفق | لا يوجد | `1000000` | `1000000` |
| `tuist_clickhouse_clickhouse_buffer_bpool_size` | عدد عمليات المخزن المؤقت لـ ClickHouse المراد تشغيلها | لا يوجد | `5` | `5` |
### تكوين بيئة المصادقة {#authentication-environment-configuration}
نقوم بتسهيل المصادقة من خلال [موفري الهوية (IDP)]
(https://en.wikipedia.org/wiki/Identity_provider). للاستفادة من ذلك، تأكد من
وجود جميع متغيرات البيئة الضرورية للموفر المختار في بيئة الخادم. **المتغيرات
المفقودة** سيؤدي إلى تجاوز تويست لذلك الموفر.
#### جيثب {#github}
نوصي بالمصادقة باستخدام [تطبيق GitHub]
(https://docs.github.com/en/apps/creating-github-apps/about-creating-github-apps/about-creating-github-apps)
ولكن يمكنك أيضًا استخدام [تطبيق OAuth]
(https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/creating-an-oauth-app).
تأكد من تضمين جميع متغيرات البيئة الأساسية التي حددها GitHub في بيئة الخادم.
ستؤدي المتغيرات الغائبة إلى تجاهل Tuist لمصادقة GitHub. لإعداد تطبيق GitHub بشكل
صحيح:
- في الإعدادات العامة لتطبيق GitHub:
- انسخ معرف العميل `معرف العميل` وقم بتعيينه `TUIST_GITHUB_APP_CLIENT_ID`
- قم بإنشاء ونسخ سر عميل جديد `سر العميل` وقم بتعيينه على أنه
`TUIST_GITHUB_APP_CLIENT_SECRET`
- قم بتعيين عنوان URL `رد الاتصال` كـ
`http://YOUR_APP_URL/users/auth/github/callback`. `Your_APP_URL` يمكن أن
يكون أيضًا عنوان IP الخاص بخادمك.
- الأذونات التالية مطلوبة:
- المستودعات:
- طلبات السحب: القراءة والكتابة
- الحسابات:
- عناوين البريد الإلكتروني: للقراءة فقط
في `الأذونات والأحداث`' ' `أذونات الحساب` ، قم بتعيين `عناوين البريد الإلكتروني`
إذن `للقراءة فقط`.
ستحتاج بعد ذلك إلى كشف متغيرات البيئة التالية في البيئة التي يعمل فيها خادم
تويست:
| متغير البيئة | الوصف | مطلوب | افتراضي | مثال على ذلك |
| --------------------------------------- | -------------------------- | ----- | ------- | ------------------------------------------ |
| `tuist_github_github_App_client_id` | معرّف العميل لتطبيق GitHub | نعم | | `Iv1.a629723000043722` |
| `tuist_github_github_App_client_secret` | سر العميل للتطبيق | نعم | | `232f972951033b89799b0fd24566a04d83f44ccc` |
#### جوجل {#google}
يمكنك إعداد المصادقة مع Google باستخدام [OAuth 2]
(https://developers.google.com/identity/protocols/oauth2). لذلك، ستحتاج إلى
إنشاء بيانات اعتماد جديدة من نوع OAuth Client ID. عند إنشاء بيانات الاعتماد، حدد
"تطبيق الويب" كنوع التطبيق، وقم بتسميته `Tuist` ، وقم بتعيين URI إعادة التوجيه
إلى `{base_url} / Users/users/auth/google/callback` حيث `base_url` هو عنوان URL
الذي تعمل عليه الخدمة المستضافة. بمجرد إنشاء التطبيق، انسخ معرف العميل والسر وقم
بتعيينهما كمتغيري بيئة `GOOGLE_CLIENT_ID` و `GOOGLE_CLIENT_SECRET` على التوالي.
::: info CONSENT SCREEN SCOPES
قد تحتاج إلى إنشاء شاشة موافقة. عند القيام بذلك، تأكد من إضافة نطاقات
`userinfo.email` و `openid` ووضع علامة على التطبيق كنطاق داخلي.
:::
#### أوكتا {#okta}
يمكنك تمكين المصادقة مع Okta من خلال بروتوكول [OAuth 2.0]
(https://oauth.net/2/). سيكون عليك [إنشاء تطبيق]
(https://developer.okta.com/docs/en/guides/implement-oauth-for-okta/main/#create-an-oauth-2-0-app-in-okta)
على Okta باتباع هذه
التعليمات .
ستحتاج إلى تعيين متغيرات البيئة التالية بمجرد حصولك على معرف العميل والسر أثناء
إعداد تطبيق Okta:
| متغير البيئة | الوصف | مطلوب | افتراضي | مثال على ذلك |
| ----------------------------------- | ---------------------------------------------------------------- | ----- | ------- | ------------ |
| `tuist_okta_1_okta_1_client_id` | معرّف العميل للمصادقة على Okta. يجب أن يكون الرقم هو معرف مؤسستك | نعم | | |
| `tuist_okta_1_client_client_secret` | سر العميل للمصادقة ضد Okta | نعم | | |
يجب استبدال الرقم `1` بمعرف مؤسستك. سيكون هذا عادةً 1، ولكن تحقق من قاعدة
البيانات الخاصة بك.
### تكوين بيئة التخزين {#storage-environment-configuration}
يحتاج Tuist إلى تخزين لإيواء القطع الأثرية التي يتم تحميلها من خلال واجهة برمجة
التطبيقات. من **من الضروري تهيئة أحد حلول التخزين المدعومة** لكي يعمل تويست
بفعالية.
#### مخازن متوافقة مع S3 {#s3compliant-storages}
يمكنك استخدام أي موفر تخزين متوافق مع S3 لتخزين القطع الأثرية. متغيرات البيئة
التالية مطلوبة لمصادقة وتكوين التكامل مع موفر التخزين:
| متغير البيئة | الوصف | مطلوب | افتراضي | مثال على ذلك |
| --------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ---------------------- | --------------------------------------------------------- |
| `TUIST_S3_S3_ACESS_KEY_ID` أو `AWS_ACESS_KEY_ID` | معرّف مفتاح الوصول للمصادقة على موفر التخزين | نعم | | `أكياوسفود` |
| `TUIST_S3_SECRET_SECRET_CACESS_KEY` أو `AWS_SECRET_SECRET_CACESS_KEY` | مفتاح الوصول السري للمصادقة ضد مزود التخزين | نعم | | `wJalrXUtNFEMI/K7MDENG/bPxRfiRfiCYEXAMPLEKEY` |
| `TUIST_S3_REGION` أو `AWS_REGION` | المنطقة التي يقع فيها الدلو | لا يوجد | `السيارات` | `الولايات المتحدة-غرب-2` |
| `TUIST_S3_ENDPOINT` أو `AWS_ENDPOINT` | نقطة النهاية لموفر التخزين | نعم | | `https://s3.us-west-2.amazonaws.com` |
| `tuist_s3_s3_bucket_name` | اسم الدلو الذي سيتم تخزين القطع الأثرية فيه | نعم | | `تويست-أثريات` |
| `tuist_s3_ca_ca_cert_pem` | شهادة CA مشفرة بترميز PEM للتحقق من اتصالات S3 HTTPS. مفيد للبيئات ذات التغطية الهوائية مع الشهادات الموقعة ذاتياً أو المراجع المصدقة الداخلية. | لا يوجد | حزمة CA النظام | `-----بداية الشهادة----- \n...\n----- نهاية الشهادة-----` |
| `tuist_s3_s3_connect_timetimeout` | المهلة (بالمللي ثانية) لإنشاء اتصال بموفر التخزين | لا يوجد | `3000` | `3000` |
| `tuist_s3_s3_receive_timetimeout` | المهلة (بالمللي ثانية) لتلقي البيانات من موفر التخزين | لا يوجد | `5000` | `5000` |
| `tuist_s3_s3_pool_timetimeout` | المهلة (بالمللي ثانية) لتجمع الاتصال بموفر التخزين. استخدم `إنفينيتي` لعدم وجود مهلة. | لا يوجد | `5000` | `5000` |
| `tuist_s3_s3_pool_max_idle_id Time` | الحد الأقصى لوقت الخمول (بالمللي ثانية) للاتصالات في التجمع. استخدم `اللانهاية` لإبقاء الاتصالات حية إلى أجل غير مسمى | لا يوجد | `اللانهاية` | `60000` |
| `tuist_s3_spool_size` | الحد الأقصى لعدد الاتصالات لكل تجمع | لا يوجد | `500` | `500` |
| `tuist_s3_s3_pool_count` | عدد تجمعات الاتصال المطلوب استخدامها | لا يوجد | عدد برامج جدولة النظام | `4` |
| `tuist_s3_protocol` | البروتوكول الذي يجب استخدامه عند الاتصال بموفر التخزين (`http1` أو `http2`) | لا يوجد | `http1` | `http1` |
| `tuist_s3_virtual_virtual_host` | ما إذا كان ينبغي إنشاء عنوان URL مع اسم الدلو كمجال فرعي (مضيف افتراضي) | لا يوجد | `كاذبة` | `1` |
::: info AWS authentication with Web Identity Token from environment variables
إذا كان موفر التخزين الخاص بك هو AWS وترغب في المصادقة باستخدام رمز هوية الويب
المميز، يمكنك تعيين متغير البيئة `TUIST_S3_AUTHENTICATION_METHOD` إلى
`aws_web_web_web_identity_token_from_env_vars` ، وسيستخدم Tuist هذه الطريقة
باستخدام متغيرات بيئة AWS التقليدية.
:::
#### التخزين السحابي من Google {#google-cloud-storage}
بالنسبة لتخزين Google Cloud Storage، اتبع [هذه المستندات]
(https://cloud.google.com/storage/docs/authentication/managing-hmackeys) للحصول
على الزوج `AW00 AWS_ACCESS_KEY_KEY` و `AWS_S_SECRET_ACCESS_KEY`. يجب ضبط
`AWS_ENDPOINT` على `https://storage.googleapis.com`. متغيرات البيئة الأخرى هي
نفسها بالنسبة لأي تخزين آخر متوافق مع S3.
### تكوين البريد الإلكتروني {#email-configuration}
يتطلب تويست وظيفة البريد الإلكتروني لمصادقة المستخدم وإشعارات المعاملات (مثل
إعادة تعيين كلمة المرور وإشعارات الحساب). في الوقت الحالي، **فقط Mailgun مدعوم
فقط** كمزود للبريد الإلكتروني.
| متغير البيئة | الوصف | مطلوب | افتراضي | مثال على ذلك |
| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------- | ------------------------------------------------------------------------------ | ----------------------------- |
| `tuist_mailgun_api_key_API_key` | مفتاح API للمصادقة مع Mailgun | نعم* | | `المفتاح-1234567867890abcdef` |
| `النطاق_البريدي` | المجال الذي سيتم إرسال رسائل البريد الإلكتروني منه | نعم* | | `mg.tuist.io` |
| `tuist_mailing_mailing_from_address` | عنوان البريد الإلكتروني الذي سيظهر في حقل "من" | نعم* | | `noreply@tuist.io` |
| `tuist_mailing_mail_reply_to_address` | عنوان الرد إلى عنوان اختياري لردود المستخدم | لا يوجد | | `support@tuist.dev` |
| `tuist_skip_skip_email_confirmation` | تخطي تأكيد البريد الإلكتروني لتسجيلات المستخدمين الجدد. عند التمكين، يتم تأكيد تسجيل المستخدمين تلقائيًا ويمكنهم تسجيل الدخول مباشرة بعد التسجيل | لا يوجد | `صواب` إذا لم يتم تكوين البريد الإلكتروني `خطأ` إذا تم تكوين البريد الإلكتروني | `صحيح`, `خطأ`, `1`, `0` |
\* متغيرات تكوين البريد الإلكتروني مطلوبة فقط إذا كنت تريد إرسال رسائل بريد
إلكتروني. إذا لم يتم تهيئتها، يتم تخطي تأكيد البريد الإلكتروني تلقائيًا
::: info SMTP SUPPORT
دعم SMTP العام غير متوفر حاليًا. إذا كنت بحاجة إلى دعم SMTP للنشر المحلي، يرجى
التواصل مع [contact@tuist.dev] (mailto:contact@tuist.dev) لمناقشة متطلباتك.
:::
::: info AIR-GAPPED DEPLOYMENTS
بالنسبة لعمليات التثبيت في مكان العمل دون الوصول إلى الإنترنت أو تكوين موفر
البريد الإلكتروني، يتم تخطي تأكيد البريد الإلكتروني تلقائيًا بشكل افتراضي. يمكن
للمستخدمين تسجيل الدخول مباشرة بعد التسجيل. إذا قمت بتكوين البريد الإلكتروني
ولكنك لا تزال ترغب في تخطي التأكيد، قم بتعيين
`TUIST_SKIP_EMAIL_CONFIRMATION=صحيح`. لطلب تأكيد البريد الإلكتروني عند تكوين
البريد الإلكتروني، قم بتعيين `TUIST_SKIP_SKIP_CONFIRMATION_CONFIRMATION=كاذبة`.
:::
### تهيئة منصة Git {#git-platform-configuration}
يستطيع تويست التكامل مع
منصات Git لتوفير ميزات إضافية مثل نشر التعليقات تلقائيًا في
طلبات السحب الخاصة بك.
#### جيثب {#platform-github}
ستحتاج إلى [إنشاء تطبيق GitHub]
(https://docs.github.com/en/apps/creating-github-apps/about-creating-github-apps/about-creating-github-apps).
يمكنك إعادة استخدام التطبيق الذي أنشأته للمصادقة، إلا إذا قمت بإنشاء تطبيق OAuth
GitHub. في `الأذونات والأحداث`' `أذونات المستودع` ، ستحتاج أيضًا إلى تعيين `سحب
الطلبات` إذن `القراءة والكتابة القراءة والكتابة`.
بالإضافة إلى `TUIST_GITHUB_APP_CLIUB_CLIENT_ID` و
`TUIST_GITHUB_AP_APP_CLIENT_SECRET` ، ستحتاج إلى متغيرات البيئة التالية:
| متغير البيئة | الوصف | مطلوب | افتراضي | مثال على ذلك |
| ------------------------------------- | --------------------------- | ----- | ------- | ---------------------------------------- |
| `tuist_github_github_app_private_key` | المفتاح الخاص لتطبيق GitHub | نعم | | `-----بدء تشغيل مفتاح rsa الخاص-----...` |
## الاختبار محلياً {#testing-locally}
نحن نقدم تهيئة شاملة لـ Docker Compose تتضمن جميع التبعيات المطلوبة لاختبار خادم
Tuist على جهازك المحلي قبل النشر على بنيتك التحتية:
- PostgreSQL 15 مع ملحق TimescaleDB 2.16 (مهمل)
- ClickHouse 25 للتحليلات
- ClickHouse Keeper للتنسيق
- MinIO للتخزين المتوافق مع S3
- ريديس لتخزين KV المستمر عبر عمليات النشر (اختياري)
- pgweb لإدارة قواعد البيانات
::: danger LICENSE REQUIRED
مطلوب قانونيًا متغير بيئة `TUIST_LICENSE` صالح مطلوب قانونيًا لتشغيل خادم تويست،
بما في ذلك مثيلات التطوير المحلية. إذا كنت بحاجة إلى ترخيص، يرجى التواصل مع
[contact@tuist.dev] (mailto:contact@tuist.dev).
:::
**بداية سريعة:**
1. قم بتنزيل ملفات التكوين:
```bash
curl -O https://docs.tuist.io/server/self-host/docker-compose.yml
curl -O https://docs.tuist.io/server/self-host/clickhouse-config.xml
curl -O https://docs.tuist.io/server/self-host/clickhouse-keeper-config.xml
curl -O https://docs.tuist.io/server/self-host/.env.example
```
2. تكوين متغيرات البيئة:
```bash
cp .env.example .env
# Edit .env and add your TUIST_LICENSE and authentication credentials
```
3. بدء تشغيل جميع الخدمات:
```bash
docker compose up -d
# or with podman:
podman compose up -d
```
4. الوصول إلى الخادم على http://localhost:8080
**نقاط نهاية الخدمة:**
- خادم تويست: http://localhost:8080
- وحدة تحكم MinIO: http://localhost:9003 (بيانات الاعتماد: `tuist` /
`tuist_dev_password`)
- واجهة برمجة تطبيقات MinIO: http://localhost:9002
- pgweb (واجهة مستخدم PostgreSQL): http://localhost:8081
- مقاييس بروميثيوس: http://localhost:9091/metrics
- كليك هاوس HTTP: http://localhost:8124
**الأوامر الشائعة:**
تحقق من حالة الخدمة:
```bash
docker compose ps
# or: podman compose ps
```
عرض السجلات:
```bash
docker compose logs -f tuist
```
إيقاف الخدمات:
```bash
docker compose down
```
إعادة تعيين كل شيء (حذف جميع البيانات):
```bash
docker compose down -v
```
**ملفات التكوين:**
- [docker-compose.yml] (/server/self-host/docker-compose.yml) - إكمال تكوين
Docker Compose Compose
- [click-house-config.xml] (/server/self-host/clickhouse-config.xml) - تكوين
ClickHouse
- [ClickHouse Keeper-keeper-config.xml]
(/server/self-host/clickhouse-keeper-config.xml) - تهيئة ClickHouse Keeper
- [.env.example](/server/self-host/.env.example) مثال - مثال لملف متغيرات البيئة
## النشر {#deployment}
صورة تويست دوكر الرسمية متاحة على:
```
ghcr.io/tuist/tuist
```
### سحب صورة Docker {#pulling-the-docker-image}
يمكنك استرداد الصورة عن طريق تنفيذ الأمر التالي:
```bash
docker pull ghcr.io/tuist/tuist:latest
```
أو اسحب إصداراً محدداً:
```bash
docker pull ghcr.io/tuist/tuist:0.1.0
```
### نشر صورة Docker {#deploying-the-docker-image}
ستختلف عملية النشر لصورة Docker بناءً على موفر السحابة الذي اخترته ونهج النشر
المستمر لمؤسستك. نظرًا لأن معظم الحلول والأدوات السحابية، مثل [Kubernetes]
(https://kubernetes.io/)، تستخدم صور Docker كوحدات أساسية، يجب أن تتوافق الأمثلة
في هذا القسم بشكل جيد مع الإعداد الحالي لديك.
::: warning
إذا كان خط أنابيب النشر الخاص بك يحتاج إلى التحقق من صحة أن الخادم قيد التشغيل،
يمكنك إرسال طلب `GET` HTTP إلى `/ جاهز` وتأكيد رمز الحالة `200` في الاستجابة.
:::
#### الطيران {#fly}
لنشر التطبيق على [Fly] (https://fly.io/)، ستحتاج إلى ملف تكوين `fly.toml.toml`.
ضع في اعتبارك إنشاءه ديناميكيًا ضمن خط أنابيب النشر المستمر (CD). فيما يلي مثال
مرجعي لاستخدامك:
```toml
app = "tuist"
primary_region = "fra"
kill_signal = "SIGINT"
kill_timeout = "5s"
[experimental]
auto_rollback = true
[env]
# Your environment configuration goes here
# Or exposed through Fly secrets
[processes]
app = "/usr/local/bin/hivemind /app/Procfile"
[[services]]
protocol = "tcp"
internal_port = 8080
auto_stop_machines = false
auto_start_machines = false
processes = ["app"]
http_options = { h2_backend = true }
[[services.ports]]
port = 80
handlers = ["http"]
force_https = true
[[services.ports]]
port = 443
handlers = ["tls", "http"]
[services.concurrency]
type = "connections"
hard_limit = 100
soft_limit = 80
[[services.http_checks]]
interval = 10000
grace_period = "10s"
method = "get"
path = "/ready"
protocol = "http"
timeout = 2000
tls_skip_verify = false
[services.http_checks.headers]
[[statics]]
guest_path = "/app/public"
url_prefix = "/"
```
بعد ذلك يمكنك تشغيل `fly launch - محلي فقط -لا-نشر-محلية فقط` لتشغيل التطبيق. في
عمليات النشر اللاحقة، بدلاً من تشغيل `fly launch - محلي فقط` ، ستحتاج إلى تشغيل
`fly deploy - محلي فقط`. لا يسمح موقع Fly.io بسحب صور Docker الخاصة، ولهذا السبب
نحتاج إلى استخدام العلامة `- محلي فقط`.
## مقاييس بروميثيوس {#prometheus-metrics}
يعرض Tuist مقاييس Prometheus على `/metrics` لمساعدتك في مراقبة مثيلك المستضاف
ذاتيًا. تتضمن هذه المقاييس ما يلي:
### مقاييس عميل Finch HTTP {#finch-metrics}
يستخدم تويست [Finch] (https://github.com/sneako/finch) كعميل HTTP الخاص به ويعرض
مقاييس مفصلة حول طلبات HTTP:
#### طلب المقاييس
- `tuist_prom_prom_ex_ex_finch_request_crequest_count_total` - إجمالي عدد طلبات
فينش (عداد)
- التسميات: `فينش_اسم`, `طريقة`, `مخطط`, `المضيف`, `المنفذ`, `الحالة`
- `tuist_prom_prom_ex_ex_finch_request_drequest_duration_milliseconds` - مدة
طلبات HTTP (رسم بياني)
- التسميات: `فينش_اسم`, `طريقة`, `مخطط`, `المضيف`, `المنفذ`, `الحالة`
- الدلاء: 10 مللي ثانية، 50 مللي ثانية، 100 مللي ثانية، 250 مللي ثانية، 500
مللي ثانية، 1 ثانية، 2.5 ثانية، 5 ثانية، 10 ثانية
- `tuist_prom_prom_ex_ex_finch_request_exquest_exception_count_total` - إجمالي
عدد استثناءات طلبات فينش (عداد)
- التسميات: `فينش_اسم`, `طريقة`, `مخطط`, `المضيف`, `المنفذ`, `نوع`, `السبب`
#### مقاييس قائمة انتظار تجمع الاتصالات
- `tuist_prom_prom_ex_ex_finch_queue_due_duration_milliseconds` - الوقت المستغرق
في انتظار تجمع الاتصالات في قائمة الانتظار (الرسم البياني)
- التسميات: `فينش_اسم`, `مخطط`, `المضيف`, `المنفذ`, `تجمع`
- الدلاء: 1 مللي ثانية، 5 مللي ثانية، 10 مللي ثانية، 25 مللي ثانية، 50 مللي
ثانية، 100 مللي ثانية، 250 مللي ثانية، 500 مللي ثانية، 1 ثانية
- `tuist_prom_prom_ex_ex_finch_queue_queue_idle_time_milliseconds` - الوقت الذي
يقضيه الاتصال خاملاً قبل استخدامه (الرسم البياني)
- التسميات: `فينش_اسم`, `مخطط`, `المضيف`, `المنفذ`, `تجمع`
- الدلاء: 10 مللي ثانية، 50 مللي ثانية، 100 مللي ثانية، 250 مللي ثانية، 500
مللي ثانية، 1 ثانية، 5 ثوانٍ، 10 ثوانٍ
- `tuist_prom_prom_ex_ex_finch_queue_exception_cception_count_total` - إجمالي
عدد استثناءات قائمة انتظار فينش (عداد)
- التسميات: `فينش_اسم`, `مخطط`, `المضيف`, `المنفذ`, `النوع`, `السبب`
#### مقاييس الاتصال
- `tuist_prom_prom_ex_ex_finch_finch_connect_duration_milliseconds` - الوقت
المستغرق في إنشاء اتصال (رسم بياني)
- التسميات: `فينش_اسم`, `مخطط`, `المضيف`, `المنفذ`, `خطأ`
- الدلاء: 10 مللي ثانية، 50 مللي ثانية، 100 مللي ثانية، 250 مللي ثانية، 500
مللي ثانية، 1 ثانية، 2.5 ثانية، 5 ثانية
- `tuist_prom_prom_ex_finch_finch_connect_count_total` - إجمالي عدد محاولات
الاتصال (عداد)
- التسميات: `فينش_اسم`, `مخطط`, `المضيف`, `المنفذ`
#### إرسال المقاييس
- `tuist_prom_prom_ex_ex_finch_send_duration_duration_milliseconds` - الوقت
المستغرق في إرسال الطلب (الرسم البياني)
- التسميات: `فينش_اسم`, `طريقة`, `مخطط`, `المضيف`, `المنفذ`, `خطأ`
- الدلاء: 1 مللي ثانية، 5 مللي ثانية، 10 مللي ثانية، 25 مللي ثانية، 50 مللي
ثانية، 100 مللي ثانية، 250 مللي ثانية، 500 مللي ثانية، 1 ثانية
- `tuist_prom_prom_ex_ex_finch_send_send_sidle_time_milliseconds` - الوقت الذي
يقضيه الاتصال خاملاً قبل الإرسال (رسم بياني)
- التسميات: `فينش_اسم`, `طريقة`, `مخطط`, `المضيف`, `المنفذ`, `خطأ`
- دلاء: 1 مللي ثانية، 5 مللي ثانية، 10 مللي ثانية، 25 مللي ثانية، 50 مللي
ثانية، 100 مللي ثانية، 250 مللي ثانية، 500 مللي ثانية
توفر جميع مقاييس المدرج التكراري `_bucket` و `_sum` و `_count` متغيرات للتحليل
المفصل.
### مقاييس أخرى
بالإضافة إلى مقاييس فينش، يعرض تويست مقاييس لـ
- أداء الجهاز الافتراضي BEAM
- مقاييس منطق العمل المخصصة (التخزين، والحسابات، والمشاريع، وما إلى ذلك)
- أداء قاعدة البيانات (عند استخدام البنية الأساسية المستضافة من تويست)
## العمليات {#operations}
يوفر تويست مجموعة من الأدوات المساعدة ضمن `/ops/` التي يمكنك استخدامها لإدارة
مثيلك.
::: warning Authorization
يمكن فقط للأشخاص الذين تم إدراج مقابضهم في متغير البيئة
`TUIST_OPS_OPS_USER_HANDLES` الوصول إلى نقاط النهاية `/ops/`.
:::
- **الأخطاء (``العمليات/الخطأ''):** يمكنك عرض الأخطاء غير المتوقعة التي حدثت في
التطبيق. هذا مفيد لتصحيح الأخطاء وفهم الخطأ الذي حدث، وقد نطلب منك مشاركة هذه
المعلومات معنا إذا كنت تواجه مشاكل.
- **لوحة التحكم ('/العمليات/لوحة التحكم'):** يمكنك عرض لوحة معلومات توفر رؤى حول
أداء التطبيق وصحته (مثل استهلاك الذاكرة، والعمليات قيد التشغيل، وعدد الطلبات).
يمكن أن تكون لوحة المعلومات هذه مفيدة جدًا لفهم ما إذا كانت الأجهزة التي
تستخدمها كافية للتعامل مع الحمل.