批量关停azure vm_构建在Azure VM的WildFly上运行MySQL Spring Boot应用程序

批量关停azure vm

重要要点

在这篇文章中,我将向您展示如何:

最近,有人要求我在Microsoft Azure上构建一个在WildFly应用程序平台上运行并连接到云中MySQL数据库的演示站点。 前提看起来很简单,但是实现起来可能很棘手,并且关于如何设置类似内容的文档非常有限。 我花了很多时间来确定需要做些什么才能做到这一点,我在这里分享了步骤。

    请注意,我将Nginx用作反向代理服务器,因为它比将WildFly发行版中的二进制文件转换为使用VM IP地址要容易得多。 使用Nginx,我可以在内部使用http://127.0.0.1保留WildFly发行版二进制文件。 这还允许在云环境中更轻松地对WildFly进行集群和扩展。

    (点击图片放大)

    先决条件:

    克隆GitHub示例

    在命令提示符下,导航到工作目录并克隆样本存储库

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

    配置应用程序以使用MySQL数据库

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

    对于这些步骤,您将需要一个Azure帐户。 您可以在这里免费试用 。 为确保您已登录到Azure帐户,请输入az account list 。 如果您尚未登录,请键入az login并按照提示进行操作。

    使用Azure CLI创建Azure MySQL数据库

    接下来,让我们使用Azure CLI 为MySQL实例创建Azure数据库 。 我们将在终端窗口中使用Azure CLI 2.0创建资源组和MySQL实例。

    在Mac,Linux和Windows上, Azure命令行界面 (CLI)是一种从命令行利用Azure强大功能的好方法。 它是POSIX兼容的,用Python编写,开源可在GitHub上获得 。 CLI在Mac和Linux的终端窗口中运行,在Windows上,您可以通过命令提示符或Windows的Linux子系统( Windows上的 AKA Bash)访问CLI。 甚至还有一个具有IOS和Android的CLI功能应用程序

    您还可以仅通过浏览器从azure门户shell.azure.com访问Azure CLI以及许多其他CLI。 您可以在此处找到有关我们的Shell的更多信息,以及有关受支持的合作伙伴CLI的更新信息 。 请注意,所有选项都需要一个Microsoft Azure帐户( 在此处免费试用 )。

    登录并创建资源组

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

    创建一个Azure资源组。

    Azure资源组作为一个单元一起管理Azure服务。 每个资源组必须具有一个位置。 要查看可用于`--location`所有可能值,请使用az appservice list-locations命令。

    下面的示例在北欧地区中创建一个Azure资源组。

    az group create --name myResourceGroup --location "North Europe"

    创建一个MySQL服务器

    在Azure数据库中为MySQL创建服务器。 替换您自己的唯一MySQL服务器名称,在其中看到`<mysql_server_name>`占位符。 该名称是MySQL服务器主机名`<mysql_server_name>.mysql.database.azure.com` ,因此它必须是全局唯一的。 另外,用您自己的值替换`<admin_user>``<admin_password>`

    az mysql server create --name <mysql_server_name> --resource-group myResourceGroup --location "North Europe" --admin-user <admin_user> --admin-password <admin_password>

    配置MySQL防火墙

    使用az mysql server firewall-rule create命令为MySQL服务器创建防火墙规则,以允许客户端连接。 这是一个为大量IP地址创建防火墙规则的示例(您可能希望缩小实际的防火墙IP地址范围):

    az mysql server firewall-rule create --name allIPs --server <mysql_server_name> --resource-group myResourceGroup --start-ip-address 0.0.0.0 --end-ip-address 255.255.255.255

    配置Azure MySQL数据库

    使用您先前为` <admin_user> `和`<mysql_server_name>`指定的值连接到MySQL服务器。

    mysql -u <admin_user>@<mysql_server_name> -h <mysql_server_name>.mysql.database.azure.com -P 3306 -p

    在“ mysql”提示符下,为待办事项创建一个数据库和一个表。

    CREATE DATABASE tododb;

    创建一个数据库用户,并在`tododb`数据库中为其赋予所有特权。 将占位符`<Javaapp_user>``<Javaapp_password>`替换为您自己的唯一应用程序名称:

    CREATE USER '<Javaapp_user>' IDENTIFIED BY '<Javaapp_password>';

    GRANT ALL PRIVILEGES ON tododb.* TO '<Javaapp_user>';

    键入“ quit”退出服务器连接。

    更新application.properties文件中的值

    src/main/resources/application.properties:更新以下值src/main/resources/application.properties:

    spring.datasource.url=jdbc:mysql:// >@<mysql_server_name>.mysql.database.azure.com:3306/tododb

    spring.datasource.username=adminname@<mysql_server_name>

    spring.datasource.password=password

    spring.datasource.driver-class-name=com.mysql.jdbc.Driver

    spring.jpa.hibernate.ddl-auto=update

    生成并运行示例

    使用回购中包含的Maven包装器在本地构建并运行示例:

    mvn软件包spring-boot:run

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

    配置Maven以生成.WAR文件

    要将应用程序部署到vm,我们需要使用mvn package命令部署.war文件。 现在,maven会生成一个.jar文件,我们需要将.WAR文件部署到Firefly。 它; 一个简单的更改–只需将以下行添加到pom.xml中:

    <packaging>war</packaging>

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

    在Azure上创建Linux VM

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

    此命令使用azure上可用的最新Ubuntu映像创建Linux VM:

    az vm create -n <vm name> -g <resource group> -l eastus2 --generate-ssh-key --image ubuntults

    打开端口8080和9990

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

    az vm open-port -n <vm name> -g <resource group> --port 8080

    az vm open-port -n <vm name> -g <resource group> --port 9990 –priority 800

    SSH进入虚拟机

    使用在az vm create命令中生成的SSH密钥进入VM。 在虚拟机中使用<username> -@左侧的帐户电子邮件通常是默认值。

    ssh <username>@< PublicIpAddress>

    您应该在第一时间得到此回复。 说是。

    The authenticity of host '< PublicIpAddress> (< PublicIpAddress>)' can't be established.

    ECDSA key fingerprint is …………

    Are you sure you want to continue connecting (yes/no)? yes

    Warning: Permanently added < PublicIpAddress> (ECDSA) to the list of known hosts.

    准备虚拟机

    更新并安装OpenJDK和Nginx

    既然我们已经在虚拟机中,那么请确保我们拥有可用的最新Linux,然后安装我们将需要的软件。 在此演示中,我们将nginx安装为反向代理,并配置wildfly作为服务运行。 我们还需要Java,因此我们要安装OpenJDK 8。

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

    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,我们需要添加一个Management用户来处理管理任务:

    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?

    eg 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服务器块,以使用nginx作为反向代理来访问wildfly:

    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服务并启用wildfly以nginx在启动时启动:

    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 <username>@< PublicIpAddress>:~/

    使用mv命令将文件重新定位到/ opt / wildfly / standalone / deployments /文件夹,wildfly将在其中自动为您启动文件。 然后通过以下URL访问该应用程序:

    http://<VMPublicIpAddress>

    如果您走到了这一步,尽管如此,我们还是感谢并恭喜! 您知道有一个Java应用程序在云中Linux VM的wildfly服务器上运行并访问Azure上MySQL数据库。 有很多配置步骤,但是一旦建立了初始环境,就很容易设置部署管道以将新版本的代码和数据库推送到Azure环境

    与往常一样,我们重视您的反馈意见,因此请让我们知道您的想法!

    翻译自: https://www.infoq.com/articles/azure-wildfly-spring-boot-app/?topicPageSponsorship=c1246725-b0a7-43a6-9ef9-68102c8d48e1

    批量关停azure vm

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值