> ## 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

> Дайте приложению, созданному в Конструкторе приложений, более удобный адрес в вашем домене Teable или настройте для него отдельный домен, например crm.example.org, в Docker или Kubernetes.

Каждое приложение, которое вы публикуете в Конструкторе приложений, получает собственный адрес в домене вашего развёртывания:

```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.