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

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

  • автор:

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

Написал я свое первое веб приложение (писал на Spring Boot). Запускаю на localhost — все работает как надо. Теперь хочу развернуть его у себя на работе,чтоб мой ноут выступал в виде сервера и все работники моей организации могли пользовать этим приложением с своего рабочего места через браузер. Прошу посоветовать откуда начинать, возможно ссылки, уроки, документация. Буду признателен за любую информацию.

Отслеживать
задан 11 июн 2019 в 13:07
413 5 5 серебряных знаков 19 19 бронзовых знаков

Локально вы можете поднять только у себя на рабочем месте. Чтобы это было на production, вам нужно выкупить хостинг, после чего настроить удаленную машину, как вам надо(как минимум java), после чего залить через ssh свой проект и запустить его удаленно.

11 июн 2019 в 13:19

Мне пока нужно только локально. Как я это вижу сейчас. Установить TomCat, закинуть в папку webapps мой варник и запустить сервер TomCar. После этого работники моей компании смогут заходить по адресу типа 10.244.2.1/index.html?

Разверните Spring Boot WAR на сервере Tomcat

Spring Boot — это соглашение о структуре конфигурации, которое позволяет нам создать готовую к работе установку проекта Spring, а Tomcat — один из самых популярных контейнеров сервлетов Java.

По умолчанию Spring Boot создает отдельное приложение Java, которое может работать как настольное приложение или настраиваться как системная служба, но есть среды, в которых мы не можем установить новую службу или запустить приложение вручную.

В отличие от автономных приложений, Tomcat устанавливается как служба, которая может управлять несколькими приложениями в рамках одного и того же прикладного процесса, что позволяет избежать необходимости специальной настройки для каждого приложения.

В этом руководстве мы создадим простое приложение Spring Boot и адаптируем его для работы в Tomcat.

2. Настройка приложения Spring Boot​

Давайте настроим простое веб-приложение Spring Boot, используя один из доступных начальных шаблонов:

 parent>   groupId>org.springframework.bootgroupId>   artifactId>spring-boot-starter-parentartifactId>   version>2.4.0version>   relativePath/>   parent>   dependencies>   dependency>   groupId>org.springframework.bootgroupId>   artifactId>spring-boot-starter-webartifactId>   dependency>   dependencies> 

Нет необходимости в дополнительных конфигурациях помимо стандартного @SpringBootApplication, поскольку Spring Boot позаботится о настройке по умолчанию.

Затем мы добавим простую REST EndPoint, чтобы возвращать нам допустимый контент:

 @RestController   public class TomcatController     @GetMapping("/hello")   public CollectionString> sayHello()    return IntStream.range(0, 10)   .mapToObj(i -> "Hello number " + i)   .collect(Collectors.toList());   >   > 

Наконец, мы запустим приложение с помощью mvn spring-boot:run и запустим браузер по адресу http://localhost:8080/hello , чтобы проверить результаты.

3. Создание Spring Boot WAR​

Контейнеры сервлетов ожидают, что приложения будут развернуты в соответствии с некоторыми контрактами. Для Tomcat контрактом является Servlet API 3.0 .

Чтобы наше приложение соответствовало этому контракту, мы должны внести небольшие изменения в исходный код.

Во-первых, нам нужно упаковать приложение WAR вместо JAR. Для этого мы изменим pom.xml следующим содержимым:

 packaging>warpackaging> 

Далее мы изменим окончательное имя файла WAR , чтобы не включать номера версий:

 build>   finalName>$ finalName>   .   build> 

Затем мы добавим зависимость Tomcat:

 dependency>   groupId>org.springframework.bootgroupId>   artifactId>spring-boot-starter-tomcatartifactId>   scope>providedscope>   dependency> 

Наконец, мы инициализируем контекст сервлета, требуемый Tomcat, путем реализации интерфейса SpringBootServletInitializer :

 @SpringBootApplication   public class SpringBootTomcatApplication extends SpringBootServletInitializer    > 

