Как развернуть веб приложение?
Написал я свое первое веб приложение (писал на Spring Boot). Запускаю на localhost — все работает как надо. Теперь хочу развернуть его у себя на работе,чтоб мой ноут выступал в виде сервера и все работники моей организации могли пользовать этим приложением с своего рабочего места через браузер. Прошу посоветовать откуда начинать, возможно ссылки, уроки, документация. Буду признателен за любую информацию.
Отслеживать
задан 11 июн 2019 в 13:07
403 4 4 серебряных знака 18 18 бронзовых знаков
Локально вы можете поднять только у себя на рабочем месте. Чтобы это было на production, вам нужно выкупить хостинг, после чего настроить удаленную машину, как вам надо(как минимум java), после чего залить через ssh свой проект и запустить его удаленно.
11 июн 2019 в 13:19
Мне пока нужно только локально. Как я это вижу сейчас. Установить TomCat, закинуть в папку webapps мой варник и запустить сервер TomCar. После этого работники моей компании смогут заходить по адресу типа 10.244.2.1/index.html?
Как развернуть spring прлоижение на сервер?
Дорбого времени суток, изучаю спринг, хочу попробвать игрушечные мини сайтик (чисто для себя и учебных целей, чтобы не только на локальном сервере через intelliJIDEA запускать, а еще уметь вот так вот, сразу на хост) залить на сервер/хостинг. Как это сделать? Что для этого надо?
Я погуглил, нагуглил, что надо покупать хостинг VPS (что очень дорого для обычных тестов лабы1 лабы2) и там через apache уже ставить. Есть ли еще способы, менее затратные?
- Вопрос задан более трёх лет назад
- 1331 просмотр
Комментировать
Решения вопроса 0
Ответы на вопрос 3
Попробуйте heroku. Там есть инструкция для maven и gradle
Платформа берет ваш исходный код из репозитория и разворачивает на своих серверах. За поиграться платить не придется
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать

Hetzner cloud, vscale, reg.ru, все они с почасовой оплатой
Ответ написан более трёх лет назад
Деплой Spring приложения на удалённый сервер.
У меня есть приложение которое отлично работает локально. Я хочу им поделиться с миром, для этого его необходимо разместить где-то на удалённом сервере. Это оказалось задачей гораздо более сложной чем научиться программировать. Бъюсь над вопросом я уже давно, за это время пробовал действовать по гайдам Хероку (без толку), научился создавать образы и запускать контейнеры Docker, всё работает но только локально. Нашёл где арендовать хост и понял как к нему подключаться, но там то Docker не установлен, но БД не та что мне нужна. Я могу конечно мигрировать на другую БД, но это не решение. Хочется подходить к вопросу комплексно. Прошу подсказать какой нибудь курс, или может кто-то готов будет сам провести со мной пару занятий по этому вопросу.
Комментарии (9)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Vladimir I learn Spring etc в springframework.guru Master
29 июля 2022, 11:14
Игорь, решил проблему свою или нет?
Vladimir I learn Spring etc в springframework.guru Master
26 июля 2022, 09:53
Вот как я лью на Heroku. Регистрируешься в Heroku вначале, затем: 1. Заходишь в папку с проектом 2. git init 3. heroku git:remote -a
Денис Java Developer
26 июля 2022, 08:40
Во первых, ты не вполне точно задаешь вопросы. Например ты упомянул, что какой-то хост нашел, но не объяснил деталей. Ниже тебе советовали VPS арендовать, что-то мне кажется, что ты его и арендовал уже. Во вторых, если ты арендовал какой то хост — то есть смысл пообщаться с их саппортом и объяснить своё видение мира, возможно его тебе просто переконфигурят. В третьих, зачем там докер? И Java и бд и все что хочешь можно установить на VPSку, можно даже попросить их из коробки я думаю. Единственная цель докера — упростить эти рутинные процессы до выполнения одной команды, но это актуально там, где докер доступен и используется. Вообще я бы посоветовал не курсы, а тупо прорабатывать то, что у тебя сейчас вызывает вопросы. Например как разворачивать приложения на удаленном сервере, обласные инфраструктуры и пр. Вот взять тот же heroku, у них на сайте вполне доходчивая инструкция есть, ты говоришь что пробовал без толку — так попробуй с толком. По другому не получится, ты или добиваешь вопрос или нет.
Уровень 41
26 июля 2022, 07:24
могу предложить два варианта; первый простой, второй сложный. 1. арендовать виртуальную машину (vds/vps) на линуксе с полным ssh доступом и поставить туда докер. это стоит от 600 р/мес. 2. поиграться с aws ec2 . у них есть 12 мес пробного использования, но там нужно будет погружаться в тему. зато это круто с точки зрения резюме
Денис Java Developer
26 июля 2022, 08:21
А потом мы читаем на хабре статьи «как я слил 70к баксов через триал <ваше облако>«. 🙂 Но вот вариант с ВПСкой звучит адекватно, правда понадобиться учиться базовому администрированию и сесурити 🙂ваше>
Уровень 41
26 июля 2022, 13:30
вряд ли это станет непреодолимым препятствием для ТС’а:) у aws есть подробный гайд, как ограничить списание средств
Уровень 41
2 августа 2022, 05:08
Регистрация на aws ec2 недоступна из РФ
Уровень 40
26 июля 2022, 07:15
Уровень 11
26 июля 2022, 05:53
- Курсы программирования
- Регистрация
- Курс Java
- Помощь по задачам
- Цены
- Задачи-игры
Сообщество
JavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Настройка Ubuntu под хостинг JVM приложения
Если Вам интересно, как настроить сервер для хостинга JVM приложения, то предлагаю вашему вниманию следующую инструкцию. Предположим, вы только что получили доступ к чистому VPS серверу, на котором крутится Ubuntu и вы хотите на нём развернуть полноценное JVM приложение, основанное на Spring. Для полноты картины мы настроим также локальный postgres и доступ извне по http.
Прежде всего обновляем индекс менеджера пакетов apt. У вас должно быть достаточно прав для выполнения sudo, а также ваш сервер должен иметь доступ в Интернет.
sudo apt update
Установка и настройка Java
Для работы нашего jvm-приложения сначала требуется установить виртуальную машину Java. Ставим последнюю LTS (long-term support – длительная поддержка) версию. На данный момент это Java 17.
# если планируем компилировать на сервере, то ставим JDK
sudo apt-get install openjdk- 17 -jdk
# если будем запускать уже скомпилированное приложение, то JRE
sudo apt-get install openjdk- 17 -jre
# затем проверяем, что по умолчанию установилась нужная версия
java -version
JDK – это Java Development Kit, т.е. версия Java для разработчиков. Включает в себя компилятор. JRE – это Java Runtime Environment, т.е. среда исполнения. Причём JDK включает в себя JRE. На сервере чаще всего достаточно поставить именно JRE.
Опционально можно вручную настроить переменную окружения JAVA_HOME в файле /etc/environment. Добавляем в конце файла на новой строке:
JAVA_HOME= «/usr/bin/java»
Установка и настройка postgres
sudo apt install postgres
# заходим в систему под пользователем postgres
sudo -i -u postgres
# создаём базу данных с нужным именем
createdb имя_базы
# создаём пользователя для этой БД
createuser имя_пользователя —interactive
При создании пользователя вам будет задан только один вопрос. Создать его как суперпользователя? То есть наделить его всей полнотой полномочий для работы с БД. Выбираем yes.
Что касается имени пользователя и базы, то называйте их как-то похожим образом. Например, mydb и mydb_user.
Теперь заходим в сам postgres, выполнив команду psql. По сути psql – это консольный вариант клиента БД, который позволяет выполнять любые sql команды при наличии прав.
Установим для только что созданного пользователя хороший пароль (не забывайте точку с запятой в конце):
alter user имя_пользователя with encrypted password ‘pa$$w0rd’ ;
Кстати, генератор паролей доступен на данном сайте в разделе «Утилиты».
Выходим из psql командой \q.
Теперь в конце файла /etc/postgresql/номер_версии/main/pg_hba.conf добавляем:
host база пользователь all password
Не забудьте заменить на свои имена базы и пользователя. Так мы указываем, что авторизация данного пользователя происходит именно по паролю, который мы задали выше.
Теперь если нам требуется подключаться к данной БД снаружи, а не только из самого приложения, работающего на этом же хосте, находим в файле /etc/postgresql/номер_версии/main/postgresql.conf
следующую закомментированную строку и раскомментируем её:
# listen_addresses = ‘*’;
Так мы разрешаем подключаться к БД снаружи с любого ip-адреса. При необходимости вы можете задать специальную маску, ограничив до нужной подсети.
Чтобы все изменения вступили в силу, перезапускаем postgres:
sudo service postgresql restart
Запускаем приложение как linux-сервис
Для начала нам нужно, чтобы имя jar-файла, которое получается в результате компиляции нашего Spring-приложения, не менялось от версии к версии. Задать его в явном виде в gradle можно так:
// файл build.gradle.kts
tasks bootJar archiveFileName.set( «ИМЯ.jar» )
>
>
Если вы используете maven, то используйте следующую настройку:
Предположим, у нас уже есть скомпилированное jvm-приложение, которое умеет слушать порт 8080. Чтобы это приложение всё время работало на сервере и автоматически запускалось при старте сервера, нужно зарегистрировать его как linux-сервис.
Для этого с помощью scp копируем jar-файл (если их несколько, копируем тот, который больше) на сервер. Например, в папку /var/имя_приложения/имя_приложения.jar
Затем в папке /etc/systemd/system/ создаём файл имя_приложения.service со следующим содержимым:
[Unit]
Description=описание
After=syslog.target
[Service]
User=имя_пользователя
Environment= «КЛЮЧ=ЗНАЧЕНИЕ»
Environment= «LOGGING_FILE_PATH=/var/log/имя_приложения/»
Environment= «TZ=Europe/Moscow»
ExecStart=/usr/bin/java -jar /var/имя_приложения/имя_приложения.jar
Тут в параметре User указывайте, под каким пользователем системы следует запускать сервис. Разумеется, у него должны быть права на это.
В параметрах Environment вы можете задавать различные переменные окружения в формате «ключ=значение». В данном примере уже задан часовой пояс (TZ) и путь до папки с логами (LOGGING_FILE_PATH). Именно здесь вы можете указать профиль приложения test или prod.
В ExecStart указывается команда для запуска приложения. Здесь просто подставьте ваши значения.
Сохраняем файл, после чего активируем сервис и запускаем его:
# активация
sudo systemctl enable имя_сервиса.service
# первичный запуск
sudo service имя_сервиса start
Теперь наш сервис будет запускаться автоматически даже при перезагрузке сервера.
Если будете менять какие-то настройки в service-файле, не забывайте выполнять команду systemctl daemon-reload, чтобы изменения вступали в силу.
Настройка Nginx
Поскольку наш сервис слушает порт 8080, вы уже можете обращаться к нему снаружи, указав имя хоста или ip-адрес и порт 8080. Но как сделать так, чтобы порт не нужно было указывать в явном виде? В этом нам поможет Nginx, который будет проксировать все запросы с дефолтного порта 80 на порт нашего приложения 8080.
# ставим Nginx
sudo apt install nginx
Теперь открываем конфигурацию /etc/nginx/nginx.conf и находим там секцию http. Внутри неё нужно разместить секцию server:
http <
…
server <
listen 80;
server_name домен;
listen 80 указывает, что мы хотим слушать порт 80. Секция «location /» говорит о том, что все запросы с корня url мы перенаправляем на localhost на порт 8080 (параметр proxy_pass).
# проверяем, что не ошиблись в синтаксисе конфигурации
sudo nginx -t
# перечитываем конфиг
sudo nginx -s reload
# удаляем дефолтную страницу-заглушку — она нам больше не нужна
sudo rm /etc/nginx/sites-enabled/default
Теперь в урле при обращении к нашему сервису порт указывать не нужно.
Настройка брандмауэра
Напоследок было бы неплохо настроить хоть какую-то защиту нашего сервера. Воспользуемся стандартным брандмауэром UFW (Uncomplicated Firewall). По умолчанию он разрешает все подключения изнутри наружу и запрещает все подключения снаружи к серверу. Установка и настройка его предельно проста.
# установка
sudo apt install ufw
# Важно! Разрешаем ssh-подключения!
sudo ufw allow ssh
Команда вида «ufw allow протокол» позволяет разрешить подключения на определённый порт извне. Прежде всего, не забудьте разрешить ssh-подключение. Если вы забудете это сделать, то после активации ufw вы потеряете доступ к серверу.
Разрешим ещё несколько протоколов:
# разрешаем http и https протоколы (порты 80 и 443)
sudo ufw allow http
sudo ufw allow https
# разрешаем postgres на порту 5432
sudo ufw allow postgres
# включаем брандмауэр
sudo ufw enable
После активации брандмауэра все запрещённые порты окажутся недоступны!
Заключение
Мы рассмотрели вопросы установки Java и postgres на сервер с Ubuntu. Также научились запускать наше Spring-приложение как linux-сервис. После этого научились пробрасывать запросы с порта 80 на порт нашего приложения с помощью Nginx. И, напоследок, рассмотрели вопросы ограничения доступа с помощью брандмауэра UFW.
Если вы обнаружите неточности или у вас есть дополнения – пишите их в комментах.