Перейти к основному содержимому

Приложения

Платформа приложений разворачивает веб-приложения прямо из Git-репозитория — по модели Vercel/Netlify. Каждый push в выбранную ветку автоматически собирает и публикует новую версию.

:::tip Нет готового кода? Сайт можно не писать самому: конструктор T1000 собирает приложение по описанию словами и публикует его на этой же платформе. :::

Подключение репозитория

Поддерживаются провайдеры GitHub, GitLab и Gitea (git.tatnet.ru). Подключите репозиторий, выберите ветку — и платформа будет реагировать на push'и через веб-хуки.

Сборка

Сборка запускается автоматически и поддерживает популярные стеки: Next.js, статические сайты, Go и другие. Логи сборки доступны в реальном времени, а статус деплоя приходит через SSE.

Домены и HTTPS

  • Каждое приложение получает поддомен *.tatnet.app.
  • Можно подключить свой домен:
    • если он в управляемой зоне аккаунта — A-запись создаётся автоматически;
    • для внешнего домена платформа покажет, какую запись прописать.
  • TLS-сертификат выпускается автоматически (см. TLS-сертификаты).

Приватная сеть (VPC)

Приложение можно подключить к приватной сети аккаунта — тогда оно ходит к остальным ресурсам этой сети по приватным адресам. Сеть выбирается при создании приложения и меняется в любой момент в настройках приложения (карточка «VPC сеть»); значение «Без VPC» отключает приложение от приватной сети и возвращает его в общий пул.

:::caution Смена сети заменяет реплики Работающая реплика остаётся в той сети, в которой была создана, поэтому при смене платформа пересоздаёт инстансы приложения в новой сети — возможен короткий перерыв. При стратегии rolling реплики заменяются по одной, и несколько минут часть из них ещё работает в старой сети, видя старый набор ресурсов. Если такое промежуточное состояние недопустимо, переключите стратегию на recreate перед сменой сети. :::

Подключить можно только сеть того же региона, в котором работает приложение: регион задаётся при создании и не меняется, а в чужом регионе у приложения нет сетевого порта. В панели список сетей уже отфильтрован по региону приложения, через API сеть другого региона отклоняется с ошибкой 400.

Переменные окружения

Переменные окружения (включая секреты) задаются в панели и доступны приложению во время сборки и выполнения.

Конфигурация маршрутизации

Файл vercel.json (или tatnet.json) в репозитории описывает headers, redirects и rewrites — они компилируются при сборке и применяются на edge.

:::caution CORS Модель CORS — строгая, как у Vercel: если в конфигурации нет правил CORS, заголовки Access-Control-Allow-Origin не добавляются. Задавайте CORS явно в vercel.json. :::

Масштабирование

По умолчанию деплой выполняется по стратегии rolling. Для приложений с постоянной доступностью держите не менее одной реплики — иначе при простое приложение масштабируется до нуля и первый запрос ждёт cold start.

Проба готовности

Некоторые приложения открывают сетевой порт раньше, чем действительно готовы обслуживать запросы, — например, пока прогревается кэш, применяются миграции или идёт JIT-компиляция. Без пробы готовности платформа считает реплику готовой сразу после открытия порта и может направить на неё трафик слишком рано — тогда первые запросы после деплоя или cold start отдают 502/503/504.

Чтобы этого избежать, задайте путь пробы готовности (readiness_path) — например /healthz. Тогда после старта реплики платформа опрашивает GET http://<реплика>:<порт><readiness_path> и включает реплику в обслуживание только после ответа со статусом 2xx или 3xx. Пока путь отвечает иначе (или недоступен), реплика не получает трафик; если готовности нет по истечении таймаута, деплой этой реплики считается неуспешным.

  • Поле опциональное. Если оставить его пустым, поведение прежнее: реплика считается готовой сразу после открытия порта.
  • Проверка выполняется изнутри микро-VM (127.0.0.1), поэтому эндпоинт готовности не обязан быть публичным.
  • Задавайте лёгкий эндпоинт: он опрашивается на каждой итерации при старте.

Настраивается в разделе Deployment настроек приложения или через API (поле readiness_path в создании/обновлении приложения).

API

Публичный REST API (https://api.min.tatnet.ru/v1, заголовок Authorization: Bearer <tn_live_…>):

МетодПутьДействие
GET/v1/projects/{project_id}/appsсписок приложений проекта
POST/v1/projects/{project_id}/appsсоздать приложение (в т.ч. readiness_path)
GET/v1/projects/{project_id}/apps/{id}получить приложение
PATCH/v1/projects/{project_id}/apps/{id}масштабирование, ресурсы и сеть: replica_count, replica_vcpu, replica_memory_mb, readiness_path, vpc_id, name — каждое поле опционально
POST/v1/projects/{project_id}/apps/{id}/deployзапустить сборку и деплой
DELETE/v1/projects/{project_id}/apps/{id}удалить приложение
GET/v1/projects/{project_id}/apps/{id}/buildsсписок сборок
GET/v1/projects/{project_id}/apps/{id}/envсписок переменных окружения (секреты маскируются)
POST/v1/projects/{project_id}/apps/{id}/envсоздать или обновить переменную (name, value, is_secret) — существующее имя обновляется на месте
DELETE/v1/projects/{project_id}/apps/{id}/env/{env_var_id}удалить переменную
GET/v1/projects/{project_id}/apps/{id}/domainsсписок доменов
POST/v1/projects/{project_id}/apps/{id}/domainsдобавить кастомный домен
DELETE/v1/projects/{project_id}/apps/{id}/domains/{domain_id}удалить домен

Изменение ресурсов реплики применяется сразу — деплойер прокатывает работающие реплики на новый размер (rolling). Изменение переменной окружения также автоматически перезапускает реплики.

Пример — поднять реплику до 4 vCPU / 6 ГБ:

curl -X PATCH "https://api.min.tatnet.ru/v1/projects/{project_id}/apps/{id}" \
-H "Authorization: Bearer $TATNET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"replica_vcpu": 4, "replica_memory_mb": 6144}'

Пример — задать пробу готовности (пустая строка снимает её):

curl -X PATCH "https://api.min.tatnet.ru/v1/projects/{project_id}/apps/{id}" \
-H "Authorization: Bearer $TATNET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"readiness_path": "/healthz"}'

Пример — подключить приложение к приватной сети; null отключает его от сети:

curl -X PATCH "https://api.min.tatnet.ru/v1/projects/{project_id}/apps/{id}" \
-H "Authorization: Bearer $TATNET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"vpc_id": "8a2fd6c4-ee02-4441-beb6-74e500aefbca"}'

Смена сети, как и в панели, пересоздаёт инстансы приложения — поле не применяется «тихо», одной записью в базу.