> ## 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` замість випадкового ID | Будь-хто, хто може редагувати застосунок, — у редакторі застосунків | [Перейменування посилання доступу](#перейменування-посилання-доступу) |
| Повністю окремий домен, наприклад `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 values (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 values:
>
> ```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
> ```
>
> **Сертифікати**: за замовчуванням чарт запитує в cert-manager сертифікат Let's Encrypt через HTTP-01; для цього домен має вказувати на публічну адресу вашого контролера Ingress. У приватній мережі створіть для домену TLS-секрет у просторі імен, куди встановлено чарт, і вкажіть його:
>
> ```yaml values.yaml theme={null}
> appRuntime:
>   customDomains:
>     - host: portal.example.org
>       target: portal.app.teable.example.com
>       tlsSecretName: portal-example-org-tls
> ```
>
> Якщо TLS завершується на балансувальнику навантаження перед кластером, натомість додайте сертифікат домену на балансувальник.

### Крок 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.