限时领|《AI 百问百答》专栏课+实体书(包邮)! 了解详情
写点什么

部署 Java EE 应用到 Azure: 第 2 部分

  • 2020-03-30
  • 本文字数:5017 字

    阅读完需:约 16 分钟

部署 Java EE 应用到 Azure: 第 2 部分

这是系列博客的第二篇,本篇将继续带您逐步了解这种在 Azure 中运行 Java EE 应用的方法。第一部分 讲述了如何将 Java EE 应用程序部署到一个 微软 Azure 虚拟机 上并使用 Azure 数据库 PostgreSQL 的服务作为后台数据库。


在这一部分,我们将使用 Java EE 应用程序作为 Docker 容器部署在 Azure 容器实例上。在这个博客中使用的例子中建立了一个简单的三层应用程序,使用了 Java EE 8 规范,如 JAX-RS,EJB,CDI,JPA,JSF,Bean Validation。我们将使用 Payara 服务器 部署应用并使用关系型数据库 PostgreSQL



在本教程中,我们将介绍:


  • 在 Azure 上建立 Postgres

  • Dockerize Java EE 应用程序并设置 Azure 容器注册表来存储 Docker 镜像

  • 应用程序部署到 Azure 容器实例

  • 探索其功能


通过少量调整,在该教程中使用的应用程序已被 Reza Rahman 改编为 一个项目

先决条件

你需要一个 微软 Azure 账号 以及 Azure CLI 来完成这个教程。


如果你没有一个 Azure 账号, 可以点击并免费注册! Azure CLI 是一个管理 Azure 资源的跨平台的命令行工具 - 请使用这些说明安装。

首先第一件事情…

使用 Azure CLI 设置将用于本教程的 Azure 订阅 ID。


设置 Azure 订阅 ID


export AZURE_SUBSCRIPTION_ID=[to be filled]az account set --subscription $AZURE_SUBSCRIPTION_ID
复制代码


创建一个含所有服务(资源)的包,其中一部分作为本教程的资源组。资源组是像储存着相关资源 Azure solution 的逻辑容器。资源组包含着你想要管理的资源。


创建资源组


export AZURE_RESOURCE_GROUP_NAME=[to be filled]export AZURE_LOCATION=[to be filled]az group create --name $AZURE_RESOURCE_GROUP_NAME --location $AZURE_LOCATION
复制代码

在 Azure 上安装 Postgres

Azure Database for PostgreSQL 是一个建立在开源的 Postgres 数据库引擎 关系型数据库服务。 这是一个完全托管型的数据库服务,提供两种部署选项可用, 作为作为单一的服务器 或者是作为 一个超大规模 (Citus) 集群


在这次教程中我们将使用 “单一服务器” 选项


我们将使用 az postgres server create 命令在 Azure 上创建一个 Postgres 服务器实例。首先,设置了一些服务器的属性,如名称、管理员账号等等。


export AZURE_POSTGRES_SERVER_NAME=[to be filled]export AZURE_POSTGRES_ADMIN_USER=[to be filled]export AZURE_POSTGRES_ADMIN_PASSWORD=[to be filled]export SKU=B_Gen5_1export STORAGE=5120
复制代码


对于存储和 SKU 选项,请参阅 这篇文档


然后调用命令来启动数据库实例的创建:


az postgres server create --resource-group $AZURE_RESOURCE_GROUP_NAME --name $AZURE_POSTGRES_SERVER_NAME  --location $AZURE_LOCATION --admin-user $AZURE_POSTGRES_ADMIN_USER --admin-password $AZURE_POSTGRES_ADMIN_PASSWORD --storage-size $STORAGE --sku-name $SKU

复制代码


该配置将需要几分钟的时间。


要检查你刚才供应的 Postgres 数据库实例的详细信息,调用 az postgres server show 命令:


