写点什么

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

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

    阅读完需:约 17 分钟

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

基于云的应用程序开发有多种选择,包括传统的 IaaS(基础架构即服务), PaaS(平台即服务)和 CaaS( 容器即服务)一直到 KubernetesServerless (无服务器)(也许还有更多我未提及!)。思考实际应用范围,而不是 “一种适合所有模型的方法” ,每种选择都有其优缺点。 最终, 每个场景都是唯一的,最终选择取决于需求 — 但是有很多 “选择” 总是好的!



这是系列博客的第一篇,它将带您逐步了解其中一种在 Azure 中运行 Java EE 应用的方法。 我们将采用最基本的方法将 Java EE 应用部署在一个 Azure 虚拟机 以及 Azure PostgreSQL 数据库 服务作为后端数据库。本质上, 这是结合 IaaS (Azure 虚拟机) 与 PaaS ( Azure 中托管的 PostgreSQL )


其他选项(例如容器和 Kubernetes)将在以后的文章中介绍


本文中使用的示例是一个简单的三层应用程序,该应用使用 Java EE 8 规范,例如 JAX-RS,EJB,CDI,JPA,JSF,Bean 验证。 我们将使用 Payara服务器 部署应用程序,并使用 PostgreSQL 用作关系数据库。


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


  • Azure 中 Postgres 和虚拟机设置

  • 在虚拟机中设置 Payara 服务器

  • 配置和安装 Java EE 应用

  • 探索其功能


除某些微小改动外, 本教程中使用的应用来自 Reza Rahman此项目

先决条件

你将需要 微软 Azure 账号Azure CLI 来完成本教程。


如果没有微软账户, 在此 免费注册 。Azure CLI 是一个成熟的管理 Azure 资源跨平台命令行 — 请使用 这些指示 安装。

第一件事情

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


设置您的 Azure 订阅 ID:


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


创建一个资源组,其中将包含您将在本教程中创建的所有服务(资源)。 资源组就像一个逻辑容器,其中包含用于 Azure 解决方案的相关资源。 资源组包括您要作为组管理的那些资源。


创建资源组:


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 中安装 PostgreSQL

用于PostgreSQL的Azure数据库 是一个基于开源 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
复制代码


设置过程将花费几分钟。


使用 az postgres server show 命令,检查刚刚配置的 Postgres 数据库实例的详细信息。


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 中安装虚拟机

我们将使用 Azure 虚拟机 托管 Payara JavaEE 应用程序服务器。具体来说,这将是基于 Ubuntu 的 Linux 虚拟机。


首先,设置虚拟机所需的信息:


export AZURE_VM_NAME=[to be filled]export AZURE_VM_USER=[to be filled]export AZURE_VM_PASSWORD=[to be filled]export VM_IMAGE=UbuntuLTS
复制代码


我们将使用 az vm create 命令创建虚拟机实例:


az vm create --resource-group $AZURE_RESOURCE_GROUP_NAME --name $AZURE_VM_NAME --image $VM_IMAGE --admin-username $AZURE_VM_USER --admin-password $AZURE_VM_PASSWORD
复制代码


此虚拟机配置将花费几分钟。


使用 az vm list-ip-addresses 命令,获取虚拟机的公共 IP 地址。


az vm list-ip-addresses --resource-group $AZURE_RESOURCE_GROUP_NAME --name $AZURE_VM_NAME
复制代码


查看 JSON 格式响应 — 检查 publicIpAddresses 部分,并记下 ipAddress 属性的值。 将其配置为环境变量,因为您将在后续步骤中使用它。


export VM_IP=[to be filled]
复制代码

允许虚拟机访问 Postgres 数据库

默认情况下无法访问 Postgres 数据库。 使用 az postgres server firewall-rule create 命令创建防火墙规则,明确允许虚拟机访问 Postgres 实例。这将允许虚拟机内部署的 JavaEE 应用程序与 Postgres 通信。


export FIREWALL_RULE_NAME=AllowJavaEECafeAppOnVMaz postgres server firewall-rule create --resource-group $AZURE_RESOURCE_GROUP_NAME --server $AZURE_POSTGRES_SERVER_NAME --name $FIREWALL_RULE_NAME --start-ip-address $VM_IP --end-ip-address $VM_IP
复制代码

在虚拟机中安装 Payara 服务器

Payara 服务器 是派生自 GlassFish 开源应用程序服务器,它支持 Java EE 的可靠和安全部署。 (Jakarta EE) 和 MicroProfile 应用程序可在任何环境中使用:本地,云中或混合环境中。


GitHub 检出(git checkout 命令)此项目,或在 文档 了解更多!


