關(guān)鍵要點(diǎn)
從GitHub中獲取一個(gè)簡單的Spring Boot Java應(yīng)用程序绊诲。
將應(yīng)用程序連接到Azure MySQL數(shù)據(jù)庫服務(wù)。
在Azure上配置一個(gè)運(yùn)行WildFly的Linux VM碍彭。
將示例應(yīng)用程序部署到WildFly服務(wù)器。
最近邢滑,我被要求構(gòu)建一個(gè)在?WildFly應(yīng)用程序平臺(tái)?上運(yùn)行的演示網(wǎng)站蹂午,并連接到微軟Azure上的MySQL數(shù)據(jù)庫。前提看起來似乎很簡單翔怎,但實(shí)現(xiàn)起來可能很棘手窃诉,而且關(guān)于如何設(shè)置這樣的東西的文檔也很有限。我花了很多時(shí)間來研究實(shí)現(xiàn)這一目標(biāo)需要做些什么赤套,我將把步驟分享給大家飘痛。
請(qǐng)注意,我使用Nginx作為反向代理服務(wù)器容握,因?yàn)檫@比在WildFly發(fā)行版中使用VM IP地址要容易得多宣脉。使用Nginx,我就能夠在內(nèi)部使用?http://127.0.0.1?剔氏。這樣還能夠在云環(huán)境中更輕松地使用集群和擴(kuò)展WildFly塑猖。
先決條件:
一個(gè)Azure帳戶(?此處免費(fèi)試用?)
克隆GitHub示例
通過命令控制臺(tái)進(jìn)入到某個(gè)工作目錄,并克隆?示例代碼庫?谈跛。
git clone?https://github.com/bbenz/spring-boot-todo
通過命令行驗(yàn)證你的Azure帳戶憑證
你需要一個(gè)Azure帳戶來完成這些步驟羊苟。你可以在這里獲得?免費(fèi)試用賬號(hào)?。要確保你已登錄到自己的Azure帳戶感憾,然后輸入az account list蜡励。如果你尚未登錄,請(qǐng)輸入az login,然后按照提示操作巍虫。
使用Azure CLI創(chuàng)建Azure MySQL數(shù)據(jù)庫
接下來纺蛆,讓我們使用?Azure CLI?創(chuàng)建一個(gè)?Azure MySQL數(shù)據(jù)庫?辱魁。我們將在命令行窗口中使用Azure CLI 2.0來創(chuàng)建資源組和MySQL實(shí)例。
Azure命令行界面(CLI)是在Mac、Linux和Windows的命令行中操作Azure的得力助手膏燃。它兼容POSIX科雳,使用Python編寫秃踩,并?在GitHub上開源?衷快。CLI可以在Mac和Linux上的命令行窗口內(nèi)運(yùn)行,在Windows上搔啊,你可以通過命令提示符或Windows的Linux子系統(tǒng)(也就是?Windows上的Bash?)來訪問CLI柬祠。甚至還有?適用于IOS和Android的CLI應(yīng)用程序?。
你還可以通過瀏覽器訪問?azure portal?或?shell.azure.com?來使用Azure CLI负芋。你可以在此處找到有關(guān)?shell的更多信息漫蛔,以及合作伙伴的CLI的信息?。請(qǐng)注意旧蛾,所有這些都需要一個(gè)微軟Azure帳戶(此處可以申請(qǐng)免費(fèi)試用)莽龟。
登錄并創(chuàng)建資源組
使用az login命令登錄Azure,然后按照屏幕上的說明進(jìn)行操作锨天。
創(chuàng)建Azure資源組
Azure資源組?將Azure服務(wù)作為單位進(jìn)行管理毯盈。每個(gè)資源組都必須對(duì)應(yīng)一個(gè)位置。要查看??location--location的所有可能值病袄,請(qǐng)使用az appservice list-locations命令搂赋。
以下示例在北歐地區(qū)創(chuàng)建了一個(gè)Azure資源組。
az groupcreate--name myResourceGroup --location “North Europe”
創(chuàng)建一個(gè)MySQL服務(wù)器
在Azure中創(chuàng)建MySQL服務(wù)器益缠。將下面命令中的占位符換成你自己的MySQL服務(wù)器名稱脑奠。這個(gè)名稱是你的MySQL服務(wù)器的主機(jī)名“ .mysql.database.azure.com”的一部分,因此它必須是全局唯一的幅慌。也可以用自己的值替換和:
az mysql server create --name--resource-group myResourceGroup --location"North Europe"--admin-user--admin-password
配置MySQL防火墻
使用az mysql server firewall-rule create命令為MySQL服務(wù)器創(chuàng)建防火墻規(guī)則宋欺。下面是為一個(gè)IP地址范圍創(chuàng)建防火墻規(guī)則的示例(你可能希望縮小實(shí)際的防火墻IP地址范圍):
azmysqlserverfirewall-rulecreate--nameallIPs--server--resource-groupmyResourceGroup--start-ip-address0.0.0.0--end-ip-address255.255.255.255
配置Azure MySQL數(shù)據(jù)庫
使用之前為“”和“”指定的值連接到MySQL服務(wù)器。
mysql -u@-h.mysql.database.azure.com-P3306-p
在mysqlmysql提示符下欠痴,創(chuàng)建數(shù)據(jù)庫和表迄靠。
CREATEDATABASEtododb;
創(chuàng)建一個(gè)數(shù)據(jù)庫用戶秒咨,并在→dodb→dodb數(shù)據(jù)庫中賦予它所有權(quán)限喇辽。用你自己唯一的應(yīng)用程序名稱替換占位符和:
CREATEUSER''IDENTIFIEDBY'';GRANTALLPRIVILEGESONtododb.*TO'';
鍵入quitquit退出服務(wù)器連接。
更新application.properties文件中的值
更新src/main/resources/application.properties中的以下幾個(gè)值:
spring.datasource.url=jdbc:mysql://@.mysql.database.azure.com:3306/tododbspring.datasource.username=adminname@spring.datasource.password=passwordspring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.jpa.hibernate.ddl-auto=update
構(gòu)建并運(yùn)行示例
使用代碼庫中的Maven包裝器在本地構(gòu)建和運(yùn)行示例:
mvn package spring-boot:run
在瀏覽器中雨席,打開?http://localhost:8080?菩咨,確保在我們將程序包發(fā)送到Azure上的VM之前應(yīng)用程序可以正常運(yùn)行。
配置Maven以生成.WAR文件
要將應(yīng)用程序部署到vm,我們需要使用mvn package命令來部署.war文件抽米。maven已經(jīng)生成了一個(gè).jar文件特占,我們需要將一個(gè).WAR文件部署到Firefly。只需將這一行添加到pom.xml中:
war
現(xiàn)在云茸,在與pom.xml相同的位置運(yùn)行mvn clean package是目,在目標(biāo)目錄中生成名為todo-app-java-on-azure-1.0-SNAPSHOT.war的.WAR文件。
在Azure上創(chuàng)建Linux VM
有幾種方法可以在Azure上創(chuàng)建新的Linux VM标捺,在本文中懊纳,我們將使用命令行,使用az vm create命令亡容。
這個(gè)命令會(huì)創(chuàng)建一個(gè)Linux VM嗤疯,其中包含azure上可用的最新Ubuntu鏡像:
az vmcreate-n -g -l eastus2--generate-ssh-key --image ubuntults
打開端口8080和9990
接下來,在目標(biāo)VM上打開端口8080和9990闺兢。Spring Boot將端口8080用于應(yīng)用程序茂缚,Wildfly使用端口9990進(jìn)行管理訪問。當(dāng)你在VM上打開多個(gè)端口時(shí)必須設(shè)置優(yōu)先級(jí)屋谭,因此將Wildfly的端口(我使用800)設(shè)置為比Spring(保留默認(rèn)值100)低脚囊。優(yōu)先級(jí)范圍可以從100到4096。
azvmopen-port -n -g ? --port8080azvmopen-port -n -g ? --port9990--priority800
SSH到虛擬機(jī)
使用az vm create命令生成的SSH密鑰連接到VM戴而。使用你的VM用戶名替換凑术,默認(rèn)是帳號(hào)電子郵件@左邊的部分。
ssh@
然后你會(huì)收到下面的提示所意,輸入yes淮逊。
The authenticityofhost'< PublicIpAddress>(< PublicIpAddress>)' can't be established.ECDSAkeyfingerprintis…………Are you sure you wanttocontinueconnecting (yes/no)? yesWarning: Permanently added < PublicIpAddress> (ECDSA)tothe listofknown hosts.
準(zhǔn)備VM
更新并安裝OpenJDK和nginx
現(xiàn)在,我們?cè)谔摂M機(jī)中扶踊,讓我們確保我們擁有最新的Linux泄鹏,然后安裝我們需要的軟件。我們使用nginx作為反向代理秧耗,并配置Wildfly备籽,將其作為服務(wù)運(yùn)行。我們還需要Java分井,因此我們需要安裝OpenJDK 8车猬。
使用nginx意味著Wildfly服務(wù)器可以使用默認(rèn)值(127.0.0.1)在任何VM上運(yùn)行。否則尺锚,我們必須使用VM的公共IP地址珠闰。在集群或容器化的環(huán)境中,如果不使用nginx瘫辩,Wildfly就會(huì)變得不靈活伏嗜。在演示環(huán)境坛悉,我們可以跳過一些配置步驟(這些已經(jīng)足夠了)。
apt-getupdateapt-getinstall-y openjdk-8*apt-getinstallnginx
安裝Wildfly承绸,并將其設(shè)置為服務(wù)
接下來裸影,讓我們安裝并配置Wildfly。Wildfly不能通過apt-get安裝军熏,所以我們需要使用wget從服務(wù)器中下載轩猩。
wget http://download.jboss.org/wildfly/12.0.0.Final/wildfly-12.0.0.Final.tar.gzmv wildfly-12.0.0.Final.tar.gz/opt/cd/opt/tar -zvxf wildfly-12.0.0.Final.tar.gzmv wildfly-12.0.0.Finalwildfly
現(xiàn)在我們有了Wildfly,接下來需要添加一個(gè)管理用戶來處理管理任務(wù):
cdwildfly/bin./add-user.sh
以下是你將看到的提示以及我提供的答案:
What type of userdoyou wishtoadd? a)ManagementUser(mgmt-users.properties) b) ApplicationUser(application-users.properties)(a): aEnter the detailsofthenewusertoadd.Usingrealm'ManagementRealm'asdiscoveredfromthe existing property files.Username :Password: !Whatgroupsdoyou want thisusertobelongto? (Please enter a comma separatedlist,orleave blankfornone)[? ]:Abouttoadduser'rhsotdemo1'forrealm'ManagementRealm'Isthis correct yes/no? yesIsthisnewusergoingtobe usedforoneASprocesstoconnecttoanotherASprocess?e.g.foraslavehost controller connectingtothemasterorfora RemotingconnectionforservertoserverEJB calls.yes/no?no
接下來荡澎,我們將在Widfly中配置一些有關(guān)VM的信息:
cd/opt/wildfly/bin/vistandalone.conf
添加或編輯以下內(nèi)容:
JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"JBOSS_HOME="/opt/wildfly"
將Wildfly配置為自啟動(dòng)
將Wildfly配置為在VM啟動(dòng)(或重新啟動(dòng))時(shí)自動(dòng)啟動(dòng)界轩,方法是添加以下文件:
vi/etc/default/wildfly
將以下這些添加到新文件中:
WILDFLY_USER="wildfly"STARTUP_WAIT=180SHUTDOWN_WAIT=30WILDFLY_CONFIG=standalone.xmlWILDFLY_MODE=standaloneWILDFLY_BIND=0.0.0.0
保存文件,然后再創(chuàng)建一個(gè)新文件:
vi/opt/wildfly/bin/launch.sh
將下面的內(nèi)容添加到新文件中:
#!/bin/shif["x$WILDFLY_HOME"="x"];thenWILDFLY_HOME=/opt/wildflyfiif["x$1"="xdomain"];thenecho'Starting wildfly in domain mode.'$WILDFLY_HOME/bin/domain.sh -c$2-b$3elseecho'Starting wildfly in standalone mode.'$WILDFLY_HOME/bin/standalone.sh -c$2-b$3fi
保存該文件衔瓮,并把它變成可執(zhí)行文件:
chmod755/opt/wildfly/bin/launch.sh
接下來浊猾,創(chuàng)建一個(gè)systemd初始化文件:
vi/etc/systemd/system/wildfly.service
將下面的內(nèi)容添加到新文件中:
[Unit]Description=The wildfly Application ServerAfter=syslog.target network.targetBefore=nginx.service[Service]Environment=LAUNCH_JBOSS_IN_BACKGROUND=1EnvironmentFile=/etc/default/wildflyUser=wildflyLimitNOFILE=102642PIDFile=/var/run/wildfly/wildfly.pidExecStart=/opt/wildfly/bin/launch.sh$WILDFLY_MODE$WILDFLY_CONFIG$WILDFLY_BINDStandardOutput=null[Install]WantedBy=multi-user.target
保存該文件,并設(shè)置文件和目錄的所有權(quán):
chownwildfly:wildfly -R/opt/wildfly/systemctl enable wildfly
我們還需要禁用nginx監(jiān)聽端口80(Wildfly會(huì)處理這個(gè)):
vi/etc/nginx/sites-enabled/default
把下面這行注釋掉:
#listen[::]:80default_server;
接下來热鞍,我們需要?jiǎng)?chuàng)建一個(gè)新的nginx服務(wù)器塊:
vi/etc/nginx/sites-available/wildfly
將下面的內(nèi)容添加到新文件中:
upstream wildfly {? ? server127.0.0.1:8080;}server {? ? listen80;? ? server_name your-domain.com;? ? access_log? /var/log/nginx/wildfly.access.log;? ? error_log? /var/log/nginx/wildfly.error.log;? ? proxy_buffers1664k;? ? proxy_buffer_size128k;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之間創(chuàng)建一個(gè)符號(hào)鏈接葫慎,然后啟動(dòng)Wildfly服務(wù),并讓nginx在Wildfly啟動(dòng)時(shí)跟著啟動(dòng):
ln -s/etc/nginx/sites-available/wildfly/etc/nginx/sites-enabled/systemctl enable nginxsystemctl start nginx.servicegroupadd -r wildflyuseradd -r -g wildfly -d/opt/wildfly -s/sbin/nologin wildflysystemctl daemon-reloadsystemctl start wildfly
如果你修改了以上任何內(nèi)容薇宠,請(qǐng)使用以下命令重新啟動(dòng)nginx和Wildfly:
systemctlrestart nginx.service
將.WAR文件部署到Wildfly服務(wù)器
你現(xiàn)在已準(zhǔn)備好將.WAR文件傳輸?shù)絍M偷办。最簡單的方法是使用scp(安全拷貝)。
scp/mnt/c/GitHub/todo-app-java-on-azure/target/todo-app-java-on-azure-1.0-SNAPSHOT.war @< PublicIpAddress>:~/
使用mv命令將文件移動(dòng)到/opt/Wildfly/standalone/deployments/文件夾澄港,Wildfly將自動(dòng)為你啟動(dòng)它椒涯。然后通過以下URL訪問應(yīng)用程序:
http://
做完這些,你就應(yīng)該知道如何在云端Linux VM的Wildfly服務(wù)器上運(yùn)行Java應(yīng)用程序回梧,以及訪問Azure的MySQL數(shù)據(jù)庫废岂。配置步驟有很多,但一旦建立了初始環(huán)境狱意,就可以很容易地設(shè)置部署管道湖苞,將新版本的代碼和數(shù)據(jù)庫推送到Azure環(huán)境中。
一如既往详囤,我們重視你的反饋意見财骨,請(qǐng)告訴我們你的想法!
1藏姐、具有1-5工作經(jīng)驗(yàn)的隆箩,面對(duì)目前流行的技術(shù)不知從何下手,
需要突破技術(shù)瓶頸的可以加羔杨。
2捌臊、在公司待久了,過得很安逸问畅,
但跳槽時(shí)面試碰壁娃属。
需要在短時(shí)間內(nèi)進(jìn)修、跳槽拿高薪的可以加护姆。
3矾端、如果沒有工作經(jīng)驗(yàn),但基礎(chǔ)非常扎實(shí)卵皂,對(duì)java工作機(jī)制秩铆,
常用設(shè)計(jì)思想,常用java開發(fā)框架掌握熟練的灯变,可以加殴玛。
4、覺得自己很牛B添祸,一般需求都能搞定滚粟。
但是所學(xué)的知識(shí)點(diǎn)沒有系統(tǒng)化,很難在技術(shù)領(lǐng)域繼續(xù)突破的可以加刃泌。
5. 群號(hào):高級(jí)架構(gòu)群 Java進(jìn)階群:180705916.備注好信息凡壤!
6.阿里Java高級(jí)大牛直播講解知識(shí)點(diǎn),分享知識(shí)耙替,