> ## Documentation Index
> Fetch the complete documentation index at: https://help.teable.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# النطاقات المخصصة للتطبيقات المنشورة في نسخة Teable ذاتية الاستضافة

> امنح التطبيق الذي أنشأته باستخدام App Builder عنوانًا أسهل تذكرًا ضمن نطاق Teable الخاص بك، أو اجعله متاحًا على نطاق منفصل مثل crm.example.org باستخدام Docker أو Kubernetes.

يحصل كل تطبيق تنشره باستخدام App Builder على عنوان خاص به ضمن نطاق عملية النشر لديك:

```text theme={null}
https://<name>.app.<your-domain>      مثل https://crm.app.teable.example.com
```

هذا العنوان موجود بالفعل على نطاقك الخاص. وهناك طريقتان لتغييره:

| ما تريده | من يتولى ذلك | انتقل إلى |
| - | - | - |
| اسم سهل القراءة، مثل `crm.app.teable.example.com` بدلًا من معرّف عشوائي | أي شخص يمكنه تعديل التطبيق، في محرر التطبيقات | [إعادة تسمية رابط الوصول](#إعادة-تسمية-رابط-الوصول) |
| نطاق منفصل تمامًا، مثل `crm.example.org` | مسؤول الخادم، مرة واحدة لكل نطاق | [إتاحة تطبيق على نطاق منفصل](#إتاحة-تطبيق-على-نطاق-منفصل) |

## إعادة تسمية رابط الوصول

يسري التغيير فورًا، دون الحاجة إلى تغيير DNS أو الشهادات.

1. افتح التطبيق في محرر التطبيقات، وانقر على **نشر**.
2. بجوار **رابط الوصول**، انقر على أيقونة التعديل.
3. اكتب الاسم الجديد (أحرف إنجليزية صغيرة وأرقام وشرطات، على أن يبدأ وينتهي بحرف أو رقم)، ثم انقر على **تأكيد**.

![لوحة النشر لتطبيق منشور: أيقونة التعديل بجوار رابط الوصول، ثم حقل الاسم مع زرّي الإلغاء والتأكيد](https://mintcdn.com/teablecn/FAEy-3WcQRbuxoEA/images/selfhosted/app-domains/2026-11-04-app-domains-rename-access-link.png?fit=max\&auto=format\&n=FAEy-3WcQRbuxoEA\&q=85\&s=a8407c6e6069907f4907b0281959e205)

أصبح التطبيق الآن متاحًا على `https://<new-name>.app.<your-domain>`. وإذا كنت قد غيّرت اسمه من قبل، فسيتوقف الاسم السابق عن العمل، لذا حدّث أي روابط شاركتها.

## إتاحة تطبيق على نطاق منفصل

استخدم هذه الطريقة عندما يلزم أن يكون التطبيق خارج نطاق Teable الخاص بك، مثل بوابة عملاء على `portal.example.org`. يظل الزوار يرون نطاقك في شريط العناوين، ولا تحدث أي إعادة توجيه.

![مسار الطلب: يفتح الزائر portal.example.org، فيوجّهه DNS إلى خادم Teable الخاص بك، ثم يوجّه الخادم الطلب إلى التطبيق المنشور على portal.app.teable.example.com](https://mintcdn.com/teablecn/FAEy-3WcQRbuxoEA/images/selfhosted/app-domains/2026-11-04-app-domains-request-flow.png?fit=max\&auto=format\&n=FAEy-3WcQRbuxoEA\&q=85\&s=866c9092421f5b4cf732efe042babf38)

تحتاج إلى ما يلي:

* إصدار المنصة **v2026.11.5** أو أحدث ([سجل التغييرات](https://github.com/teableio/teable-deployment/blob/main/CHANGELOG.md)). ولكي يعود الزوار إلى هذا النطاق بعد تسجيل الدخول، يلزم أيضًا إصدار Teable بتاريخ 2026-11-05 أو أحدث.
* رابط الوصول الحالي للتطبيق، مثل `portal.app.teable.example.com`.
* صلاحية الوصول إلى إعدادات DNS للنطاق المنفصل.
* صلاحية الوصول إلى الخادم (Docker) أو إلى قيم Helm ‏(Kubernetes) في عملية النشر لديك.

### الخطوة 1: توجيه النطاق إلى عملية النشر لديك

أضف سجل DNS واحدًا للنطاق المنفصل:

| النطاق | السجل |
| - | - |
| نطاق فرعي، مثل `portal.example.org` | سجل `CNAME` يشير إلى رابط الوصول للتطبيق، مثل `portal.app.teable.example.com` |
| نطاق جذر، مثل `example.org` | سجل `A` يشير إلى عنوان IP العام لخادمك (أو لموازن التحميل الخاص بـ Ingress). لا يسمح معظم موفّري DNS بإعداد `CNAME` على النطاق الجذر. |

تحقق من ذلك قبل المتابعة: يجب أن يُرجع الأمر `dig +short portal.example.org` رابط الوصول أو عنوان IP لخادمك.

### الخطوة 2: ربط النطاق بالتطبيق

> [tab] Docker
>
> أضف الربط إلى ملف `.env` في دليل النشر. وإذا أضفت أكثر من ربط، فافصل بينها بفواصل (`,`) دون مسافات:
>
> ```bash .env theme={null}
> APP_CUSTOM_DOMAINS=portal.example.org=portal.app.teable.example.com
> ```
>
> طبّق الإعداد:
>
> ```bash theme={null}
> ./apply.sh server --with-app    # احذف --with-app إذا كنت تشغّل طبقة التشغيل فقط
> docker compose up -d
> ```
>
> تُدار **الشهادات** تلقائيًا:
>
> * إذا كانت شهادتك الخاصة (`TLS_CERT_FILE`) تغطي النطاق بالفعل، فستُستخدم.
> * وإلا فستُطلب شهادة Let's Encrypt وتُجدَّد تلقائيًا. ويتطلب ذلك أن يشير النطاق إلى الخادم، وأن يكون المنفذان 80 و443 قابلين للوصول من الإنترنت.
>
> وفي شبكة إنترانت لا تستقبل اتصالات واردة من الإنترنت، أضف النطاق بدلًا من ذلك إلى الشهادة التي توفّرها في `TLS_CERT_FILE`.

> [tab] Kubernetes
>
> أضف الربط إلى قيم Helm:
>
> ```yaml values.yaml theme={null}
> appRuntime:
>   customDomains:
>     - host: portal.example.org
>       target: portal.app.teable.example.com
> ```
>
> طبّق الإعداد:
>
> ```bash theme={null}
> helm upgrade <release> <chart> -n <namespace> -f values.yaml
> ```
>
> **الشهادات**: يطلب مخطط Helm افتراضيًا من cert-manager شهادة Let's Encrypt عبر HTTP-01، ويتطلب ذلك أن يشير النطاق إلى العنوان العام لوحدة تحكم Ingress. وفي الشبكات الخاصة، أنشئ Secret من نوع TLS للنطاق في مساحة الأسماء (namespace) التي قمت بتثبيت المخطط فيها، ثم أشر إليه:
>
> ```yaml values.yaml theme={null}
> appRuntime:
>   customDomains:
>     - host: portal.example.org
>       target: portal.app.teable.example.com
>       tlsSecretName: portal-example-org-tls
> ```
>
> إذا كان إنهاء TLS يتم عند موازن تحميل أمام مجموعة Kubernetes، فأضف شهادة النطاق هناك بدلًا من ذلك.

### الخطوة 3: التحقق من الإعداد

افتح `https://portal.example.org`. سيُحمَّل التطبيق ويبقى شريط العناوين على `portal.example.org`. ومن الطرفية:

```bash theme={null}
curl -sI https://portal.example.org    # المتوقع 200، دون إعادة توجيه إلى رابط الوصول
```

يظل رابط الوصول الأصلي للتطبيق يعمل. وفي التطبيقات التي تتطلب تسجيل الدخول، يعود الزوار إلى هذا النطاق بعد تسجيل الدخول؛ وإذا كانت عدة نطاقات تشير إلى التطبيق نفسه، فإنهم يعودون إلى النطاق المُدرج أولًا.

### تغيير نطاق أو إزالته

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

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

| المشكلة | السبب المرجح |
| - | - |
| الخطأ `app_runtime_host_not_bound` | رابط الوصول المستخدم في الربط لا يطابق رابط الوصول الحالي للتطبيق (مثلًا بعد إعادة تسميته)، أو أن التطبيق غير منشور. |
| صفحة فارغة أو تحذير بشأن الشهادة | النطاق غير مُضاف إلى الربط أو لم يُطبَّق الإعداد؛ أو أن DNS لا يشير إلى عملية النشر لديك بعد؛ أو أن المنفذ 80 محظور فلا يستطيع Let's Encrypt التحقق من النطاق؛ أو أن شهادتك الخاصة لا تتضمن النطاق. |
| يتعذر على المتصفح العثور على النطاق | سجل DNS مفقود أو لم ينتشر بعد. تحقق منه باستخدام `dig +short <domain>`. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.