nnodboxДокументация
Для инженеров · серверы в России

Платформа для приложений,
которую не нужно администрировать

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

Платформа в раннем доступе, доступность пока не заявляем.

console.nodbox.ru/apps/api/revisions
Версия v19Go · ветка main · push 1 минуту назад деплой
  1. Забираем код
  2. Собираем образ
  3. Работает

14:02:01Забираем код: ветка main, коммит a3f19c2

14:02:03Стек определён: Go, зависимости по go.mod

14:02:41Образ собран за 38 с

14:02:44Ждём ответа на пути проверки готовности

14:02:46Приложение ответило, трафик идёт на v19

api-7f3a2c.nodbox.appадрес выдан при создании приложения HTTPS
01Деплой

От push до адреса с HTTPS без единого конфига

Платформа сама определяет язык, зависимости и команду запуска, собирает образ и пускает трафик только на ответившую версию. Dockerfile, манифесты и описание сборки писать не нужно.

Код приходит так, как он у тебя уже лежит.

Репозиторий GitHub, GitLab или Bitbucket, zip-архив с папкой проекта или готовый образ, в том числе из своего реестра. Для образа сборка пропускается.

github.com/team/api ветка main push заводит версию
api.zip до 100 МБ, распакованный до 1 ГБзагрузка в панели
registry.team.dev/api:1.4 готовый образсборка пропускается

Сборку платформа определяет сама.

Язык, зависимости и команду запуска - по содержимому папки. На реальных приложениях проверены Node.js, Python и Go.

package.jsonNode.js
pyproject.tomlPython
go.modGo

Push в ветку заводит новую версию.

Автодеплой выключается. В монорепозитории версия выезжает, только если менялись файлы в указанных папках.

следим за services/api
a3f19c2 services/api/orders.go v19
9b2e71d web/index.tsxпропущено

Трафик идёт только на ответившую версию.

Платформа ждёт ответа на пути проверки готовности. Не ответило за 5 минут - версия помечается неудачной, а прежняя продолжает работать.

v19 ждёт ответа на /healthzпроверка
v18 принимает трафикработает

Упавшая сборка ничего не ломает.

Лог идёт живым потоком и показывает строку, на которой всё сломалось. Сборка ограничена 8 минутами, идущий деплой можно отменить.

14:10:02npm ci

14:10:31npm run build

14:10:44Error: Cannot find module ./config

14:10:44Сборка v20 не прошла, работает v19

Адрес с HTTPS появляется при создании.

Свой домен привязывается отдельно: платформа проверяет записи, выпускает сертификат и продлевает его сама. Протокол - HTTP/1.1 или HTTP/2.

api-7f3a2c.nodbox.app HTTPS
api.example.ruпроверка записей

Базы и фоновые обработчики живут рядом с приложением.

Управляемые PostgreSQL и Redis поднимаются во внутренней сети проекта, строка подключения подставляется в переменные сама. Воркеры и боты работают постоянно, а не только по запросу.

api DATABASE_URL подставлен
worker фоновый обработчик
PostgreSQL внутренняя сеть
Redis внутренняя сеть
02Эксплуатация

Всё для разбора падения видно без SSH

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

Логи приложения хранятся 7 дней.

Их видно по конкретной версии, лента листается в обе стороны, а те же строки отдаются по API.

14:06:12v19GET /orders 200 - 38 мс

14:06:09v19Медленный запрос к базе: 480 мс

14:06:04v19POST /checkout 502 - платёжный шлюз не ответил

14:05:57v19Экземпляр 2 принял трафик

14:05:40v19Приложение ответило на проверку готовности

14:05:38v18GET /orders 200 - 41 мс

Метрики - в процентах от купленного.

Запросы за сутки, медиана ответа, процессор, память и перезапуски. Снимок каждые 30 секунд, график за 24 часа.

Запросы за сутки48,2 тыс.
Процессор38%
Память61%

Падение платформа замечает сама.

Состояние проверяется раз в минуту и обновляется в панели без перезагрузки страницы.

работаетспитдеплойупалоостановлено

Лента событий за 30 дней.

Что происходило с приложением, пока никто не смотрел: деплой, падение, откат, сон и пробуждение.

  1. проснулось
  2. уснуло
  3. откачено на v18
  4. упало
  5. выкатилось v19

Откат возвращает ровно то, что работало.

Тот же образ, переменные и размер. Доступны три последние выкаченные версии.