ssh $AZURE_VM_USER@$VM_IP
复制代码


提示时输入密码。 登录虚拟机后,请继续以下步骤。

安装所需工具集

在安装 Payara 服务器之前,我们需要预安装某些配置,例如 JDK 等。


sudo apt-get updatesudo apt install openjdk-8-jdksudo apt install maven
复制代码

安装 Payara 服务器

我们使用 Payara 服务器 5.193.1 版本,这是撰写本教程时的最新版本。 该设置仅涉及下载和提取服务器 zip 文件。


export PAYARA_VERSION=5.193.1wget https://s3-eu-west-1.amazonaws.com/payara.fish/Payara+Downloads/$PAYARA_VERSION/payara-$PAYARA_VERSION.zipsudo apt install unzipunzip payara-$PAYARA_VERSION.zip
复制代码


运行 ls ~/payara5/ 进行验证。


使用 asadmin 启动服务器。


~/payara5/bin/asadmin start-domain
复制代码


服务器启动将需要一些时间。 您应该看到以下日志:


Waiting for domain1 to start ..................Successfully started the domain : domain1domain  Location: /home/abhishgu/payara5/glassfish/domains/domain1Log File: /home/abhishgu/payara5/glassfish/domains/domain1/logs/server.logAdmin Port: 4848Command start-domain executed successfully.
复制代码

设置和部署应用程序

此时我们已经启动并运行了虚拟机和 Payara 服务器,现在可以部署应用程序了。


首先克隆 Git 存储库:


git clone https://github.com/abhirockzz/javaee-on-azure-iaasexport APP_FOLDER_NAME=javaee-on-azure-iaas
复制代码


