NetrunНа главную

Сайты и приложения

Как выложить приложение на Bun в интернет

· 5 мин чтения

Коротко

Приложение на 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. Ни сервера, ни прокси, ни ручного сертификата. Ниже — что проверить в проекте, чтобы первая же публикация закончилась рабочей ссылкой.

  1. Положите bun.lockb рядом с package.json#

    Файл блокировки Bun — bun.lockb в старых версиях или текстовый bun.lock в новых — это главный сигнал, что проект нужно ставить и запускать именно на Bun. Если такого файла нет, сгодится и упоминание Bun в самом package.json: команда запуска, которая начинается с bun, или поле engines с указанным bun. Когда нет ни того ни другого, проект уедет как обычный Node-проект на npm, поэтому проще один раз выполнить bun install у себя и положить получившийся файл рядом с кодом.

  2. Оставьте одну понятную команду запуска#

    В package.json пропишите поле start в разделе scripts — например, bun run index.ts или bun run src/server.ts. Одна команда вместо трёх вариантов запуска избавляет от вопроса, что именно считать точкой входа. Если проект заодно поднимается и на Node, это не проблема: важно, чтобы стартовая команда была одна и очевидная.

  3. Читайте порт из переменной окружения#

    Веб-сервер должен слушать порт из переменной окружения PORT и адрес 0.0.0.0, а не 127.0.0.1. В Bun.serve порт передают полем port, туда же кладут hostname со значением 0.0.0.0. Захардкоженный в коде порт — причина номер один, почему ссылка отдаёт пустоту: приложение слушает не там, где его ждут.

  4. Проверьте свой фреймворк#

    Работают и Elysia, и Hono, и просто Bun.serve без фреймворка — платформе важен не фреймворк, а то, что приложение слушает нужный порт. У Elysia порт задаётся в вызове listen, у Hono экспортируется объект с полями fetch и port. В обоих случаях значение берите из PORT, а не из константы.

  5. Уберите node_modules из архива#

    Папку node_modules и готовую сборку в архив класть не нужно: зависимости ставятся при публикации по package.json и файлу блокировки. Так архив весит меньше, а версии пакетов совпадают с теми, что вы зафиксировали. Ключи, токены и строку подключения к базе тоже не кладите в код — их спросят при настройке проекта и подставят в переменные окружения в зашифрованном виде.

  6. Загрузите код и заберите ссылку#

    Принесите проект 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-файла.

Запустите свой проект

Загрузите код, ответьте на пару вопросов — и получите рабочую ссылку. Есть бесплатный тариф

Попробовать Netrun
Все статьи блога