Чтобы создать наше WAR-приложение, развертываемое с помощью Tomcat, мы выполним пакет mvn clean. После этого наш WAR-файл генерируется по адресу target/spring-boot-deployment.war (при условии, что артефакт Maven — «spring-boot-deployment»).

Мы должны учитывать, что эта новая настройка делает наше приложение Spring Boot неавтономным приложением (если мы хотим, чтобы оно снова работало в автономном режиме, мы можем удалить предоставленную область из зависимости tomcat).

4. Развертывание WAR на Tomcat​

Чтобы наш файл WAR был развернут и запущен в Tomcat, нам необходимо выполнить следующие шаги:

  1. Загрузите Apache Tomcat и распакуйте его в папку tomcat .
  2. Скопируйте наш файл WAR из target/spring-boot-deployment.war в папку tomcat/webapps/
  3. В терминале перейдите в папку tomcat/bin и выполните
  4. catalina.bat запустить (в Windows)
  5. запуск catalina.sh (в системах на базе Unix)
  6. Перейдите по адресу http://localhost:8080/spring-boot-deployment/hello.

Это была быстрая установка Tomcat, поэтому ознакомьтесь с полным руководством по установке Tomcat . Существуют также дополнительные способы развертывания WAR-файла на Tomcat .

5. Вывод​

В этой краткой статье мы создали простое приложение Spring Boot и превратили его в действительное приложение WAR, которое можно развернуть на сервере Tomcat.

Как всегда, полный исходный код примеров доступен на GitHub .

  • 1. Введение
  • 2. Настройка приложения Spring Boot
  • 3. Создание Spring Boot WAR
  • 4. Развертывание WAR на Tomcat
  • 5. Вывод

Развертывание приложения Spring в Службе приложений с использованием MySQL

Для приложений Spring рекомендуется использовать Azure Spring Apps. Однако вы по-прежнему можете использовать службу приложение Azure в качестве назначения.

Из этого руководства вы узнаете, как создавать, настраивать, развертывать и масштабировать веб-приложения Java, а также устранять неполадки с ними в Службе приложений в Linux.

Это руководство основано на популярном примере приложения PetClinic. В этом разделе вы протестируете версию HSQLDB приложения локально, а затем разверните ее в службе приложение Azure. После этого вы настроите и развернете версию, которая использует База данных Azure для MySQL. Наконец, вы узнаете, как получить доступ к журналам приложений и увеличить масштаб, увеличив число рабочих ролей, работающих в приложении.

Необходимые компоненты

Получение примера

Чтобы приступить к работе с примером приложения, клонируйте и подготовьте исходный репозиторий с помощью следующих команд.

git clone https://github.com/spring-petclinic/spring-framework-petclinic.git cd spring-framework-petclinic 
git clone https://github.com/spring-petclinic/spring-framework-petclinic.git cd spring-framework-petclinic 
git clone https://github.com/spring-petclinic/spring-framework-petclinic.git cd spring-framework-petclinic 

Сборка и запуск примера HSQLDB в локальной среде

Сначала мы протестируем пример локально, используя HSQLDB в качестве базы данных.

Создайте версию HSQLDB примера приложения.

mvn package 

Затем присвойте переменной среды TOMCAT_HOME расположение установки Tomcat.

export TOMCAT_HOME=
$env:TOMCAT_HOME="" 
set TOMCAT_HOME=

Затем обновите файл pom.xml для развертывания файла WAR. Добавьте следующий код XML в качестве дочернего узла существующего элемента . При необходимости измените 1.9.11 на текущую версию подключаемого модуля Cargo Maven 3.

 org.codehaus.cargo cargo-maven3-plugin 1.9.11  tomcat9x installed $ existing $  $ $ war /      

В такой конфигурации приложение можно развернуть локально в Tomcat.

mvn cargo:deploy 

Затем запустите Tomcat.