需要使用 Azure 中 Postgres 数据库的 JDBC URL 更新 web.xml 文件(在 javaee-on-azure-iaas/src/main/webapp/WEB-INF 下)。 它出现在部分 ``属性` 中,其格式如下:


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 实例 POSTGRES_FQDNfullyQualifiedDomainName 的值

  • AZURE_POSTGRES_ADMIN_USER 和管理员用户名用于配置 PG (Postgres)

  • AZURE_POSTGRES_SERVER_NAME 和服务器名称用于配置 PG

  • AZURE_POSTGRES_ADMIN_PASSWORD 和管理员密码用于配置 PG


设置所需的值:


export POSTGRES_FQDN=[to be filled]export AZURE_POSTGRES_ADMIN_USER=[to be filled]export AZURE_POSTGRES_SERVER_NAME=[to be filled]export AZURE_POSTGRES_ADMIN_PASSWORD=[to be filled]
复制代码


只需使用这些命令即可替换:


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 -f $APP_FOLDER_NAME/pom.xml
复制代码


我们开始确认是否有可用的 WAR 文件:


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


作为应用程序设置过程的最后一步, 下载 Postgres JDBC 驱动程序 并将其添加到 Payara 服务器。


当前使用驱动版本号 *42.2.8*


export PG_DRIVER_JAR=postgresql-42.2.8.jarwget https://jdbc.postgresql.org/download/$PG_DRIVER_JAR
复制代码


调用 asadmin add-library , 将 JAR 添加到 Payara:


~/payara5/glassfish/bin/asadmin add-library $PG_DRIVER_JAR
复制代码


最后,开始部署 WAR 文件,将其复制到域 autodeploy 文件夹中:


cp $APP_FOLDER_NAME/target/javaee-cafe.war ~/payara5/glassfish/domains/domain1/autodeploy
复制代码


部署将需要一些时间。 同时,您可以使用以下方法跟踪日志:


tail -f ~/payara5/glassfish/domains/domain1/logs/server.log
复制代码


您应该会看到 javaee-cafe 应用程序的日志消息,提示成功部署:


[2019-11-18T13: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.]]
复制代码

探索应用程序

现在该测试 JavaEE 应用了! 首先,我们可以使用网络浏览器访问该应用程序。 但是,就像 Postgres 实例一样,默认情况下,托管 Payara 服务器和应用程序的虚拟机也受到保护,即您无法从公共 Internet 访问它。


我们需要使用 az vm open-port 创建防火墙规则,使本地计算机可以访问它。 我们只需要公开端口 8080 ,因为这是 Payara 服务器使用的默认 HTTP 端口


az vm open-port --port 8080 --resource-group $AZURE_RESOURCE_GROUP_NAME --name $AZURE_VM_NAME
复制代码

访问 JSF 前端

使用浏览器打开 http://[ENTER_VM_IP]:8080/javaee-cafe. 你可以使用此图形交换系统创建、删除和列出咖啡(coffees)。

使用 REST API

该应用使用 REST API 同样用于创建、删除和列出咖啡(coffees)。


export VM_IP=[to be filled]
复制代码


创建咖啡:


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


获取全部咖啡:


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


此时应会看到 JSON 格式的响应,列出刚才添加的所有咖啡


通过 ID 获取咖啡:


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


通过 ID 删除咖啡:


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


注意 cappuccino 已删除。

清理资源

探索完应用程序后,您可以删除资源。 由于我们使用了资源组,因此执行单个命令很容易。


请注意,这将删除该组中的所有资源,包括您在教程中创建的资源(虚拟机,Postgres 等),如果资源组是之前创建,资源组中的其他服务实例也会删除


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

总结

您已通过学习如何在 Azure 中部署 Java EE 应用程序,掌握了使用虚拟机和托管数据库部属应用服务器,提供长期持久性支持。


如前所述,每个选项都有其优缺点。 在这种情况下,您可以完全控制应用程序,部署基础结构,扩展方式等。另一方面,请记住,管理基础结构、调整应用大小、安全防护等应用程序功能,是同交付核心业务价值一样,必须承担的一系列责任。


下一部分将深入探讨如何使用 Docker 容器平台来部署 Java EE 应用程序。 敬请关注!


原文链接https://medium.com/microsoftazure/deploying-java-ee-apps-to-azure-part-1-e895284b46d1


2020-03-30 19:14489

评论

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

Sqoop: Hadoop数据传输的利器【Sqoop实战】【上进小菜猪大数据系列】

上进小菜猪

hadoop 上进小菜猪

PS 2023中文一键安装版 Photoshop永久使用

Rose

Photoshop 2023中文版 photoshop下载 PS2023下载 PS 2023破解

XMind思维导图安装教程XMind 2023最新版下载

Rose

XMind教程 XMind思维导图 XMind2023下载 XMind2023新功能 XMind如何使用

理解 K8s 多集群(上):构建成熟可扩展云平台的核心要素

张旭海

k8s 多云 K8s 多集群管理

理解 K8s 多集群(下):解决方案对比与演进趋势

张旭海

k8s 多云 K8s 多集群管理

Charles(HTTP代理服务器)注册安装教程

Rose

Charles注册码 Charles下载 HTTP代理服务器

深入浅出Java并发编程,阿里最新出品并发编程全优笔记太强了

Java全栈架构师

Java 程序员 面试 后端 多线程

Prompt learning 教学[技巧篇]:通过增加示例、引导词、特殊符号指令等方式让chatgpt输出更好的答案

汀丶

人工智能 自然语言处理 ChatGPT prompt learning

测试写代码的好处

FunTester

如何在OpenJ9场景下使用Arthas

骑牛上青山

Java JVM Arthas openj9

iOS MachineLearning 系列(16)—— 几个常用的图片分类CoreML模型

珲少

香港影视集团星光文化旗下 NFT 发售平台——StarNFT 上线

BlockChain先知

工赋开发者社区 | 何谓智能工厂?国内外智能工厂建设的现状分析

工赋开发者社区

ElasticSearch中文分词和模糊查询

北桥苏

php elasticsearch

Django笔记二十七之数据库函数之文本函数

Hunter熊

Python django 文本函数 concat substr

C语言编程-环境设置

向阳逐梦

C语言 环境搭建 三周年连更

先到先得先学,2023最新国内大厂最新Java面试八股文总结

Java全栈架构师

程序员 后端 架构师 java面试 八股文

华为许超:伙伴成功,才有华为企业业务成功

脑极体

华为

MySQL中使用group_concat()函数进行分组排序

源字节1号

开源 软件开发 小程序开发

如何获得高并发经验?看这篇文章就够了

Java永远的神

程序员 系统设计 高并发 架构师 java面试

OPPO关停自研芯片公司哲库,这对行业将产生什么影响?

福大大架构师每日一题

芯片 福大大

C++中的可移植性和跨平台开发

小万哥

Python潮流周刊#1:如何系统地自学Python?

Python猫

Python

提起成都民众品茶就得自带工作室方显出彩之处

魏l3O88O7lOO2

工作室 品茶 成都品茶工作室 品茶自带工作室

如何使用Go语言实现软件设计中的‘对扩展开放、修改关闭’原则

Jack

超级独角兽 Databricks 的崛起之路

CnosDB

时序数据库 开源社区 CnosDB Databricks

CleanMyMac X专业的Mac清理工具,一次激活,永久使用

Rose

CleanMyMac下载 CleanMyMac v4.13.4 Mac清理优化工具 苹果电脑系统清理软件

我通过 tensorflow 预测了博客的粉丝数

北桥苏

人工智能 深度学习 tensorflow

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