nodbox
Для инженеров · серверы в России

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

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

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

console.nodbox.ru/apps/api

api

Деплоится

Веб-приложение · ветка main · nodbox/api

Версия v19 в путиидёт 38 с
ВерсииЗадеплоить
v19a3f19c2Добавить оформление заказа · Мария К.идёт 38 с24 окт.Образ собирается
v187be41d0100% трафикаИсправить расчёт скидки · Мария К.1 мин 4 с24 окт.Работает
v17c90a2e5Обновить зависимости · Илья П.58 с23 окт.Отработала
v1641d8e07Кэш каталога на минуту · Илья П.1 мин 12 с22 окт.Отработала
Логи сборки

14:02:07nodboxИсходники развёрнуты: файлов - 214, байт - 1 873 402.

14:02:09nodboxПлан сборки составлен. Провайдеры: node. Рантаймы: node 22.

14:02:11buildnpm ci

14:02:34buildadded 312 packages in 22s

14:02:35buildnpm run build

01Деплой

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

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

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

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

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

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

Сборка
package.jsonNode.js
pyproject.tomlPython
go.modGo

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

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

Следить за путямиservices/api
v19a3f19c2a3f19c2services/api/orders.goДеплоитсябез версии
9b2e71dweb/index.tsxбез версии

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

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

Версии
v19ждёт ответа на /healthzДеплоится
v18100% трафикаРаботает

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

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

apiРаботаетv19, 100% трафика
Версия v20 не доехалаСборка не прошла: проверь, что проект собирается локально.

14:10:02buildnpm ci

14:10:31buildnpm run build

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

14:10:45nodboxСборка не удалась: приложение не собралось. Причина - в строках выше.

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

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

Домены
api-7f3a2c.nodbox.appРаботает по HTTPS
api.example.ru
CNAMEapiapi-7f3a2c.nodbox.app

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

Управляемые PostgreSQL, MySQL и Valkey (совместим с Redis) поднимаются во внутренней сети проекта. Строку подключения база отдаёт сама, а в приложение её кладёшь ты, секретом под своим именем. PostgreSQL и MySQL можно открыть и для подключения из интернета. Воркеры работают постоянно, а не только по запросу.

Проект shop
apiВеб-приложениеРаботает
workerВоркер, работает постоянноРаботает
pg-mainPostgreSQLОткрыта интернету
shop-dbMySQLТолько внутри проекта
cacheValkeyТолько внутри проекта
Секреты api
DATABASE_URLЗначение скрыто
REDIS_URLЗначение скрыто
02Эксплуатация

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

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

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

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

Логи приложения

14:05:02v18GET /orders 200 - 44 мс

14:05:09v18GET /catalog 200 - 26 мс

14:05:14v18POST /cart 201 - 61 мс

14:05:21v18GET /catalog 200 - 24 мс

14:05:26v18POST /cart 201 - 57 мс

14:05:33v18GET /catalog?page=2 200 - 31 мс

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

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

14:05:44v19GET /catalog 200 - 19 мс

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

14:06:01v19POST /cart 201 - 49 мс

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

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

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

14:06:15v19POST /checkout 200 - 212 мс

Метрики - в процентах от размера.

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

Запросы

48,2тыс.

за сутки

Память

61%

из 512 МБ на экземпляр

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

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

События
24 октября
23:41Приложение уснуло: экземпляры остановленысон настроен на 15 мин без запросов
23:18Трафик вернулся на версию v18
23:15Приложение упало: процесс не держится запущеннымверсия v19
23:02Версия v19 выкачена и получила весь трафик
22:59Заказан деплой версии v19

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

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

Версии
v19100% трафикасегодняРаботает
v18100% трафикавчераРаботает
v17100% трафика3 дня назадРаботает
03Масштаб

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

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

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

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

Экземпляры

4из 10

312 одновременных запросов

Запросов на экземпляр
100
Максимум экземпляров
10
Экземпляры по часам за сутки

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

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

Пробуждение

1,25с

из полного нуля до первого байта

СпитРаботает

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

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

Засыпать без запросов
Максимум экземпляров1
380 ₽/месСон выключен, экземпляр один.

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

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

Eco или High

Уровни отличаются гарантией процессора, а не цифрами размера.

Процессор приложения во времениHighEco
все нагруженысхема
время →
Ecoот 190 ₽/месСейчас
Процессор
Общий с другими приложениями (shared vCPU)
Под нагрузкой
Процессор делится поровну: когда нагружены все, доля каждого приложения уменьшается
Время ответа
Может плавать
Цена
Ниже при тех же цифрах
Подходит
Бот, пет-проект, витрина с редкими заходами
Highот 590 ₽/месСейчас
Процессор
Ядро закреплено за приложением (dedicated vCPU)
Под нагрузкой
Доля гарантирована - чужая нагрузка на неё не влияет
Время ответа
Ровное
Цена
Выше при тех же цифрах
Подходит
Продакшн, оплата, API под нагрузкой
04Изоляция

Чужой код до твоего приложения не дотянется

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

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

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

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

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

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

Что агенту разрешенозапечатывается в токене
$ nodbox mcp add --project shop

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

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

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

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

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

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

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

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

Участники
lead@team.devВладелец
dev@team.dev
pm@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Вопросы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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