$/bin/catalina.sh run 
& $env:TOMCAT_HOME/bin/catalina.bat run 
%TOMCAT_HOME%\bin\catalina.bat run 

Теперь в браузере можно перейти по адресу http://localhost:8080 , чтобы увидеть работающее приложение и оценить его работу. По завершении нажмите клавиши CTRL+C в командной строке Bash, чтобы остановить Tomcat.

Развертывание в Службу приложений Azure

Теперь, когда приложение протестировано локально, его можно развернуть в Azure.

Сначала настройте следующие переменные среды. Для REGION используйте West US 2 или другие регионы, которые можно найти здесь.

export RESOURCEGROUP_NAME= export WEBAPP_NAME= export WEBAPP_PLAN_NAME=$-appservice-plan export REGION=
$env:RESOURCEGROUP_NAME="" $env:WEBAPP_NAME="" $env:WEBAPP_PLAN_NAME="$env:WEBAPP_NAME-appservice-plan" $env:REGION="" $env:SUBSCRIPTION_ID="" 
set RESOURCEGROUP_NAME= set WEBAPP_NAME= set WEBAPP_PLAN_NAME=%WEBAPP_NAME%-appservice-plan set REGION= set SUBSCRIPTION_ID=

Maven будет использовать эти значения для создания ресурсов Azure с предоставленными вами именами. С помощью переменных среды можно хранить секреты учетной записи отдельно от файлов проекта.

Затем обновите файл pom.xml, чтобы настроить Maven для развертывания в Azure. Добавьте следующий код XML после добавленного ранее элемента . При необходимости измените 2.5.0 на текущую версию подключаемого модуля Maven для Службы приложений Azure.

 com.microsoft.azure azure-webapp-maven-plugin 2.5.0 v2 $ $ $ $ P1v2 Linux Java 8 TOMCAT 9.0    $/target *.war       

Затем войдите в Azure.

az login 

После этого разверните приложение в Службе приложений в Linux.

mvn azure-webapp:deploy 

Теперь вы можете перейти по адресу https://.azurewebsites.net (после замены ), чтобы увидеть работающее приложение.

Настройка Базы данных Azure для MySQL

Теперь вместо HSQLDB будет использоваться MySQL. Вам нужно будет создать экземпляр MySQL Server в Azure и добавить базу данных, а затем обновить конфигурацию приложения, используя новые сведения о подключении к базе данных.

Сначала настройте следующие переменные среды для дальнейшего использования.

export MYSQL_SERVER_NAME= export MYSQL_SERVER_FULL_NAME=$.mysql.database.azure.com export MYSQL_SERVER_ADMIN_LOGIN_NAME= export MYSQL_SERVER_ADMIN_PASSWORD= export MYSQL_DATABASE_NAME= export DOLLAR=\$ 
$env:MYSQL_SERVER_NAME="" $env:MYSQL_SERVER_FULL_NAME="$env:MYSQL_SERVER_NAME.mysql.database.azure.com" $env:MYSQL_SERVER_ADMIN_LOGIN_NAME="" $env:MYSQL_SERVER_ADMIN_PASSWORD="" $env:MYSQL_DATABASE_NAME="" $env:DOLLAR="$" 
set MYSQL_SERVER_NAME= set MYSQL_SERVER_FULL_NAME=%MYSQL_SERVER_NAME%.mysql.database.azure.com set MYSQL_SERVER_ADMIN_LOGIN_NAME= set MYSQL_SERVER_ADMIN_PASSWORD= set MYSQL_DATABASE_NAME= set DOLLAR=$ 

Затем создайте и инициализируйте сервер базы данных. Выполните az mysql up для начальной настройки. Затем используйте az mysql server configuration set, чтобы увеличить время ожидания подключения и задать часовой пояс сервера.

