Приложения
Платформа приложений разворачивает веб-приложения прямо из 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"}'
Смена сети, как и в панели, пересоздаёт инстансы приложения — поле не применяется «тихо», одной записью в базу.