az postgres server show --resource-group $AZURE_RESOURCE_GROUP_NAME --name $AZURE_POSTGRES_SERVER_NAME
复制代码


你应该得到一个 JSON 响应。请记下 fullyQualifiedDomainName 属性的值,你将稍后使用它连接到 Postgres 的实例。


应该是以下格式:* [AZURE_POSTGRES_DB_NAME] .postgres.database.azure.com *

允许 Azure 容器实例访问 Postgres 数据库

在后面的文章中,我们将看到如何将应用程序部署到 Azure 容器实例。但是,Postgres 数据库并不是默认外部服务访问。我们将使用 az postgres server firewall-rule create 命令创建防火墙规则明确允许 Azure 的服务来访问 Postgres 的实例 - 这将允许部署 Azure 容器实例内的 Postgres 的通信的 JavaEE 应用。


export FIREWALL_RULE_NAME=AllowJavaEECafeAppOnACIaz postgres server firewall-rule create --resource-group $AZURE_RESOURCE_GROUP_NAME --server-name $AZURE_POSTGRES_SERVER_NAME --start-ip-address=0.0.0.0 --end-ip-address=0.0.0.0 --name $FIREWALL_RULE_NAME

复制代码


此设置允许从 Azure 网络内的所有 IP 网络连接。供生产使用,尝试配置最严格的防火墙规则可能

安装 Azure 容器注册表

Azure 容器注册表是一个管理私人 Docker 注册服务的用来存储和管理的私人 Docker 容器的镜像(它基于开源的 Docker 注册表 2.0)。您可以使用 Azure 容器注册表与您现有容器的开发和部署管道或者使用 Azure容器注册表任务 在 Azure 构建容器的镜像。您可以构建点播,或构建完全自动的触发器,如源代码提交和基本图像更新。


让我们创建一个注册表存储 Docker 镜像的 JavaEE 应用,使用 az acr create 命令。


export ACR_NAME=javaeecafe-acraz acr create --resource-group $AZURE_RESOURCE_GROUP_NAME --name $ACR_NAME --sku Basic --admin-enabled true

复制代码


我们使用的是*Basic* SKU。有效值是:*Basic*, *Classic*, *Premium*, *Standard*


一旦创建它,​​您可以登录到注册表,并检查登录服务器


az acr login --name $ACR_NAMEaz acr show --name $ACR_NAME --query loginServer --output table
复制代码


你很快就会使用 ACR 登录服务器名。它的值为如下格式: * [ACR_NAME] .azurecr.io *

安装并准备应用镜像

克隆 Git 仓库


git clone https://github.com/abhirockzz/javaee-on-azure-caascd javaee-on-azure-caas
复制代码


您需要输入 Postgres 的连接信息以 在web.xml中提交贡献。


你可以在 *javaee-on-azure-iaas/src/main/webapp/WEB-INF*下找到 *web.xml* 文件


格式如下:


jdbc:postgresql://[POSTGRES_FQDN]:5432/postgres?user=[AZURE_POSTGRES_ADMIN_USER]@[AZURE_POSTGRES_SERVER_NAME]&password=[AZURE_POSTGRES_ADMIN_PASSWORD]&sslmode=require

复制代码


以下是一部分形成 JDBC URL 的列表占位符:


  • POSTGRES_FQDN 值为 fullyQualifiedDomainName

  • AZURE_POSTGRES_ADMIN_USER + 管理员用户名 用于规定 PG

  • AZURE_POSTGRES_SERVER_NAME + 用户名称 用来规定 PG

  • AZURE_POSTGRES_ADMIN_PASSWORD + 管理员密码 用于规定 PG


设置所需的值


export POSTGRES_FQDN=export AZURE_POSTGRES_ADMIN_USER=export AZURE_POSTGRES_SERVER_NAME=export AZURE_POSTGRES_ADMIN_PASSWORD=
复制代码


只需使用这些命令来代替web.xml内容