az extension add --name db-up az mysql up \ --resource-group $ \ --server-name $ \ --database-name $ \ --admin-user $ \ --admin-password $ az mysql server configuration set --name wait_timeout \ --resource-group $ \ --server $ --value 2147483 az mysql server configuration set --name time_zone \ --resource-group $ \ --server $ --value=-8:00 
az extension add --name db-up az mysql up ` --resource-group $env:RESOURCEGROUP_NAME ` --server-name $env:MYSQL_SERVER_NAME ` --database-name $env:MYSQL_DATABASE_NAME ` --admin-user $env:MYSQL_SERVER_ADMIN_LOGIN_NAME ` --admin-password $env:MYSQL_SERVER_ADMIN_PASSWORD az mysql server configuration set --name wait_timeout ` --resource-group $env:RESOURCEGROUP_NAME ` --server $env:MYSQL_SERVER_NAME --value 2147483 az mysql server configuration set --name time_zone ` --resource-group $env:RESOURCEGROUP_NAME ` --server $env:MYSQL_SERVER_NAME --value=-8:00 
az extension add --name db-up az mysql up ^ --resource-group %RESOURCEGROUP_NAME% ^ --server-name %MYSQL_SERVER_NAME% ^ --database-name %MYSQL_DATABASE_NAME% ^ --admin-user %MYSQL_SERVER_ADMIN_LOGIN_NAME% ^ --admin-password %MYSQL_SERVER_ADMIN_PASSWORD% az mysql server configuration set --name wait_timeout ^ --resource-group %RESOURCEGROUP_NAME% ^ --server %MYSQL_SERVER_NAME% --value 2147483 az mysql server configuration set --name time_zone ^ --resource-group %RESOURCEGROUP_NAME% ^ --server %MYSQL_SERVER_NAME% --value=-8:00 

Затем с помощью CLI MySQL подключитесь к базе данных в Azure.

mysql -u $@$ \ -h $ -P 3306 -p 
mysql -u $env:MYSQL_SERVER_ADMIN_LOGIN_NAME@$env:MYSQL_SERVER_NAME ` -h $env:MYSQL_SERVER_FULL_NAME -P 3306 -p 
mysql -u %MYSQL_SERVER_ADMIN_LOGIN_NAME%@%MYSQL_SERVER_NAME% ^ -h %MYSQL_SERVER_FULL_NAME% -P 3306 -p 

В командной строке CLI MySQL выполните приведенную ниже команду, чтобы проверить, названа ли ваша база данных тем же именем, которое вы указали ранее для переменной среды MYSQL_DATABASE_NAME .

show databases; 

Теперь вы можете использовать MySQL.

Настройка приложения для работы с MySQL

Теперь нужно добавить сведения о подключении к версии MySQL приложения и выполнить развертывание в Службе приложений.

Обновите файл pom.xml, чтобы включить MySQL в действующую конфигурацию. Удалите элемент из профиля H2 и поместите его в профиль MySQL, как показано ниже. В оставшейся части фрагмента кода показана существующая конфигурация. Обратите внимание, как настроенные ранее переменные среды используются Maven для настройки доступа к MySQL.

 MySQL true  mysql MYSQL com.mysql.jdbc.Driver jdbc:mysql://$:3306/$?useUnicode=true $@$ $ . 

Затем обновите файл pom.xml, чтобы настроить Maven для развертывания в Azure и использования MySQL. Добавьте следующий код XML после добавленного ранее элемента . При необходимости измените 2.5.0 на текущую версию подключаемого модуля Maven для Службы приложений Azure.

 com.microsoft.azure azure-webapp-maven-plugin 2.5.0 v2 $ $ $ $ P1v2 Linux Java 8 TOMCAT 9.0   MYSQL_SERVER_FULL_NAME $ MYSQL_SERVER_ADMIN_LOGIN_NAME $ MYSQL_SERVER_ADMIN_PASSWORD $ MYSQL_DATABASE_NAME $    $/target *.war       

Затем выполните сборку приложения и протестируйте его локально, развернув и запустив с помощью Tomcat.

