博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
构建一个运行在Azure虚拟机上的MySQL Spring Boot应用程序
阅读量:5930 次
发布时间:2019-06-19

本文共 9409 字,大约阅读时间需要 31 分钟。

\

关键要点

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

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

\\

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

\\



\\

先决条件:

\\
  • 一个Azure帐户()\\t
  • \\t
  • \\t
  • \

克隆GitHub示例

\\

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

\\

git clone

\\

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

\\

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

\\

使用Azure CLI创建Azure MySQL数据库

\\

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

\\

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

\\

你还可以通过浏览器访问或来使用Azure CLI。你可以在此处找到有关。请注意,所有这些都需要一个微软Azure帐户(此处可以申请免费试用)。

\\

登录并创建资源组

\\

使用az login命令登录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
\\

在浏览器中,打开,确保在我们将程序包发送到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环境中。

\\

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

\\

关于作者

\\

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

\\\\

查看英文原文

转载地址:http://evutx.baihongyu.com/

你可能感兴趣的文章
Linux下的SVN服务器搭建
查看>>
我在农业2.0的互联网创业思考 (1)
查看>>
如何在Linux中查看所有正在运行的进程
查看>>
Docker: 限制容器可用的内存
查看>>
Git 的4个阶段的撤销更改
查看>>
Downloading jQuery 3.2.1
查看>>
selenium+python自动化87-Chrome浏览器静默模式启动(headless)
查看>>
在IIS7、IIS7.5中应用程序池最优配置方案
查看>>
mybatis 整合spring之mapperLocations配置的问题
查看>>
Python time 的应用
查看>>
hadoop21---使用代理修改List,代理流程
查看>>
mysql for update语句
查看>>
历史时间轴
查看>>
android自定义View绘制天气温度曲线
查看>>
legend---七、jquery如何选中select的selected的选择上的自定义属性
查看>>
『Python』setup.py简介
查看>>
iOS端架构、基本组成与使用说明
查看>>
HTTrack--web site copier offline browser
查看>>
use java style regular expression in groovy fetch and extractor info ,fucking urgly
查看>>
shuffle算法的一种简易实现
查看>>