# nodbox для инженеров

nodbox - платформа для приложений, которую не нужно администрировать. Она собирает приложение из репозитория, архива или готового образа, выдаёт адрес с HTTPS и держит его в работе: добавляет экземпляры под нагрузку и усыпляет без неё. Логи, метрики, версии и откат доступны в панели и по API, без SSH. Серверы в России, оплата в рублях.

Платформа в раннем доступе, доступность не заявлена. Заявка и регистрация - https://console.nodbox.ru/

## Деплой

- Источники кода: репозиторий GitHub, GitLab или Bitbucket, zip-архив с папкой проекта, готовый образ, в том числе из своего реестра. Для образа сборка пропускается
- Язык, зависимости и команду запуска платформа определяет по содержимому папки. На реальных приложениях проверены Node.js, Python и Go
- Push в выбранную ветку заводит новую версию. Автодеплой выключается. В монорепозитории версия выезжает, только если менялись файлы в указанных папках
- Трафик идёт только на версию, которая ответила на пути проверки готовности. Не ответила за 5 минут - версия помечается неудачной, прежняя продолжает работать
- Лог сборки идёт живым потоком. Сборка ограничена 8 минутами, деплой целиком - 35 минутами. Идущий деплой можно отменить
- Адрес на домене платформы с HTTPS выдаётся при создании. Свой домен привязывается отдельно: платформа проверяет записи, выпускает сертификат и продлевает его сама
- Протокол - HTTP/1.1 или HTTP/2, таймаут запроса - 5 минут по умолчанию, до 10
- Управляемые PostgreSQL и Redis поднимаются во внутренней сети проекта, строка подключения подставляется в переменные. Фоновые обработчики - воркеры и боты - работают постоянно

## Эксплуатация

- Логи приложения хранятся 7 дней, их видно по конкретной версии, те же строки отдаются по API
- Метрики: запросы за сутки, медиана ответа, процессор и память в процентах от купленного размера, перезапуски. Снимок каждые 30 секунд, график за 24 часа с шагом в час
- Состояния: работает, спит, деплой, упало, остановлено. Платформа проверяет состояние сама раз в минуту
- Лента событий хранится 30 дней: заказан деплой, выкатилось, упало, отменено, остановлено, откачено, уснуло, проснулось
- Откат на одну из трёх последних выкаченных версий возвращает тот же образ, переменные и размер

## Масштаб и сон

- Новый экземпляр добавляется по числу одновременных запросов: порог 100 по умолчанию, настраивается до 1 000. Потолок - 10 экземпляров на приложение
- Без запросов приложение засыпает через 15 минут, пауза настраивается до часа. Минуты сна не тарифицируются
- Пробуждение из полного нуля - 1,25 секунды до первого байта, замер на реальном приложении
- Сон выключается, тогда приложение работает и тарифицируется круглосуточно
- Размер меняется в любой момент, приложение переедет за один деплой

## Изоляция

- Код приложения выполняется в усиленной песочнице и считается недоверенным
- У каждого проекта свой отсек со своими сетевыми правилами и лимитами, приложения разных проектов друг друга не видят
- Входящая сеть закрыта: снаружи приложение доступно только по своему адресу, базы - только из внутренней сети проекта
- Секреты хранятся зашифрованными и после сохранения не показываются ни в панели, ни по API
- Аккаунт закрывается вторым фактором или passkey, из терминала вход идёт по коду и подтверждается в браузере
- Платёжные данные вводятся на стороне ЮKassa и через платформу не проходят

## API и доступ

- Всё, что есть в панели, есть в API
- Права токена независимы: читать, деплоить, менять мощность, удалять. Удалять у токена выключено, пока его не включить. Права проверяет платформа, а не клиент
- Токен живёт 60 суток, виден списком с отметкой последнего использования и отзывается одним действием
- Повторный запрос после обрыва связи не заводит второе приложение и вторую сборку
- Роли в проекте: владелец, разработчик - деплоит без доступа к деньгам и участникам, наблюдатель - только смотрит. Ссылка-приглашение живёт 7 дней
- nodbox подключается к редактору как MCP-сервер: агент заказывает деплой, читает логи и делает откат в пределах прав своего токена

## Цены

| Размер | Процессор | Память | Месяц без сна |
| --- | --- | --- | --- |
| Eco 256 | 0,25 ядра | 256 МБ | 190 ₽ |
| Eco 512 | 0,5 ядра | 512 МБ | 380 ₽ |
| Eco 1024 | 1 ядро | 1 ГБ | 760 ₽ |
| High 256 | 0,25 ядра | 256 МБ | 590 ₽ |
| High 512 | 0,5 ядра | 512 МБ | 1 190 ₽ |
| High 1024 | 1 ядро | 1 ГБ | 2 380 ₽ |

Размер в Eco и High один и тот же: в Eco процессор делится с соседями, в High закреплён за приложением.

- Платишь за размер по минутам работы. Минуты сна, остановки и падения не считаются
- Не тарифицируются сборки, входящий и исходящий трафик, логи, метрики, адрес платформы и операции
- Если приложение не поднялось, счёт за него не выставляется
- Списание каждые 5 минут, расчётный месяц - 30 суток
- Новое приложение не заказывается, если баланса не хватит на неделю его работы
- Пополнение от 100 ₽ до 300 000 ₽ за раз через ЮKassa, есть автопополнение и закрывающие документы для юрлиц
- Когда баланс уходит в ноль, приложения останавливаются и хранятся 7 суток. Письма приходят за 3 суток до нуля и за 24 часа до удаления. После пополнения приложение запускается одним действием

## Лимиты

| Лимит | Значение |
| --- | --- |
| Проектов на аккаунт | 3, настраивается индивидуально |
| Приложений в проекте | 10 |
| Экземпляров в проекте | 12, сумма по всем приложениям |
| Процессора в проекте | 6 ядер |
| Памяти в проекте | 6 ГБ |
| Подключённых git-аккаунтов | 5 |
| Экземпляров на приложение | до 10, по умолчанию 1 |
| Порог одновременных запросов на экземпляр | 100, до 1 000 |
| Таймаут запроса | 5 минут, до 10 |
| Пауза до сна | 15 минут, до часа |
| Версий для отката | 3 |
| Сборка | 8 минут |
| Деплой целиком | 35 минут |
| Ответ на проверку готовности | 5 минут |
| Архив | 100 МБ, распакованный проект до 1 ГБ |
| Файлов в архиве | 20 000 |
| Ссылка на загрузку | 15 минут |
| Собранное приложение | 2 ГБ |
| Чтение через API | 1 200 запросов в минуту |
| Изменение через API | 60 запросов в минуту |
| Жизнь токена | 60 суток |
| Ссылка-приглашение | 7 дней |
| Логи приложения | 7 дней |
| Лента событий | 30 дней |
| Метрики | 24 часа |

Спящее приложение занимает место в лимитах проекта: ему нужно куда-то проснуться.

## Границы

- Постоянного диска нет: файлы, записанные приложением, между перезапусками не сохраняются
- Нет задач по расписанию
- Нет разделения трафика долями: откат делается целиком
- Регион один, выбрать площадку нельзя
- Полного доступа к машине нет: приложение работает в песочнице
- Доступность не заявлена: платформа в раннем доступе
- Цифру в запросах в секунду для размеров не публикуем: она зависит от приложения сильнее, чем от размера

## Ссылки

- Страница: https://nodbox.ru/
- Для вайбкодеров: https://nodbox.ru/agents/
- Карта продукта для моделей: https://nodbox.ru/llms.txt