mvn package mvn cargo:deploy $/bin/catalina.sh run 
mvn package mvn cargo:deploy & $env:TOMCAT_HOME/bin/catalina.bat run 
mvn package mvn cargo:deploy %TOMCAT_HOME%\bin\catalina.bat run 

Теперь приложение можно просмотреть локально, перейдя по адресу http://localhost:8080 . Приложение будет выглядеть и работать так же, как и раньше, но теперь оно использует базу данных Azure для MySQL вместо HSQLDB. По завершении нажмите клавиши CTRL+C в командной строке Bash, чтобы остановить Tomcat.

Наконец, разверните приложение в Службе приложений.

mvn azure-webapp:deploy 

Теперь можно перейти по адресу https://.azurewebsites.net , чтобы увидеть работающее приложение, использующее Службу приложений и Базу данных Azure для MySQL.

Доступ к журналам приложения

Если необходимо устранить неполадки, можно просмотреть журналы приложения. Чтобы открыть удаленный поток журналов на локальном компьютере, используйте следующую команду.

az webapp log tail --name $ \ --resource-group $
az webapp log tail --name $env:WEBAPP_NAME ` --resource-group $env:RESOURCEGROUP_NAME 
az webapp log tail --name %WEBAPP_NAME% ^ --resource-group %RESOURCEGROUP_NAME% 

После завершения просмотра журналов нажмите клавиши CTRL+C, чтобы остановить поток.

Этот поток журналов также доступен по адресу https://.scm.azurewebsites.net/api/logstream .

Горизонтальное увеличение масштаба

Чтобы вы могли увеличить трафик в приложении, выполните горизонтальное увеличение масштаба до нескольких экземпляров с помощью следующей команды.

az appservice plan update --number-of-workers 2 \ --name $ \ --resource-group $
az appservice plan update --number-of-workers 2 ` --name $env:WEBAPP_PLAN_NAME ` --resource-group $env:RESOURCEGROUP_NAME 
az appservice plan update --number-of-workers 2 ^ --name %WEBAPP_PLAN_NAME% ^ --resource-group %RESOURCEGROUP_NAME% 

Поздравляем! Вы создали и масштабировали веб-приложение Java, используя Spring Framework, JSP, Spring Data, Hibernate, JDBC, Службу приложений в Linux и Базу данных Azure для MySQL.

Очистка ресурсов

Ранее вы создали ресурсы Azure в группе ресурсов. Если эти ресурсы вам не понадобятся в будущем, вы можете удалить группу ресурсов, выполнив следующую команду.

az group delete --name $
az group delete --name $env:RESOURCEGROUP_NAME 
az group delete --name %RESOURCEGROUP_NAME% 

Следующие шаги

Ознакомьтесь с другими вариантами конфигурации и вариантами CI/CD, доступными для Java в Службе приложений.

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

Дорбого времени суток, изучаю спринг, хочу попробвать игрушечные мини сайтик (чисто для себя и учебных целей, чтобы не только на локальном сервере через intelliJIDEA запускать, а еще уметь вот так вот, сразу на хост) залить на сервер/хостинг. Как это сделать? Что для этого надо?
Я погуглил, нагуглил, что надо покупать хостинг VPS (что очень дорого для обычных тестов лабы1 лабы2) и там через apache уже ставить. Есть ли еще способы, менее затратные?

  • Вопрос задан более трёх лет назад
  • 1359 просмотров

Комментировать

Решения вопроса 0

Ответы на вопрос 3

Попробуйте heroku. Там есть инструкция для maven и gradle
Платформа берет ваш исходный код из репозитория и разворачивает на своих серверах. За поиграться платить не придется

Ответ написан более трёх лет назад

Комментировать

Нравится 1 Комментировать

thexaver

Hetzner cloud, vscale, reg.ru, все они с почасовой оплатой

Ответ написан более трёх лет назад

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

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