export FILE_NAME=javaee-on-azure-iaas/src/main/webapp/WEB-INF/web.xmlsed -i 's/POSTGRES_FQDN/'"$POSTGRES_FQDN"'/g' $FILE_NAMEsed -i 's/AZURE_POSTGRES_SERVER_NAME/'"$AZURE_POSTGRES_SERVER_NAME"'/g' $FILE_NAMEsed -i 's/AZURE_POSTGRES_ADMIN_USER/'"$AZURE_POSTGRES_ADMIN_USER"'/g' $FILE_NAMEsed -i 's/AZURE_POSTGRES_ADMIN_PASSWORD/'"$AZURE_POSTGRES_ADMIN_PASSWORD"'/g' $FILE_NAME
复制代码


这里是``部分形式的案例:


<data-source>        <name>java:global/JavaEECafeDB</name>        <class-name>org.postgresql.ds.PGPoolingDataSource</class-name>        <url>jdbc:postgresql://foobar-pg.postgres.database.azure.com:5432/postgres?user=foobar@foobar-pg&amp;password=foobarbaz&amp;sslmode=require</url></data-source>
复制代码


应用程序配置好了。现在让我们建立它!


mvn clean install
复制代码


你应该有这个 WAR 文件可用。确认下吧


ls -lrt target | grep javaee-cafe.war
复制代码

构建和发布镜像到 Azure 容器注册表

我们的应用程序神器(WAR文件)已准备就绪。现在,我们可以建立 Docker 镜像并将其应用到 Azure 容器注册表。这里可用快速浏览一下Dockerfile用于创建镜像。


FROM payara/server-fullCOPY target/javaee-cafe.war $DEPLOY_DIRRUN wget https://jdbc.postgresql.org/download/postgresql-42.2.8.jarRUN cp /opt/payara/postgresql-42.2.8.jar ${PAYARA_DIR}/glassfish/domains/${DOMAIN_NAME}/lib && rm /opt/payara/postgresql-42.2.8.jarEXPOSE 8080
复制代码


它建立在payara/server-full,从那里可自动检测和部署,下载 Postgres 的 JDBC 驱动程序,并将其放置在适当的位置为副本的WARfile 到一个文件夹 Payara 应用服务器。就是它!


export DOCKER_IMAGE=javaee-cafedocker build -t $DOCKER_IMAGE .docker tag $DOCKER_IMAGE $ACR_NAME.azurecr.io/$DOCKER_IMAGE
复制代码


发布镜像:


docker push $ACR_NAME.azurecr.io/$DOCKER_IMAGE
复制代码


使用 az acr repository list 命令来确认:


az acr repository list --name $ACR_NAME --output table
复制代码

将应用程序部署到 Azure 容器实例

Azure 容器实例允许你在 Azure 中运行容器,而无需管理任何虚拟机,或者采用更高级别的服务。这是一个可以在隔离容器中,如简单的应用程序、自动化任务、建立工作运行,在任何场景下的解决方案。对于您需要完整的容器业务流程,包括跨多个容器,自动缩放服务发现和协调的应用升级的情况,请看看 Azure Kubernetes Service (AKS)


我们现在准备部署 JavaEE 应用到 Azure 容器实例。当你创建一个容器实例,你可以指定自定义 DNS 名称标签来让你的应用程序是在 customlabel.azureregion.azurecontainer.io可获得的。


export ACI_CONTAINER_NAME=javaee-cafeexport DNS_NAME_LABEL=javaee-cafe
复制代码


我们需要 Azure 容器注册表的密码来运行在 Azure 容器实例中的 Docker 镜像。


az acr credential show --name $ACR_NAME
复制代码


在下面输入命令来创建容器并输入密码(上面获得的)提示时:


az container create --resource-group $AZURE_RESOURCE_GROUP_NAME --name $ACI_CONTAINER_NAME --image $ACR_NAME.azurecr.io/$DOCKER_IMAGE --dns-name-label $DNS_NAME_LABEL --registry-username $ACR_NAME --ports 8080
复制代码


