将Spring Boot Web服务(JAR文件格式)部署到Azure App Service

将 Spring Boot Web 服务部署到 Azure App Service(JAR 文件格式)。

spring-boot_on_azure-app-service.png

为了什么

在Windows 11上通过Linux进行云开发。

您可以在此处查看文章列表。

 

实现

将以JAR文件格式的Spring Boot Web应用程序部署到Microsoft Azure App Service。

技術话题

微软 Azure 应用服务是什么?

Azure 上运行的容器应用程序平台。
Microsoft Azure App Service 是 Microsoft Azure 的PaaS(Platform as a Service)服务之一,专注于托管Web应用程序、移动应用程序和API应用程序的服务。特征和优点
描述

简单的部署
Azure App Service 可以使用 Azure Portal、Azure CLI、Azure DevOps 等工具轻松部署Web应用程序。此外,它支持多种编程语言和框架,可以灵活开发。

可扩展性
Azure App Service 支持自动扩展和手动扩展,可以根据应用程序负载灵活扩展。

高可用性
Azure App Service 具有全球负载均衡和故障转移功能,可以实现高可用性。

集成
Azure App Service 可以与 Azure 的其他服务无缝集成。例如,与 Azure SQL 数据库和 Azure 存储等存储服务协同工作,轻松管理应用程序数据。

安全性
Azure App Service 提供网络安全组(NSG)和Web应用程序防火墙(WAF)等安全功能,可以增强应用程序的安全性。

通过这些特点和优势,Azure App Service 成为开发人员和企业开发和部署高速且灵活的Web应用程序的平台。

开发环境

    Windows 11 Home 22H2 を使用しています。
由于我会使用WSL上的Ubuntu,所以对于使用macOS的用户也可以参考。
WSL(Microsoft Store应用程序版)※ 您可以在此相关文章中查看安装方法
> wsl –version
WSL版本:1.0.3.0
内核版本:5.15.79.1
WSLg版本:1.0.47Ubuntu※ 您可以在此相关文章中查看安装方法
$ lsb_release -a
没有可用的LSB模块。
分发商ID:Ubuntu
描述:Ubuntu 22.04.1 LTS
版本:22.04

Java JDK※ 您可以在此相关文章中查看安装方法
$ java -version
openjdk版本:“11.0.18” 2023-01-17
OpenJDK运行时环境(构建11.0.18+10-post-Ubuntu-0ubuntu122.04)
OpenJDK 64位服务器VM(构建11.0.18+10-post-Ubuntu-0ubuntu122.04,混合模式,共享)

Maven※ 您可以在此相关文章中查看安装方法
$ mvn -version
Apache Maven 3.6.3
Maven主目录:/usr/share/maven
Java版本:11.0.18,厂商:Ubuntu,运行时:/usr/lib/jvm/java-11-openjdk-amd64

在这篇文章中,我们主要使用Ubuntu终端进行操作。为了帮助初次学习如何使用Vim复制和粘贴的人们,下面的文章介绍了具体的步骤。请务必尝试一下。

 

展示 “Hello World” 的步骤

创建Spring Boot Web服务

以下是解释从这篇相关文章的延续的步骤的文章。

 

进入Spring Boot应用的项目文件夹中

我們切換到專案資料夾。
※ 我們將 ~/tmp/hello-spring-boot 視為專案資料夾。

$ cd ~/tmp/hello-spring-boot

构建Spring Boot应用程序

构建Java应用程序。
※ 将创建目标/app.jar。

$ mvn clean package

在Azure环境中登录

以下是解释从这篇相关文章的继续的步骤的文章。

 

使用Azure CLI登录。

$ az login

蔚藍的环境

资源组

创建资源组。

$ az group create \
    --name rg-hello \
    --location japaneast
打开说明。这个命令使用Azure CLI创建Azure资源组。

命令
内容

az group create
用于创建Azure资源组的命令。

选项

内容

–name
rg-hello
指定资源组的名称。

–location
japaneast
指定要创建资源组的位置为japaneast。japaneast代表Azure的日本东部地区。

应用服务计划

创建 App Service 计划。

$ az appservice plan create \
    --resource-group rg-hello \
    --name asp-hello \
    --sku Free \
    --is-linux
打开说明。这个命令是用来创建App Service计划的。

命令
内容

az appservice plan create
用于创建App Service计划的命令。

选项
数值
内容

–resource-group
rg-hello
指定要创建App Service计划的资源组的名称。

–name
asp-hello
指定App Service计划的名称。

–sku
Free
指定App Service计划的服务级别。在此情况下,选择了免费计划。

–is-linux

指定App Service计划是否是基于Linux主机的。

我将尝试列出App Service计划。

$ az appservice plan list
如果要删除 App Service 计划,则使用以下命令。
$ az appservice plan delete -n <plan> -g <group>

应用服务网页应用

我們將進行網頁應用程式的開發。

$ az webapp create \
    --resource-group rg-hello \
    --plan asp-hello \
    --name app-hello-spring-boot \
    --runtime "JAVA:11-java11"
打开说明。这个命令是用来创建App Service Web应用程序的。

命令
描述

az webapp create
用于创建App Service Web应用程序的命令。

选项

描述

–resource-group
rg-hello
指定要创建App Service Web应用程序的资源组名称。

–plan
asp-hello
指定要创建App Service Web应用程序的App Service计划名称。

–name
app-hello-spring-boot
指定App Service Web应用程序的名称。

–runtime
“JAVA:11-java11”
配置App Service Web应用程序在Java 11运行时上运行。

设置Web应用的启动命令。

$ az webapp config set \
    --resource-group rg-hello \
    --name app-hello-spring-boot \
    --startup-file "java -jar /home/site/wwwroot/app.jar --server.port=80"
打开说明。此命令用于更改App Service Web应用的设置。

命令
内容

az webapp config set
用于更改App Service Web应用设置的命令。

选项

内容

–resource-group
rg-hello
指定包含App Service Web应用的资源组的名称。

–name
app-hello-spring-boot
指定App Service Web应用的名称。

–startup-file
“java -jar /home/site/wwwroot/app.jar –server.port=80”
设置App Service Web应用以使用80端口运行。

进行Web应用程序部署。

$ az webapp deploy \
    --resource-group rg-hello \
    --name app-hello-spring-boot \
    --src-path target/app.jar \
    --type jar
打开说明。这条命令用于将新代码部署到App Service Web应用程序。

命令
内容

az webapp deploy
这是一个用于在App Service Web应用程序中部署新代码的命令。

选项

内容

–resource-group
rg-hello
指定包含App Service Web应用程序的资源组名称。

–name
app-hello-spring-boot
指定App Service Web应用程序的名称。

–src-path
target/app.jar
指定要部署到App Service Web应用程序的代码位置。

–type
jar
指定要部署到App Service Web应用程序的代码是JAR文件。

要删除 App Service Web 应用程序,请使用以下命令。
$ az webapp delete -n <name> -g <group>

确认Web应用程序的运行

执行以下命令后,将打开网页浏览器。

$ az webapp browse \
    --resource-group rg-hello \
    --name app-hello-spring-boot
虽然需要一些时间才能启动,请稍等片刻,页面将会显示出来。然而,显示的页面”/”没有设置内容。
image.png
https://app-hello-spring-boot.awesomewebsites.net/api/data

通过WEB浏览器显示了 {“message”:”你好,世界!”} ,也成功获取到了JSON数据。

我会用curl命令从另一个终端进行确认。

