Перейти к содержимому

Как развернуть spring приложение на сервере

  • автор:

Как развернуть веб приложение?

Написал я свое первое веб приложение (писал на 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 Комментировать

thexaver

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 4. git add . 5. git commit -am «Some comment for your project with heroku» 6. git push heroku main Вот подробная инструкция.

Денис 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, то используйте следующую настройку:


org.springframework.boot
spring-boot-maven-plugin

ИМЯ

Предположим, у нас уже есть скомпилированное 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.

Если вы обнаружите неточности или у вас есть дополнения – пишите их в комментах.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *