\

关键要点

\\

  • 从GitHub中获取一个简单的Spring Boot Java应用程序。\\t
  • 将应用程序连接到Azure MySQL数据库服务。\\t
  • 在Azure上配置一个运行WildFly的Linux VM。\\t
  • 将示例应用程序部署到WildFly服务器。\

\\

最近,我被要求构建一个在WildFly应用程序平台上运行的演示网站,并连接到微软Azure上的MySQL数据库。前提看起来似乎很简单,但实现起来可能很棘手,而且关于如何设置这样的东西的文档也很有限。我花了很多时间来研究实现这一目标需要做些什么,我将把步骤分享给大家。

\\

请注意,我使用Nginx作为反向代理服务器,因为这比在WildFly发行版中使用VM IP地址要容易得多。使用Nginx,我就能够在内部使用http://127.0.0.1。这样还能够在云环境中更轻松地使用集群和扩展WildFly。

\\



\\

先决条件:

\\

  • 一个Azure帐户(此处免费试用)\\t
  • 一个Git客户端\\t
  • Azure CLI 2.0\\t
  • Java 7 JDK或更高版本\

克隆GitHub示例

\\

通过命令控制台进入到某个工作目录,并克隆示例代码库。

\\

git clone https://github.com/bbenz/spring-boot-todo

\\

通过命令行验证你的Azure帐户凭证

\\

你需要一个Azure帐户来完成这些步骤。你可以在这里获得免费试用账号。要确保你已登录到自己的Azure帐户,然后输入az account list。如果你尚未登录,请输入az login,然后按照提示操作。

\\

使用Azure CLI创建Azure MySQL数据库

\\

接下来,让我们使用Azure CLI创建一个Azure MySQL数据库。我们将在命令行窗口中使用Azure CLI 2.0来创建资源组和MySQL实例。

\\

Azure命令行界面(CLI)是在Mac、Linux和Windows的命令行中操作Azure的得力助手。它兼容POSIX,使用Python编写,并在GitHub上开源。CLI可以在Mac和Linux上的命令行窗口内运行,在Windows上,你可以通过命令提示符或Windows的Linux子系统(也就是Windows上的Bash)来访问CLI。甚至还有适用于IOS和Android的CLI应用程序。

\\

你还可以通过浏览器访问azure portal或shell.azure.com来使用Azure CLI。你可以在此处找到有关shell的更多信息,以及合作伙伴的CLI的信息。请注意,所有这些都需要一个微软Azure帐户(此处可以申请免费试用)。

\\

登录并创建资源组

\\

使用az login命令登录Azure,然后按照屏幕上的说明进行操作。

\\

创建Azure资源组

\\

Azure资源组将Azure服务作为单位进行管理。每个资源组都必须对应一个位置。要查看`--location`的所有可能值,请使用az appservice list-locations命令。

\\

以下示例在北欧地区创建了一个Azure资源组。

\\

\az group create --name myResourceGroup --location “North Europe”

\\

创建一个MySQL服务器

\\

在Azure中创建MySQL服务器。将下面命令中的`\u0026lt;mysql_server_name\u0026gt;`占位符换成你自己的MySQL服务器名称。这个名称是你的MySQL服务器的主机名“\u0026lt;mysql_server_name\u0026gt; .mysql.database.azure.com”的一部分,因此它必须是全局唯一的。也可以用自己的值替换`\u0026lt;admin_user\u0026gt;`和`\u0026lt;admin_password\u0026gt;`:

\\

\az mysql server create --name \u0026lt;mysql_server_name\u0026gt; --resource-group myResourceGroup --location \"North Europe\" --admin-user \u0026lt;admin_user\u0026gt; --admin-password \u0026lt;admin_password\u0026gt;

\\

配置MySQL防火墙

\\

使用az mysql server firewall-rule create命令为MySQL服务器创建防火墙规则。下面是为一个IP地址范围创建防火墙规则的示例(你可能希望缩小实际的防火墙IP地址范围):

\\

\az mysql server firewall-rule create --name allIPs --server \u0026lt;mysql_server_name\u0026gt; --resource-group myResourceGroup --start-ip-address 0.0.0.0 --end-ip-address 255.255.255.255

\\

配置Azure MySQL数据库

\\

使用之前为“\u0026lt;admin_user\u0026gt;”和“\u0026lt;mysql_server_name\u0026gt;”指定的值连接到MySQL服务器。

\\

\mysql -u \u0026lt;admin_user\u0026gt;@\u0026lt;mysql_server_name\u0026gt; -h \u0026lt;mysql_server_name\u0026gt;.mysql.database.azure.com -P 3306 -p

\\

在`mysql`提示符下,创建数据库和表。

\\

\CREATE DATABASE tododb;

\\

创建一个数据库用户,并在`tododb`数据库中赋予它所有权限。用你自己唯一的应用程序名称替换占位符`\u0026lt;Javaapp_user\u0026gt;`和`\u0026lt;Javaapp_password\u0026gt;`:

\\

\CREATE USER '\u0026lt;Javaapp_user\u0026gt;' IDENTIFIED BY '\u0026lt;Javaapp_password\u0026gt;'; \GRANT ALL PRIVILEGES ON tododb.* TO '\u0026lt;Javaapp_user\u0026gt;';

\\

键入`quit`退出服务器连接。

\\

更新application.properties文件中的值

\\

更新src/main/resources/application.properties中的以下几个值:

\\

\spring.datasource.url=jdbc:mysql://@\u0026lt;mysql_server_name\u0026gt;.mysql.database.azure.com:3306/tododb\spring.datasource.username=adminname@\u0026lt;mysql_server_name\u0026gt;\spring.datasource.password=password\spring.datasource.driver-class-name=com.mysql.jdbc.Driver\spring.jpa.hibernate.ddl-auto=update

\\

构建并运行示例

\\

使用代码库中的Maven包装器在本地构建和运行示例:

\\

\mvn package spring-boot:run

\\

在浏览器中,打开http://localhost:8080,确保在我们将程序包发送到Azure上的VM之前应用程序可以正常运行。

\\

配置Maven以生成.WAR文件

\\

要将应用程序部署到vm,我们需要使用mvn package命令来部署.war文件。maven已经生成了一个.jar文件,我们需要将一个.WAR文件部署到Firefly。只需将这一行添加到pom.xml中:

\\

\\u0026lt;packaging\u0026gt;war\u0026lt;/packaging\u0026gt;

\\

现在,在与pom.xml相同的位置运行mvn clean package,在目标目录中生成名为todo-app-java-on-azure-1.0-SNAPSHOT.war的.WAR文件。

\\

在Azure上创建Linux VM

\\

有几种方法可以在Azure上创建新的Linux VM,在本文中,我们将使用命令行,使用az vm create命令。

\\

这个命令会创建一个Linux VM,其中包含azure上可用的最新Ubuntu镜像:

\\

\az vm create -n \u0026lt;vm name\u0026gt; -g \u0026lt;resource group\u0026gt; -l eastus2 --generate-ssh-key --image ubuntults

\\

打开端口8080和9990

\\

接下来,在目标VM上打开端口8080和9990。Spring Boot将端口8080用于应用程序,Wildfly使用端口9990进行管理访问。当你在VM上打开多个端口时必须设置优先级,因此将Wildfly的端口(我使用800)设置为比Spring(保留默认值100)低。优先级范围可以从100到4096。

\\

\az vm open-port -n \u0026lt;vm name\u0026gt; -g \u0026lt;resource group\u0026gt;  --port 8080\az vm open-port -n \u0026lt;vm name\u0026gt; -g \u0026lt;resource group\u0026gt;  --port 9990 --priority 800

\\

SSH到虚拟机

\\

使用az vm create命令生成的SSH密钥连接到VM。使用你的VM用户名替换\u0026lt;username\u0026gt;,默认是帐号电子邮件@左边的部分。

\\

\ssh \u0026lt;username\u0026gt;@\u0026lt;PublicIpAddress\u0026gt;

\\

然后你会收到下面的提示,输入yes。

\\

\The authenticity of host '\u0026lt; PublicIpAddress\u0026gt; (\u0026lt; PublicIpAddress\u0026gt;)' can't be established.\ECDSA key fingerprint is …………\Are you sure you want to continue connecting (yes/no)? yes\Warning: Permanently added \u0026lt; PublicIpAddress\u0026gt; (ECDSA) to the list of known hosts.

\\

准备VM

\\

更新并安装OpenJDK和nginx

\\

现在,我们在虚拟机中,让我们确保我们拥有最新的Linux,然后安装我们需要的软件。我们使用nginx作为反向代理,并配置Wildfly,将其作为服务运行。我们还需要Java,因此我们需要安装OpenJDK 8。

\\

使用nginx意味着Wildfly服务器可以使用默认值(127.0.0.1)在任何VM上运行。否则,我们必须使用VM的公共IP地址。在集群或容器化的环境中,如果不使用nginx,Wildfly就会变得不灵活。在演示环境,我们可以跳过一些配置步骤(这些已经足够了)。

\\

\apt-get update\apt-get install -y openjdk-8*\apt-get install nginx

\\

安装Wildfly,并将其设置为服务

\\

接下来,让我们安装并配置Wildfly。Wildfly不能通过apt-get安装,所以我们需要使用wget从服务器中下载。

\\

\wget http://download.jboss.org/wildfly/12.0.0.Final/wildfly-12.0.0.Final.tar.gz\mv wildfly-12.0.0.Final.tar.gz /opt/\cd /opt/ \tar -zvxf wildfly-12.0.0.Final.tar.gz\mv wildfly-12.0.0.Final wildfly

\\

现在我们有了Wildfly,接下来需要添加一个管理用户来处理管理任务:

\\

\cd wildfly/bin\./add-user.sh

\\

以下是你将看到的提示以及我提供的答案:

\\

\What type of user do you wish to add?\ a) Management User (mgmt-users.properties)\ b) Application User (application-users.properties)\(a): a\Enter the details of the new user to add.\Using realm 'ManagementRealm' as discovered from the existing property files.\Username : \Password : !\What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[  ]:\About to add user 'rhsotdemo1' for realm 'ManagementRealm'\Is this correct yes/no? yes\Is this new user going to be used for one AS process to connect to another AS process?\e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls.\yes/no? no

\\

接下来,我们将在Widfly中配置一些有关VM的信息:

\\

\cd /opt/wildfly/bin/\vi standalone.conf

\\

添加或编辑以下内容:

\\

\JAVA_HOME=\"/usr/lib/jvm/java-8-openjdk-amd64\"\JBOSS_HOME=\"/opt/wildfly\"

\\

将Wildfly配置为自启动

\\

将Wildfly配置为在VM启动(或重新启动)时自动启动,方法是添加以下文件:

\\

\vi /etc/default/wildfly

\\

将以下这些添加到新文件中:

\\

\WILDFLY_USER=\"wildfly\"\STARTUP_WAIT=180\SHUTDOWN_WAIT=30\WILDFLY_CONFIG=standalone.xml\WILDFLY_MODE=standalone\WILDFLY_BIND=0.0.0.0

\\

保存文件,然后再创建一个新文件:

\\

\vi /opt/wildfly/bin/launch.sh

\\

将下面的内容添加到新文件中:

\\

\#!/bin/sh\if [ \"x$WILDFLY_HOME\" = \"x\" ]; then\    WILDFLY_HOME=/opt/wildfly\fi\if [ \"x$1\" = \"xdomain\" ]; then\    echo 'Starting wildfly in domain mode.'\    $WILDFLY_HOME/bin/domain.sh -c $2 -b $3\else\    echo 'Starting wildfly in standalone mode.'\    $WILDFLY_HOME/bin/standalone.sh -c $2 -b $3\fi

\\

保存该文件,并把它变成可执行文件:

\\

\chmod 755 /opt/wildfly/bin/launch.sh

\\

接下来,创建一个systemd初始化文件:

\\

\vi /etc/systemd/system/wildfly.service

\\

将下面的内容添加到新文件中:

\\

\[Unit]\Description=The wildfly Application Server\After=syslog.target network.target\Before=nginx.service\[Service]\Environment=LAUNCH_JBOSS_IN_BACKGROUND=1\EnvironmentFile=/etc/default/wildfly\User=wildfly\LimitNOFILE=102642\PIDFile=/var/run/wildfly/wildfly.pid\ExecStart=/opt/wildfly/bin/launch.sh $WILDFLY_MODE $WILDFLY_CONFIG $WILDFLY_BIND\StandardOutput=null\[Install]\WantedBy=multi-user.target

\\

保存该文件,并设置文件和目录的所有权:

\\

\chown wildfly:wildfly -R /opt/wildfly/\systemctl enable wildfly

\\

我们还需要禁用nginx监听端口80(Wildfly会处理这个):

\\

\vi /etc/nginx/sites-enabled/default

\\

把下面这行注释掉:

\\

\#listen [::]:80 default_server;

\\

接下来,我们需要创建一个新的nginx服务器块:

\\

\vi /etc/nginx/sites-available/wildfly

\\

将下面的内容添加到新文件中:

\\

\upstream wildfly {\    server 127.0.0.1:8080;\}\server {\    listen      80;\    server_name your-domain.com;\    access_log  /var/log/nginx/wildfly.access.log;\    error_log   /var/log/nginx/wildfly.error.log;\    proxy_buffers 16 64k;\    proxy_buffer_size 128k;\location/{\        proxy_pass  http://wildfly;\        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;\        proxy_redirect off;\        proxy_set_header    Host            $host;\        proxy_set_header    X-Real-IP       $remote_addr;\        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;\        proxy_set_header    X-Forwarded-Proto https;\    }\}

\\

通过命令在nginx和Wildfly之间创建一个符号链接,然后启动Wildfly服务,并让nginx在Wildfly启动时跟着启动:

\\

\ln -s /etc/nginx/sites-available/wildfly /etc/nginx/sites-enabled/\systemctl enable nginx\systemctl start nginx.service\groupadd -r wildfly\useradd -r -g wildfly -d /opt/wildfly -s /sbin/nologin wildfly\systemctl daemon-reload\systemctl start wildfly

\\

如果你修改了以上任何内容,请使用以下命令重新启动nginx和Wildfly:

\\

\systemctl restart nginx.service

\\

将.WAR文件部署到Wildfly服务器

\\

你现在已准备好将.WAR文件传输到VM。最简单的方法是使用scp(安全拷贝)。

\\

\scp /mnt/c/GitHub/todo-app-java-on-azure/target/todo-app-java-on-azure-1.0-SNAPSHOT.war \u0026lt;username\u0026gt;@\u0026lt; PublicIpAddress\u0026gt;:~/

\\

使用mv命令将文件移动到/opt/Wildfly/standalone/deployments/文件夹,Wildfly将自动为你启动它。然后通过以下URL访问应用程序:

\\

http://\u0026lt;VMPublicIpAddress\u0026gt;

\\

做完这些,你就应该知道如何在云端Linux VM的Wildfly服务器上运行Java应用程序,以及访问Azure的MySQL数据库。配置步骤有很多,但一旦建立了初始环境,就可以很容易地设置部署管道,将新版本的代码和数据库推送到Azure环境中。

\\

一如既往,我们重视你的反馈意见,请告诉我们你的想法!

\\

关于作者

\\

Brian Benz 是微软的Senior Cloud Developer Advocate,帮助Java开发人员充分利用Azure。在加入微软之前,他是IBM、德勤和其他公司的解决方案架构师、顾问、开发人员、作者和演讲者。可以通过@bbenz在Twitter上与他取得联系。

\\\\

查看英文原文:Build a MySQL Spring Boot App Running on WildFly on an Azure VM

构建一个运行在Azure虚拟机上的MySQL Spring Boot应用程序相关推荐

  1. 在 Azure 虚拟机上快速搭建 MongoDB 集群

    MongoDB 是目前在 NoSQL 市场上非常受欢迎的一个数据库,本文介绍如何使用 Azure PowerShell 和 Azure CLI 在 Azure 虚拟机上搭建单节点 MongoDB(测试 ...

  2. 虚拟机访问本地mysql_如何在本地远程连接linux虚拟机上面的mysql

    检查远程的虚拟机是否可以ping通过 查看虚拟机IP为192.168.38.128 cmd窗口ping 192.168.38.128,出现如下界面说明是可以的 检查虚拟机mysql的端口号是否对外开通 ...

  3. 虚拟机win2003安装mysql教程_CentOS7.2虚拟机上安装MySQL 5.6.32的教程

    1.MySQL 5.6.32 64位安装包下载 2.把下载文件通过SecureFX传递到/usr/local/src/目录中(虚拟主机CentOS7.2的IP为:192.168.1.11) 3.解压文 ...

  4. 安装了虚拟机后mysql用不了_在虚拟机上安装mysql,安装好了并且初始化之后,一直无法启动mysql如何解决?...

    今天想在自己的虚拟机上安装mysql,安装好了并且初始化之后,一直无法启动mysql. 1.service mysql start; 报错:mysql is neither service nor t ...

  5. 虚拟机无法访问主机mysql_主机无法连接虚拟机上的mysql

    昨天在虚拟机上搭建web项目环境时,想在主机上使用navicat访问虚拟机上的mysql数据库,报错大概是"hostxxx is not allowed to this mysql serv ...

  6. docker jib_Jib –为Spring Boot应用程序构建docker映像

    docker jib 使用Jib为示例Spring Boot应用程序创建docker映像是如此容易,这让我感到惊喜. 让我首先将Jib与以前使用的方法进行对比. 我正在使用bmuschko出色的gra ...

  7. 怎么运行aws的示例程序_使Spring Boot应用程序在AWS上无服务器运行

    怎么运行aws的示例程序 在之前的 几篇 文章中,我描述了如何设置Spring Boot应用程序并在AWS Elastic Beanstalk上运行它. 尽管这是从物理服务器到云服务器的重要一步,但还 ...

  8. owin 怎么部署在云中_使用Boxfuse轻松在云中运行Spring Boot应用程序

    owin 怎么部署在云中 几天前,我开始构建一个将使用REST API检索和存储数据的iOS应用. 该REST API将是我也必须构建的服务器应用程序. 由于我熟悉Java和Spring ,因此决定使 ...

  9. 通过OAuth 2.0和Okta构建具有安全的服务器到服务器通信的Spring Boot应用

    "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. 大多数O ...

最新文章

  1. 位序、字节序、类型序
  2. 快速更换一个国内的yum源
  3. 创建第一个vue实例
  4. 爱德华·斯诺登:区块链只是新型数据库,比特币终会消失
  5. neo4j cypher_neo4j / cypher:悬挂查询参数
  6. zabbix 监控TCP状态连接数
  7. 极速办公(excel)字体如何改为斜体
  8. win7开机提示由于系统注册表文件丢失或损坏因此无法加载怎么办
  9. 软件的行业适配性:进销存软件与五金行业
  10. CentOS8下安装snort2.9.18.1
  11. cpu烤机温度测试软件,ATX2.0与ATX3.0机箱烤机温度对比测试,竖装显卡真的会把风挡死...
  12. 计算机类综述论文范文,综述的写法(计算机类论文综述的写法)
  13. Java+高级篇+单核CPU vs 多核CPU
  14. 解密库尔勒可靠性检测
  15. MAC UltraEdit18.00.0.40 绿色版,亲测有效
  16. 打造心中的暗黑传奇3
  17. 如何更改电脑桌面壁纸,换上自己想要的壁纸?
  18. CF785C (1600)
  19. Java poi操作Excel单元格样式
  20. python3 urllib 内存泄露_【专家专栏】张昊 | 从urllib2的内存泄露看python的GC

热门文章

  1. AI一分钟 | 美国国会传唤扎克伯格:来,就5000万用户数据泄露案作证;菜鸟无人车路测视频曝光
  2. 科普:进入内核态究竟是什么意思?
  3. 20个使用 Java CompletableFuture的例子
  4. Elasticsearch 在互联网公司大量真实的应用案例
  5. 工业缺陷检测比赛Top3方案
  6. 上分神器:训练调参与模型集成
  7. 是时候改变自学编程方法了,这篇国外网友的分享被fast.ai创始人等点赞
  8. PostgreSQL_row_number() over()
  9. 万引大佬自曝这样被MIT拒掉:“系里不喜欢你”,找校长对峙后悟了
  10. Deepmind最新研究:从图表示学习看算法推理