v19 12 минут назадсейчас
v18 вчеравернуть
v17 3 дня назадвернуть
03Масштаб

Экземпляры добавляются под нагрузку и уходят в ноль без неё

Порог задаётся числом одновременных запросов, потолок - десять экземпляров на приложение. Пока приложение спит, его минуты не тарифицируются, а первый запрос будит его за 1,25 секунды.

Экземпляры добавляются по одновременным запросам.

Порог на экземпляр по умолчанию - 100 запросов, настраивается до 1 000. Потолок - 10 экземпляров на приложение, а ночью без запросов - ноль.

Экземпляры по часам за сутки
Сейчас 312 одновременных запросов4 из 10

Пробуждение - 1,25 секунды.

Столько проходит из полного нуля до первого байта, замер на реальном приложении. Засыпает приложение через 15 минут без запросов, паузу можно растянуть до часа.

1,25 спервый запроспервый байт

Сон выключается одной настройкой.

Тогда приложение работает круглосуточно и тарифицируется всё время - для того, что должно отвечать без паузы.

Сон без нагрузки
Таймаут запроса5 минут
Порог на экземпляр100

Размер меняется без пересоздания.

Шесть размеров от 0,25 до 1 ядра, приложение переедет за один деплой. В Eco процессор делится с соседями, в High закреплён за приложением.

Eco256 МБ0,25 ядра · 190 ₽512 МБ0,5 ядра · 380 ₽1 ГБ1 ядро · 760 ₽High256 МБ0,25 ядра · 590 ₽512 МБ0,5 ядра · 1 190 ₽1 ГБ1 ядро · 2 380 ₽
04Изоляция

Код приложения считается недоверенным с первого дня

Изоляция - исходное требование к платформе, а не надстройка сверху. Каждый проект живёт в своём отсеке, а наружу приложение смотрит только своим адресом.

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

Всё, что есть в панели, есть в API

CI и агент получают токен с нужными правами, а проверяет права платформа: выключенное действие не выполнится, даже если клиент его попробует.

Права токена выдаются по отдельности.

Читать, деплоить, менять мощность и удалять - четыре независимых переключателя. Токен живёт 60 суток, виден списком с отметкой последнего использования и отзывается одним действием.

ci-deployиспользован 2 минуты назад
читатьприложения, логи, метрики, счёт
деплоитьновая версия и откат
менять мощностьсмена размера
удалятьприложение вместе с версиями

Вход из терминала - по коду.

Пароль в терминал не вводится: утилита показывает код, а вход подтверждается в браузере.

$ nodbox login
Подтверди вход в браузере, код KQWM-7TRD
Вход подтверждён

Повтор после обрыва не создаёт дубль.

Если связь оборвалась посреди заказа, повторный запрос не заведёт второе приложение и вторую сборку.

Заказ версии, ветка main v19
Тот же запрос после обрывата же v19

Роли в проекте.

Владелец отвечает за всё, разработчик деплоит без доступа к деньгам и участникам, наблюдатель только смотрит. Ссылка-приглашение живёт 7 дней.

LElead@team.devвладелец
DEdev@team.devразработчик
PMpm@team.devнаблюдатель

Агент в редакторе - в тех же правах.

nodbox подключается к редактору как MCP-сервер, то есть набор инструментов, которые агент вызывает сам. Агент заказывает деплой, читает логи и делает откат, но только то, что разрешает его токен.

Claude CodeCursorWindsurfVS CodeClineZed
06Цены

Счёт засыпает вместе с приложением

Платишь за размер приложения по минутам работы. Минуты сна, остановки и падения не считаются, а сборки, трафик, логи и метрики не тарифицируются вовсе.

Сколько стоит приложение, которое спит

Процессор
Память
95 ₽за 30 суток. Eco 512 круглосуточно - 380 ₽

Один экземпляр: цена размера, умноженная на долю суток без сна. Округлено до рубля.

Шесть размеров

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

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

Что не тарифицируется

Сборки, входящий и исходящий трафик, логи, метрики, адрес платформы и сами операции. Платишь только за приложение.

Не поднялось - не платишь

Счёт начинается, когда платформа подтвердила, что версия выкачена и отвечает. Сбой запуска клиент не оплачивает.

Три барьера от неожиданного счёта

Новое приложение не заказывается, если баланса не хватит на неделю его работы. Лимиты проекта ограничивают ёмкость. Удаление спрашивает подтверждение.

Если баланс ушёл в ноль

