Сайты и приложения
Как выложить приложение на Java и Spring Boot в интернет
Коротко
Приложение на Spring Boot выкладывают в интернет так: загружают исходный код в Netrun, платформа сама собирает проект по pom.xml или build.gradle и выдаёт публичную ссылку с HTTPS. Собранный jar готовить заранее не нужно, ставить Java и арендовать сервер тоже. Главное условие — приложение должно слушать порт из переменной окружения PORT, причём на всех адресах, а не только на localhost: зашитый в коде порт — причина номер один, почему сборка прошла, а ссылка остаётся пустой. Первая сборка Java-проекта идёт дольше, чем у скриптовых языков: заново скачиваются все зависимости.
Обычно, чтобы показать приложение на Spring Boot кому-то кроме себя, нужно арендовать сервер, поставить туда Java нужной версии, собрать jar, придумать, как запускать его в фоне и поднимать после падения, поставить перед ним прокси и получить сертификат. Для проекта, который на своей машине стартует одной кнопкой в редакторе, работы несоразмерно много — и поэтому вопрос «куда выложить Spring Boot проект» обычно застревает надолго.
В Netrun этой части нет. Хостинг Java-приложения выглядит так: вы загружаете исходный код, платформа видит pom.xml или build.gradle, сама собирает проект и выдаёт публичную ссылку с HTTPS — защищённое соединение, замочек в браузере. Ниже — путь от папки с проектом до рабочей ссылки и разбор самой частой ошибки, из-за которой ссылка остаётся пустой.
Оставьте в корне pom.xml или build.gradle#
По этому файлу платформа понимает, что перед ней проект на Java, и знает, чем его собирать — Maven или Gradle. Собранный jar в архив класть не нужно: достаточно исходников, сборка идёт на наших серверах. Папки target и build, а также локальный кэш зависимостей в архив тоже не кладите — они только раздувают загрузку и всё равно будут созданы заново.
Не задавайте порт в коде#
Порт для приложения выбирает платформа и передаёт его в переменной окружения PORT — слушать нужно именно его и все адреса, а не только localhost. В Spring Boot это одна строка в application.properties: server.port=${PORT:8080}. Если порт зашит прямо в коде, сборка пройдёт, а страница по ссылке останется пустой — это самая частая причина, по которой проект, работающий на своей машине, не открывается в интернете.
Вынесите пароли и ключи в секреты#
Строку подключения к базе, пароль, ключи внешних сервисов держите в переменных окружения, а не в application.properties и не в коде. При настройке проекта Netrun спросит эти значения и подставит их в зашифрованном виде — в архиве и в репозитории на GitHub они лежать не будут. Spring Boot читает такие значения из окружения без дополнительных библиотек.
Подключите базу данных, если она нужна#
Отдельной управляемой базы как услуги у нас нет, зато база может жить внутри вашего же проекта. Положите в корень файл docker-compose.yml и опишите в нём два сервиса: приложение и PostgreSQL или MySQL готовым образом — в одном проекте помещается до пяти связанных сервисов. Обязательно дайте базе именованный том, иначе данные сотрутся при следующей публикации. Внешняя база тоже подойдёт: тогда достаточно строки подключения в секретах.
Загрузите код и дождитесь первой сборки#
Принесите проект ZIP-архивом или импортируйте репозиторий с GitHub, в том числе приватный — git и терминал для этого не нужны. Первая сборка Java-проекта идёт заметно дольше, чем у скриптовых языков: Maven или Gradle скачивают все зависимости с нуля. Это нормально: статус и логи сборки видны в кабинете в реальном времени, так что понятно, что процесс идёт, а не завис.
Откройте ссылку и проверьте логи#
Когда сборка закончится, вы получите публичный адрес с HTTPS — его можно открывать и отправлять кому угодно. Если страница не открылась, смотрите логи в кабинете: там видно, стартовал ли Spring Boot и на каком порту он слушает. Дальше код обновляется прямо в кабинете — загрузите новую версию или обновите из GitHub, ссылка останется прежней.
Итог: приложение на Java и Spring Boot работает по обычной ссылке, без аренды сервера, установки JDK и настройки сертификата. На бесплатном тарифе доступен один проект, и сайт на нём засыпает при простое, а просыпается, когда кто-то открывает ссылку — у Java-приложения первый заход после паузы будет заметно медленнее, чем у лёгкого скрипта, потому что заново стартует сам процесс. Если сервис должен отвечать быстро в любой момент, подойдёт тариф Pro с работой без простоев. Актуальные цены и лимиты видны в кабинете. Попробовать Netrun.
Частые вопросы
Нужно ли собирать jar перед загрузкой?
Нет. Загружайте исходный код вместе с pom.xml или build.gradle — проект соберётся у нас. Готовый jar, папки target и build, а также локальный кэш зависимостей в архив класть не нужно.
Maven или Gradle — что поддерживается?
И то, и другое. Платформа смотрит, какой файл сборки лежит в корне проекта, и запускает нужный инструмент. Обёртки mvnw и gradlew, если они у вас есть, можно оставить на месте — мешать они не будут.
Почему первая сборка Java-проекта идёт так долго?
Потому что Maven или Gradle скачивают все зависимости с нуля, а у Java-проектов их обычно много. Это разовая плата: последующие публикации того же проекта проходят быстрее. Прогресс видно в логах сборки в кабинете, так что можно понять, что процесс идёт, а не завис.
Проект собрался, но ссылка не открывается — что проверить?
Сначала логи в кабинете: часто приложение просто падает при старте, например не может подключиться к базе. Вторая по частоте причина — порт: если он задан прямо в коде или приложение слушает только localhost, снаружи до него не достучаться. Слушать нужно все адреса и порт из переменной окружения.
Как подключить PostgreSQL к Spring Boot-приложению?
Двумя способами. Либо опишите базу отдельным сервисом в файле docker-compose рядом с приложением и дайте ей именованный том, чтобы данные пережили обновление кода. Либо возьмите внешнюю базу и передайте строку подключения через секреты — Spring Boot прочитает её из переменных окружения.
Какую версию Java лучше указать?
Ту, на которой вы писали проект, и указать её явно в файле сборки: свойство java.version в pom.xml или sourceCompatibility в build.gradle. Тогда проект соберётся именно на нужной версии и не упадёт с жалобой компилятора на неподдерживаемый релиз.
Какие языки и технологии поддерживаются?
Python, Node.js, Go, Rust, Ruby, PHP, Java, .NET, Deno, Bun, Elixir, статические сайты и bash-скрипты. Можно принести свой Dockerfile или docker-compose, но чаще стек определяется по коду автоматически.
Нужен ли свой сервер или VPS?
Нет. Netrun разворачивает проект на своих серверах. Не нужно арендовать VPS, настраивать systemd и nginx или продлевать сертификаты — всё это работает за вас.
Где указать токены и другие секретные значения?
В проекте есть вкладка «Секреты» — там задаются значения из кода, например токен от BotFather. Мы храним их в зашифрованном виде: названия переменных вы видите, сами значения не показываем никому, включая вас.
Почему мой сайт иногда засыпает?
На бесплатном тарифе сайты засыпают после простоя и просыпаются за пару секунд при первом запросе. На тарифе Pro проект работает без сна.