*--ports 8080 * 确保我们能够从端口 * 8080 *访问应用程序。这是因为 Payara 应用服务器默认从* 8080 *提供端口的 HTTP 流量。


部署将需要一段时间。这时,您可以跟踪使用日志:


az container attach -g $AZURE_RESOURCE_GROUP_NAME -n $ACI_CONTAINER_NAME
复制代码


您应该看到日志消息显示 JavaEE-cafe 应用的成功部署


[yyyy-mm-ddT13:34:21.317+0000] [Payara 5.193] [INFO] [NCLS-DEPLOYMENT-02035] [javax.enterprise.system.tools.deployment.autodeploy] [tid: _ThreadID=104 _ThreadName=payara-executor-service-scheduled-task] [timeMillis: 1574084061317] [levelValue: 800] [[    [AutoDeploy] Successfully autodeployed : /home/abhishgu/payara5/glassfish/domains/domain1/autodeploy/javaee-cafe.war.]]
复制代码

探索应用

访问 JSF 前端

使用浏览器访问http://[APP_FQDN]:8080/javaee-cafe。您可以使用用户界面来创建,删除和查看 coffees。


APP_FQDN只不过是 DNS 标签和 Azure region 的组合,如 http://javaee-cafe.southeastasia.azurecontainer.io:8080/javaee-cafe



Java EE cafe 应用页面

使用 REST API

该应用程序还公开一个 REST API 用于创建,删除和列出 coffees。


export JAVAEE_ACI_REST=http://javaee-cafe.southeastasia.azurecontainer.io:8080/javaee-cafe/rest/coffees
复制代码


创建 coffees


curl -X POST $JAVAEE_ACI_REST:8080/javaee-cafe/rest/coffees -d '{"name":"cappuccino","price":"10"}' -H "Content-Type: application/json"curl -X POST $JAVAEE_ACI_REST:8080/javaee-cafe/rest/coffees -d '{"name":"caffe-latte","price":"15"}' -H "Content-Type: application/json"
复制代码


获得所有 coffees


curl -H "Accept: application/json" $JAVAEE_ACI_REST:8080/javaee-cafe/rest/coffees
复制代码


你应该看到一个 JSON 响应列出你刚才添加的 coffee 选项


通过 ID 获取 coffee


curl -H "Accept: application/json" $JAVAEE_ACI_REST:8080/javaee-cafe/rest/coffees/1
复制代码


通过 ID 删除 coffee


curl -X DELETE $JAVAEE_ACI_REST:8080/javaee-cafe/rest/coffees/1curl -H "Accept: application/json" $JAVAEE_ACI_REST:8080/javaee-cafe/rest/coffees
复制代码


注意到 cappiccino 现在被删除了

清除资源

一旦您完成探索应用程序,你可以删除该资源。因为我们使用了资源组,执行一个命令很容易实现。


请注意,这将删除所有的资源,其中包括你的教程( Azure 容器注册表,Postgres 等)和其他你放在资源组里面的其他服务实例。


az group delete --name $AZURE_RESOURCE_GROUP_NAME
复制代码

总结

您了解了如何利用 Docker 容器来打包并配置 Azure 容器实例的应用程序,并使用托管数据库来提供长期持久服务。


第三部分将介绍Kubernetes 作为我们的 Java EE 应用部署平台。敬请关注!


原文链接https://medium.com/microsoftazure/deploying-java-ee-apps-to-azure-part-2-37d73d0ee401


2020-03-30 19:14590

评论

发布
暂无评论
发现更多内容

推动科技教育普惠|2023开放原子全球开源峰会校源行分论坛即将启幕

开放原子开源基金会

开源 开放原子全球开源峰会 开放原子

2023数字政府高质量发展论坛在京召开