Пополнение от 100 ₽ до 300 000 ₽ за раз через ЮKassa, есть автопополнение и закрывающие документы для юрлиц.

  1. за 3 суток

    Письмо с датой, когда закончится баланс, - по фактическому расходу, а не по календарю.

  2. баланс в нуле

    Приложения останавливаются, новые не заказываются. Код, настройки и версии на месте.

  3. 7 суток

    Приложения сохранены. Пополнил - заказ снова открыт, запуск одним действием.

  4. за 24 часа

    Второе письмо: ресурсы проекта будут удалены завтра.

  5. отсрочка истекла

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

07Лимиты

Лимиты цифрами, до того как в них упрёшься

Лимиты проекта защищают от неожиданного счёта и от соседа, который занял бы всю площадку. Ниже - всё, во что можно упереться, и то, чего на платформе нет.

Проект

Проектов на аккаунт
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запросов в минуту
Изменение
60запросов в минуту
Жизнь токена
60 суток
Ссылка-приглашение
7 дней

Хранение

Логи приложения
7 дней
Лента событий
30 дней
Метрики
24 часаснимок каждые 30 секунд

Границы платформы

На платформе нет:

  • постоянного диска: файлы, записанные приложением, между перезапусками не сохраняются
  • задач по расписанию
  • разделения трафика долями: откат делается целиком, одним действием
  • выбора региона: площадка одна
  • полного доступа к машине: приложение работает в песочнице
  • заявленной доступности: платформа в раннем доступе
08Вопросы

Вопросы и прямые ответы

Все ответы открыты: раскрывающиеся списки прячут содержание и от человека, и от поисковика.

Чем это отличается от VPS с Docker Compose?

На VPS контейнеры, обратный прокси, сертификаты, автозапуск и мониторинг - твоя работа, а машина стоит денег и тогда, когда простаивает. Здесь это делает платформа, а спящее приложение стоит ноль. Цена этого - полного доступа к машине нет: приложение работает в песочнице.

Как платформа понимает, как собрать приложение?

По содержимому папки: язык, зависимости и команду запуска она определяет сама. На реальных приложениях проверены Node.js, Python и Go. Если образ уже собран, сборка пропускается и платформа только запускает его, в том числе из твоего реестра.

Куда писать файлы и где хранить данные?

Постоянного диска у приложения нет: файлы между перезапусками не сохраняются. Данные держат управляемые PostgreSQL и Redis во внутренней сети проекта или твоё собственное хранилище.

Сколько запросов держит один размер?

Цифру в запросах в секунду не называем: она зависит от приложения сильнее, чем от размера, а непроверенное число хуже, чем никакого. Управляешь порогом: новый экземпляр добавляется, когда одновременных запросов на экземпляр больше 100, порог настраивается до 1 000, потолок - десять экземпляров на приложение.

Почему спящее приложение занимает лимиты проекта?

Спящему приложению нужно куда-то проснуться, поэтому его место в лимитах проекта сохраняется и во сне. Денег оно при этом не стоит: тарифицируются только минуты работы.

Что будет, если деплой завис?

Сборка длится не больше 8 минут, деплой целиком - не больше 35. Если приложение не ответило на проверку готовности за 5 минут, версия помечается неудачной с причиной отказа. Идущий деплой можно отменить, а работающая версия всё это время отвечает.

Как отдать деплой CI и не дать ему удалить приложение?

Выпусти для CI токен с правами «читать» и «деплоить». Право «удалять» у токена выключено, пока его не включить, а проверяет права платформа: выключенное действие не выполнится, даже если скрипт его попробует. Токен живёт 60 суток и отзывается одним действием.

Какую доступность гарантирует платформа?

Доступность мы пока не заявляем: платформа в раннем доступе. Если что-то сломается, чинить будем быстро, но сломаться может. Что сделано, чтобы сбой не задел работающее, - на этой странице: проверка готовности, откат, изоляция проектов.

Где работают приложения?

На серверах в России, площадка одна: выбрать регион нельзя. Оплата в рублях через ЮKassa, интерфейс и ошибки на русском.

Можно ли уйти с платформы?

Код твой: репозиторий как был, так и есть, и приложение собирается из него обычным способом. Ни проприетарного формата, ни переписывания кода при переезде.

Код уже в репозитории.
Осталось подключить.

Места открываем постепенно: оставь заявку - напишем, когда подойдёт очередь.

Для вайбкодеров ·Блог ·Эта страница в markdown