nginx - JAVA 項(xiàng)目WAR包部署的適用場(chǎng)景?
問(wèn)題描述
部署項(xiàng)目時(shí)一直用文件夾方式部署項(xiàng)目,近期嘗試使用WAR包項(xiàng)目部署,遇到了下面的問(wèn)題:
上傳文件位置指定本地路徑,但由于獨(dú)立在項(xiàng)目外,還需要單獨(dú)配置項(xiàng)目才能訪問(wèn)
公司項(xiàng)目數(shù)量多(1臺(tái)服務(wù)器200左右,20臺(tái)左右)時(shí),每個(gè)項(xiàng)目這樣配置,運(yùn)維工作十分繁重
維護(hù)時(shí)只調(diào)整了一個(gè)css或JS文件,卻要重新打包發(fā)布
對(duì)比之前文件夾方式,實(shí)在是很麻煩,想問(wèn)下有經(jīng)驗(yàn)的同學(xué):
你遇到的使用WAR包方式的應(yīng)用場(chǎng)景是什么?
如何解決我遇到的問(wèn)題?
問(wèn)題解答
回答1:以下是我的實(shí)戰(zhàn)運(yùn)維經(jīng)驗(yàn):
配置應(yīng)當(dāng)是獨(dú)立于項(xiàng)目的,這樣可以只打一次war包,而運(yùn)用到不同環(huán)境上;
運(yùn)用自動(dòng)化運(yùn)維工具,如SaltStack、Ansible或Jenkins來(lái)幫助你批量操作;
如果預(yù)料到靜態(tài)資源會(huì)頻繁改動(dòng),最好跟Java項(xiàng)目分開來(lái),部署到不同站點(diǎn),或者用nginx做分流;
建議部署程序去解壓war文件(而不是讓Tomcat自己來(lái)解壓),停掉Tomcat,ROOT目錄用ln -s定向到新的目錄,再啟動(dòng)Tomcat,這樣Tomcat會(huì)跑得更流暢;
舊有的目錄暫時(shí)不要?jiǎng)h,如果部署錯(cuò)了,用ln -s把ROOT目錄切換到舊的,就能實(shí)現(xiàn)快速回滾。
回答2:實(shí)際經(jīng)驗(yàn):我經(jīng)手過(guò)的項(xiàng)目都是在weblogic上以目錄的形式發(fā)布,目錄結(jié)構(gòu):
DOMAINS --域└─domainA --域A └─apps--應(yīng)用└─app1 --應(yīng)用1 ├─deploy --部署 │ ├─src --Java源代碼(僅限項(xiàng)目實(shí)施開發(fā)的源代碼,不包含應(yīng)用庫(kù)的源代碼),服務(wù)器統(tǒng)一編譯一次防止Java版本問(wèn)題以及編碼問(wèn)題 │ └─war --標(biāo)準(zhǔn)war包結(jié)構(gòu) ├─patch --增量更新目錄 ├─runtime --運(yùn)行時(shí)目錄,日志,用戶文件之類的 └─tmp --臨時(shí)目錄
我按照這種標(biāo)準(zhǔn)結(jié)構(gòu)寫了若干shell腳本來(lái)運(yùn)維任務(wù)自動(dòng)化,就是啟停,監(jiān)控,更新什么的,其實(shí)也就花了幾天時(shí)間,代碼也不多,但是現(xiàn)在我再也沒(méi)有手動(dòng)干過(guò)運(yùn)維的事情了。
基本流程就是:代碼開發(fā)提交-->SVN導(dǎo)出增量更新包-->上傳至服務(wù)器-->服務(wù)器上執(zhí)行
改一個(gè)html頁(yè)面都要重新打包,萬(wàn)一打錯(cuò)文件進(jìn)去咋辦? 靜態(tài)的可以單獨(dú)發(fā)布,那我他媽就改一個(gè)JAVA也要重新打包就活該啦?
沒(méi)有一個(gè)容器是真正在war包里面發(fā)布和服務(wù)應(yīng)用的,都是解壓到某個(gè)臨時(shí)位置,war包是壓縮格式,你讓任何一個(gè)容器每服務(wù)一個(gè)請(qǐng)求都去讀取壓縮文件里面的資源肯定會(huì)有性能問(wèn)題的(至少JSP都是這樣)。
這是我的個(gè)人經(jīng)手的一些小型項(xiàng)目的解決方案,大型項(xiàng)目,你可能需要全流程工具鏈,就是什么持續(xù)集成什么的。
相關(guān)文章:
1. docker-compose中volumes的問(wèn)題2. 關(guān)docker hub上有些鏡像的tag被標(biāo)記““This image has vulnerabilities””3. boot2docker無(wú)法啟動(dòng)4. docker網(wǎng)絡(luò)端口映射,沒(méi)有方便點(diǎn)的操作方法么?5. docker安裝后出現(xiàn)Cannot connect to the Docker daemon.6. javascript - mock.js可以存儲(chǔ)數(shù)據(jù)嗎7. java - SSH框架中寫分頁(yè)時(shí)service層中不能注入分頁(yè)類8. nignx - docker內(nèi)nginx 80端口被占用9. 求救一下,用新版的phpstudy,數(shù)據(jù)庫(kù)過(guò)段時(shí)間會(huì)消失是什么情況?10. mac里的docker如何命令行開啟呢?

網(wǎng)公網(wǎng)安備