Код от нейросети
Как выложить в интернет проект из Bolt.new
Коротко
Чтобы выложить проект из Bolt.new в интернет, заберите код из среды — скачайте архивом или отправьте в репозиторий на GitHub — и загрузите его на платформу, которая сама соберёт проект. Перед этим поправьте то, что работало только внутри браузерной песочницы: сервер должен слушать порт из переменной окружения, ключи должны переехать из кода в секреты, а фронтенд — обращаться к серверу по настоящему адресу. В Netrun достаточно загрузить архив или подключить репозиторий: платформа определит стек, соберёт проект и выдаст ссылку с HTTPS.
Проект собран в Bolt.new, в предпросмотре всё работает — и дальше его надо выложить в интернет, чтобы ссылка открывалась у кого угодно. Тут и выясняется, что браузерная среда незаметно делала за вас четыре вещи: ставила зависимости, сама назначала порт, держала фронтенд и сервер на одном адресе и хранила ключи вне кода. За пределами песочницы этих подпорок нет, поэтому проект, который «только что работал», часто встречает пустой страницей.
Обычно дальше начинается долгая часть: арендовать сервер, поставить туда Node.js, собрать фронтенд, запустить сервер фоновым процессом, поставить перед ним прокси и получить сертификат. В Netrun вы загружаете код архивом или подключаете репозиторий на GitHub, а платформа определяет стек, собирает проект и выдаёт публичную ссылку с HTTPS. Но перед этим стоит потратить десять минут на правки в самом коде — иначе публикация упрётся ровно в те подпорки, которых больше нет.
Разберитесь, что именно у вас запускается#
Проект из Bolt.new чаще всего состоит из двух частей: фронтенда, который собирается в набор файлов для браузера, и небольшого сервера, который отдаёт данные. Откройте package.json и посмотрите на команды запуска: если сервер есть, публиковать нужно именно его, а собранный фронтенд он должен раздавать сам. Если сервера нет и проект целиком собирается в статические файлы, всё проще — это обычный сайт. От этого ответа зависят все остальные шаги, поэтому начинать стоит с него.
Уберите порт, прописанный в коде#
В песочнице порт назначала среда, поэтому в коде часто остаётся жёсткое число вроде 3000 или 5173. На сервере это причина номер один, по которой ссылка не открывается: приложение слушает не там, где его ждут. Сервер должен брать порт из переменной окружения PORT и слушать адрес 0.0.0.0, а не localhost. Если код писала нейросеть, попросите её же внести эту правку — задача формулируется одной фразой.
Свяжите фронтенд и сервер настоящими адресами#
В браузерной среде обе части отвечали с одного адреса, поэтому запросы к данным нередко написаны с адресом песочницы или вовсе рассчитаны на соседа по вкладке. Самый простой рабочий вариант — оставить проект одним целым: сервер раздаёт собранный фронтенд и он же отвечает на запросы к данным, тогда адрес один и связывать нечего. Если части всё же разъезжаются по разным проектам, адрес сервера фронтенд должен получать настройкой при сборке, а не иметь вписанным в код. Иначе после публикации страница откроется, но останется пустой: данные она будет просить по адресу, которого больше нет.
Вынесите ключи из кода в секреты#
Нейросети охотно вписывают ключи к внешним сервисам прямо в код, и в проекте из Bolt.new они часто так и остаются. Уберите их из файлов и читайте из переменных окружения: при настройке проекта Netrun спросит эти значения и подставит их в зашифрованном виде, в архиве и репозитории их не будет. Отдельно проверьте фронтенд: всё, что уезжает в браузер, видно любому посетителю, поэтому секретные ключи должны остаться на стороне сервера.
Решите, где будут жить данные#
Если в проекте была база, которая жила прямо в браузерной песочнице, в интернете её нет — данные надо положить куда-то по-настоящему. Файл базы и всё, что записывает само приложение, держите в постоянной папке проекта /data: записанное туда переживает обновление кода и перезапуск, а файлы рядом с кодом создаются заново при каждой публикации. Если данных много или с ними работает несколько частей проекта, поднимите базу отдельным сервисом рядом через docker-compose или возьмите внешнюю.
Соберите архив без лишнего и загрузите код#
Забрать код из Bolt.new можно двумя путями: скачать архивом или отправить в репозиторий на GitHub. В архив не кладите node_modules и папку со сборкой — зависимости платформа поставит сама, а фронтенд соберёт при публикации. Дальше загрузите архив в Netrun или подключите репозиторий, в том числе приватный: платформа определит стек, соберёт проект и выдаст публичную ссылку с HTTPS. Логи сборки видны в кабинете в реальном времени, поэтому причину ошибки видно сразу, а не по пустой странице.
Проект из Bolt.new перестаёт быть вкладкой в браузере в тот момент, когда у него появляется своя ссылка. Почти всё, что ломается при переезде, — это следы песочницы: порт из кода, адрес соседа, ключ в открытую и база, которой некуда деться. Поправьте эти четыре вещи, а сборку, HTTPS и перезапуск при сбое платформа возьмёт на себя. Загрузите код в Netrun или сначала прогоните его через бесплатную проверку проекта.
Частые вопросы
Можно ли выложить проект из Bolt.new куда угодно, а не туда, куда предлагает сам сервис?
Да. Код проекта ваш: его можно скачать архивом или отправить в репозиторий на GitHub, а дальше опубликовать там, где удобно. Netrun принимает и архив, и репозиторий — привязки к среде, в которой писался код, нет.
Почему проект работает в предпросмотре Bolt, а после публикации показывает пустую страницу?
Чаще всего фронтенд собрался и открылся, но данные просит по адресу, которого в интернете нет: в песочнице фронтенд и сервер отвечали с одного адреса. Вторая частая причина — сервер слушает жёстко прописанный порт вместо порта из переменной окружения. Обе видны в логах в кабинете и в консоли браузера.
Нужен ли GitHub, чтобы опубликовать проект из Bolt?
Нет. Достаточно скачать код архивом и загрузить его — git и терминал не нужны. GitHub удобнее, если вы собираетесь дальше править проект и обновлять его из репозитория одним действием в кабинете.
Что делать с базой данных из проекта Bolt?
Если база жила внутри браузерной песочницы, в интернете её нет и данные надо разместить заново. Небольшой файловой базе хватит постоянной папки /data — записанное туда не пропадает при обновлении кода. Для нагрузок побольше поднимите базу отдельным сервисом рядом через docker-compose: в таком проекте постоянное хранилище — том из вашего файла, а не /data.
Нужно ли собирать фронтенд самому перед загрузкой?
Нет, сборка происходит на платформе. Готовую папку со сборкой и node_modules в архив класть не нужно: они только раздувают загрузку, а собранная версия всё равно будет пересобрана из исходников.
Перестали работать ключи к внешним сервисам после переезда. Почему?
Ключи хранились в настройках среды, а не в коде, и вместе с архивом никуда не уехали. Задайте их заново при настройке проекта: платформа спросит значения и подставит их в переменные окружения в зашифрованном виде.
А React, Vue, Next.js, Nuxt, Svelte или Astro?
Да, все они работают. Загрузите исходный код с package.json — собирать проект у себя и класть готовую сборку в архив не нужно, сборка идёт у нас. Если фреймворк умеет и в готовые страницы, и в серверный режим, подойдут оба варианта: в серверном приложение должно слушать порт из переменной окружения. Одна важная деталь: значения, которые попадают в собранный фронтенд, видны любому посетителю — настоящие ключи держите на стороне сервера.
Где указать токены и другие секретные значения?
В проекте есть вкладка «Секреты» — там задаются значения из кода, например токен от BotFather. Мы храним их в зашифрованном виде: названия переменных вы видите, сами значения не показываем никому, включая вас.
Как обновить код уже опубликованного проекта?
Откройте проект и загрузите новую версию или обновите его из GitHub. Ссылка останется прежней, а данные сохранятся, если лежат в постоянном хранилище — папке /data или томе вашего compose-файла.
Обновляется ли проект сам при изменениях в GitHub?
Нет, публикация новой версии — ваше решение: откройте проект и обновите его из GitHub или загрузите новый архив. Так случайный коммит не уезжает сразу к пользователям. Ссылка при обновлении остаётся прежней, а данные из постоянного хранилища сохраняются.