Сайты и приложения
Как выложить приложение на Bun в интернет
Коротко
Приложение на Bun выкладывают так же, как обычный проект на JavaScript, с одной оговоркой: рядом с package.json стоит оставить файл блокировки bun.lockb или bun.lock — по нему платформа понимает, что зависимости нужно ставить и запускать через Bun, а не через Node. Сервер должен слушать порт из переменной окружения PORT и адрес 0.0.0.0: в Bun.serve порт передают полем port. Дальше код загружают ZIP-архивом или импортом из GitHub, а Netrun ставит зависимости, запускает проект и выдаёт публичную ссылку с HTTPS.
Обычно, чтобы выложить приложение на Bun в интернет, приходится арендовать сервер, поставить на него сам Bun (в системных репозиториях его чаще всего нет, ставится отдельной командой), запустить процесс так, чтобы он поднимался после перезагрузки, поставить перед ним прокси и получить сертификат. Площадок, которые понимают Bun сразу, меньше, чем под Node, поэтому многие инструкции сводятся к ручной сборке на своём сервере.
В Netrun эта часть исчезает: вы загружаете папку с кодом, платформа видит файл блокировки Bun рядом с package.json, ставит зависимости, запускает проект и выдаёт публичную ссылку с HTTPS. Ни сервера, ни прокси, ни ручного сертификата. Ниже — что проверить в проекте, чтобы первая же публикация закончилась рабочей ссылкой.
Положите bun.lockb рядом с package.json#
Файл блокировки Bun — bun.lockb в старых версиях или текстовый bun.lock в новых — это главный сигнал, что проект нужно ставить и запускать именно на Bun. Если такого файла нет, сгодится и упоминание Bun в самом package.json: команда запуска, которая начинается с bun, или поле engines с указанным bun. Когда нет ни того ни другого, проект уедет как обычный Node-проект на npm, поэтому проще один раз выполнить bun install у себя и положить получившийся файл рядом с кодом.
Оставьте одну понятную команду запуска#
В package.json пропишите поле start в разделе scripts — например, bun run index.ts или bun run src/server.ts. Одна команда вместо трёх вариантов запуска избавляет от вопроса, что именно считать точкой входа. Если проект заодно поднимается и на Node, это не проблема: важно, чтобы стартовая команда была одна и очевидная.
Читайте порт из переменной окружения#
Веб-сервер должен слушать порт из переменной окружения PORT и адрес 0.0.0.0, а не 127.0.0.1. В Bun.serve порт передают полем port, туда же кладут hostname со значением 0.0.0.0. Захардкоженный в коде порт — причина номер один, почему ссылка отдаёт пустоту: приложение слушает не там, где его ждут.
Проверьте свой фреймворк#
Работают и Elysia, и Hono, и просто Bun.serve без фреймворка — платформе важен не фреймворк, а то, что приложение слушает нужный порт. У Elysia порт задаётся в вызове listen, у Hono экспортируется объект с полями fetch и port. В обоих случаях значение берите из PORT, а не из константы.
Уберите node_modules из архива#
Папку node_modules и готовую сборку в архив класть не нужно: зависимости ставятся при публикации по package.json и файлу блокировки. Так архив весит меньше, а версии пакетов совпадают с теми, что вы зафиксировали. Ключи, токены и строку подключения к базе тоже не кладите в код — их спросят при настройке проекта и подставят в переменные окружения в зашифрованном виде.
Загрузите код и заберите ссылку#
Принесите проект ZIP-архивом или импортом из GitHub, в том числе из приватного репозитория. Netrun поставит зависимости, запустит приложение на Bun и выдаст публичный адрес с HTTPS. Логи и статус публикации видны в кабинете в реальном времени, поэтому ошибку при старте видно сразу, а не по молчащей странице.
В итоге приложение на Bun открывается по обычной ссылке, которую можно отправить кому угодно, без аренды сервера и настройки сертификата. На бесплатном тарифе сайт засыпает при простое и просыпается сам, когда кто-то открывает ссылку: первый заход после паузы чуть медленнее. Если сервис должен отвечать без задержек круглосуточно, подойдёт тариф Pro. Попробовать Netrun.
Частые вопросы
Как платформа понимает, что проект надо запускать на Bun, а не на Node?
По файлу блокировки: bun.lockb или bun.lock рядом с package.json означает, что зависимости ставятся и приложение запускается через Bun. Если файла блокировки нет, засчитывается упоминание Bun в самом package.json — команда запуска, начинающаяся с bun, или поле engines. Когда нет ни одного из этих признаков, проект считается обычным Node-проектом. Выбирать язык вручную в кабинете не нужно ни в одном из случаев.
Что делать, если bun.lockb нет в проекте?
Выполните bun install у себя на компьютере один раз и положите появившийся файл блокировки рядом с package.json. Он же фиксирует версии пакетов, поэтому сборка на сервере получится такой же, как у вас. Если запустить bun install негде, укажите Bun прямо в package.json: команда запуска вида bun run index.ts тоже считается сигналом. Без обоих признаков проект соберётся на npm и запустится как Node-приложение.
Работают ли Elysia и Hono?
Да, оба фреймворка работают, как и приложение на голом Bun.serve. Единственное требование одинаково для всех: слушать порт из переменной окружения PORT и адрес 0.0.0.0. Никаких особых настроек под конкретный фреймворк не нужно.
Почему ссылка на приложение не открывается?
Чаще всего порт прописан в коде числом или сервер слушает 127.0.0.1 вместо 0.0.0.0 — снаружи в него никто не попадёт. Вторая по частоте причина: приложение упало при старте, например из-за незаданного секрета. Обе видно в логах в кабинете в первые же секунды после публикации.
Нужно ли собирать TypeScript перед загрузкой?
Нет, Bun исполняет файлы .ts напрямую, отдельный шаг сборки для этого не нужен. Если в проекте всё-таки есть своя сборка, оставьте одну команду запуска, которая делает то, что нужно. Готовую сборку в архив класть не надо — она соберётся при публикации.
Будет ли приложение на Bun работать круглосуточно?
Сайт или API на Bun на бесплатном тарифе засыпает при простое и просыпается сам по первому обращению, так что ссылка остаётся рабочей — только первый заход после паузы чуть медленнее. Фоновому скрипту без публичного адреса на бесплатном тарифе даётся три дня работы, после чего проект выключается, а код и настройки остаются. Круглосуточная работа без пауз — на тарифе Pro.
Какие языки и технологии поддерживаются?
Python, Node.js, Go, Rust, Ruby, PHP, Java, .NET, Deno, Bun, Elixir, статические сайты и bash-скрипты. Можно принести свой Dockerfile или docker-compose, но чаще стек определяется по коду автоматически.
Нужно ли уметь работать с Docker?
Нет. Netrun сам определяет язык проекта и собирает его. Если у вас уже есть Dockerfile или docker-compose, мы их поддержим, но писать их специально не требуется.
Где указать токены и другие секретные значения?
В проекте есть вкладка «Секреты» — там задаются значения из кода, например токен от BotFather. Мы храним их в зашифрованном виде: названия переменных вы видите, сами значения не показываем никому, включая вас.
Как обновить код уже опубликованного проекта?
Откройте проект и загрузите новую версию или обновите его из GitHub. Ссылка останется прежней, а данные сохранятся, если лежат в постоянном хранилище — папке /data или томе вашего compose-файла.