信通院IOMM数字化转型团队

数字化转型 数字政府 IOMM 政府数字化转型

开源教育与人才|2023开放原子全球开源峰会开源教育和人才分论坛即将启幕

开放原子开源基金会

开源 开放原子 教育与人才

软件测试/测试开发丨接口测试实战学习笔记

测试人

程序员 软件测试 自动化测试 接口测试 测试开发

累计下载破 10 万,阿里云 ACR 制品中心 5 月最受欢迎镜像排行榜

阿里巴巴云原生

阿里云 阿里云云原生 容器镜像服务

恒参信道特性及其对信号传输的影响

timerring

信息论

Web3 游戏的用户留存的挑战与机遇:从经济模型与游戏设计谈起

Footprint Analytics

区块链游戏 web3 web3游戏

ChatGPT应用助推跨境电商发展,低代码凭啥不行?!

加入高科技仿生人

低代码 跨境电商 ChatGPT JNPF

展望开源产业与数字经济未来|2023开放原子全球开源峰会开源创新理论与实践分论坛即将启幕

开放原子开源基金会

开源 开放原子

瑞云科技CTO赵志杰出席广州广告数字创意峰会并发表演讲

3DCAT实时渲染

元宇宙 实时云渲染 云3D渲染

中企出海,全球供应链业务如何更有效地经营?

用友BIP

中企出海 全球供应链

信道的数学模型

timerring

信息论

财务共享中心搭建以后,如何进行精细化管理?

用友BIP

财务共享

通义千问预体验,如何让 AI 模型应用“奔跑”在函数计算上?

阿里巴巴云原生

阿里云 云原生 函数计算

【活动回顾】Databend 数据库表达式框架设计与实现 @GOTC

Databend

共建、共享开源EDA共性技术框架 | 2023开放原子全球开源峰会开源EDA分论坛即将启幕

开放原子开源基金会

开源 EDA 开放原子

开源数据库迎来技术创新拐点|2023开放原子全球开源峰会开源数据库分论坛即将启幕

开放原子开源基金会

数据库 开源 开放原子

活动回顾丨首期阿里云 Serverless 技术创新实战营上海开讲(含 PPT 下载)

阿里巴巴云原生

阿里云 Serverless 云原生

为什么 AIGC 和大模型创业者都在安利向量数据库?

Zilliz

Milvus AIGC 向量数据库 zillizcloud

单卡轻松打造 ChatGPT 竞争者“原驼”,QLoRA 革新大语言模型微调技术

Zilliz

openai AIGC Towhee ChatGPT

多数据中心助力中企出海全球化经营

用友BIP

中企出海

对线面试官-线程池(二)

派大星

Java 面试题

火山引擎A/B测试:MAB智能调优实验,企业活动效果提升新利器

字节跳动数据平台

AB testing实战 A/B 测试

9秒被骗245万元?AI火了,骗子也来了!

引迈信息

AI 低代码 JNPF AI诈骗

企业出海,全球合并有高招!

用友BIP

中企出海

聊点技术 | 可观测性十问十答

博睿数据

可观测性 智能运维 博睿数据 发展趋势 聊点技术

wireshark分析tcp传输之文件上传速率问题

蓝胖子的编程梦

TCP 网络 Wireshark tcpdump 抓包

解读科学计算助力行业高质量发展|2023开放原子全球开源峰会科学智能分论坛即将启幕

开放原子开源基金会

人工智能 开源 开放原子 科学智能

中核集团财务共享迈上新台阶

用友BIP

财务共享

轻松掌握,板对板连接器选型指南

元器件秋姐

电路 元器件 PCB 连接器 PCB设计

悦数图数据库:图 + AI 在金融行业的应用及技术前瞻

悦数图数据库

AI 金融 图数据库实战

部署 Java EE 应用到 Azure: 第 2 部分_文化 & 方法_Azure 中文精选_InfoQ精选文章