$ curl -v https://app-hello-spring-boot.awesomewebsites.net/api/data
显示详细信息。
$ curl -v https://app-hello-spring-boot.awesomewebsites.net/api/data
* 尝试连接 xx.xx.xx.xx:443…
* 已连接到 app-hello-spring-boot.awesomewebsites.net (xx.xx.xx.xx) 的 443 端口 (#0)
* ALPN,支持 h2
* ALPN,支持 http/1.1
* CA 文件: /etc/ssl/certs/ca-certificates.crt
* CA 路径: /etc/ssl/certs
* TLSv1.0(输出),TLS 标头,证书状态(22):
* TLSv1.3 (输出),TLS 握手,客户端 hello(1):
* TLSv1.2 (输入),TLS 标头,证书状态(22):
* TLSv1.3 (输入),TLS 握手,服务器 hello(2):
* TLSv1.2 (输入),TLS 握手,证书(11):
* TLSv1.2 (输入),TLS 握手,服务器密钥交换(12):
* TLSv1.2 (输入),TLS 握手,服务器完成(14):
* TLSv1.2 (输出),TLS 标头,证书状态(22):
* TLSv1.2 (输出),TLS 握手,客户端密钥交换(16):
* TLSv1.2 (输出),TLS 标头,Finished(20):
* TLSv1.2 (输出),TLS 切换密码套件,Change cipher spec(1):
* TLSv1.2 (输出),TLS 标头,证书状态(22):
* TLSv1.2 (输出),TLS 握手,Finished(20):
* TLSv1.2 (输入),TLS 标头,Finished(20):
* TLSv1.2 (输入),TLS 标头,证书状态(22):
* TLSv1.2 (输入),TLS 握手,Finished(20):
* 使用 TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384 进行 SSL 连接
* ALPN,服务器接受使用 h2
* 服务器证书:
* 主题: C=US;ST=WA;L=Redmond;O=Microsoft Corporation;CN=*.awesomewebsites.net
* 开始日期: Dec 27 21:12:39 2022 GMT
* 过期日期: Dec 22 21:12:39 2023 GMT
* 主题备用名称: 证书的 “* .awesomewebsites.net” 匹配主机 “app-hello-spring-boot.awesomewebsites.net”
* 发行者: C=US;O=Microsoft Corporation;CN=Microsoft Azure TLS 发行 CA 05
* SSL 证书验证通过。
* 使用 HTTP2,服务器支持多路复用
* 连接状态改变(已确认 HTTP/2)
* 在升级后将 HTTP/2 数据从流缓冲区复制到连接缓冲区: 长度=0
* TLSv1.2 (输出),TLS 标头,补充数据(23):
* TLSv1.2 (输出),TLS 标头,补充数据(23):
* TLSv1.2 (输出),TLS 标头,补充数据(23):
* 使用 Stream ID: 1(易用句柄 0x556a1919fe90)
* TLSv1.2 (输出),TLS 标头,补充数据(23):
> GET /api/data HTTP/2
> Host: app-hello-spring-boot.awesomewebsites.net
> user-agent: curl/7.81.0
> accept: */*
>
* TLSv1.2 (输入),TLS 标头,补充数据(23):
* TLSv1.2 (输出),TLS 标头,补充数据(23):
* TLSv1.2 (输入),TLS 标头,补充数据(23):
* TLSv1.2 (输入),TLS 标头,补充数据(23):
* TLSv1.2 (输入),TLS 标头,补充数据(23):
< HTTP/2 200
< content-type: application/json
< date: Wed, 08 Mar 2023 02:56:49 GMT
< set-cookie: ARRAffinity=f7e8112d174b035dedc0e95aa90dd578d821ba1ae7596ea4277e4837d982995e;Path=/;HttpOnly;Secure;Domain=app-hello-spring-boot.awesomewebsites.net
< set-cookie: ARRAffinitySameSite=f7e8112d174b035dedc0e95aa90dd578d821ba1ae7596ea4277e4837d982995e;Path=/;HttpOnly;SameSite=None;Secure;Domain=app-hello-spring-boot.awesomewebsites.net
<
* TLSv1.2 (输入),TLS 标头,补充数据(23):
* 连接到主机 app-hello-spring-boot.awesomewebsites.net 的连接 #0 已保持
{“message”:”你好,世界!”}

在终端中显示{“message”: “你好世界!”},并成功获取了JSON数据。

Azure App Service支持SSL/TLS和HTTP/2协议。

SSH 连接

使用 SSH 与 Web 应用程序建立连接。

$ az webapp ssh \
    --resource-group rg-hello \
    --name app-hello-spring-boot
打开说明。此命令用于在Azure App Service Web应用程序上建立SSH连接。

命令
内容

az webapp ssh
用于在App Service Web应用程序上建立SSH连接的命令。

选项

内容

–resource-group
rg-hello
指定包含App Service Web应用程序的资源组名称。

–name
app-hello-spring-boot-ssh
指定App Service Web应用程序的名称。

连接到Web应用程序后,请确认目录。
※退出Web应用程序时,请按ctrl + D。

# pwd
/home
# ls -la
total 8
drwxrwxrwx    2 nobody   nobody        4096 Mar  9 08:11 .
drwxr-xr-x   59 root     root          4096 Mar  9 08:15 ..
drwxrwxrwx    2 nobody   nobody           0 Mar  9 08:11 ASP.NET
drwxrwxrwx    2 nobody   nobody           0 Mar  9 08:11 Data
drwxrwxrwx    2 nobody   nobody           0 Mar  9 08:11 DeploymentLogStream
drwxrwxrwx    2 nobody   nobody           0 Mar  9 08:13 LogFiles
drwxrwxrwx    2 nobody   nobody           0 Mar  9 08:11 b55a56dcdaabfb523bb54570
drwxrwxrwx    2 nobody   nobody           0 Mar  9 08:11 site

让我们尝试显示Web应用程序的信息。

# cat /etc/*-release
3.14.6
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.14.6
PRETTY_NAME="Alpine Linux v3.14"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://bugs.alpinelinux.org/"
确认了这个 App Service Web 应用是基于 Alpine Linux 构建的。

总结

我能在 Azure App Service 环境中启动JAR文件格式的Spring Boot Web服务。

使用Maven和Azure CLI,您可以通过终端完成从Spring Boot应用程序开发到部署到Azure环境的整个过程。这样,您可以增进在云计算系统开发所需的技能和理解。即使是初学者,也可以轻松地按照步骤进行操作,所以请务必尝试一下。

你觉得怎么样呢?作为验证目的,在WSL Ubuntu上,你可以轻松地在Azure App Service环境中启动Spring Boot Web应用程序。请务必尝试一下。我们将继续介绍Azure的开发环境等内容,请敬请期待。

推荐内容

 

bannerAds