部署項目時一直用文件夾方式部署項目,近期嘗試使用WAR包項目部署,遇到了下面的問題:
上傳文件位置指定本地路徑,但由于獨立在項目外,還需要單獨配置項目才能訪問
公司項目數(shù)量多(1臺服務器200左右,20臺左右)時,每個項目這樣配置,運維工作十分繁重
維護時只調(diào)整了一個css或JS文件,卻要重新打包發(fā)布
對比之前文件夾方式,實在是很麻煩,想問下有經(jīng)驗的同學:
你遇到的使用WAR包方式的應用場景是什么?
如何解決我遇到的問題?
Following the voice in heart.
以下是我的實戰(zhàn)運維經(jīng)驗:
配置應當是獨立于項目的,這樣可以只打一次war包,而運用到不同環(huán)境上;
運用自動化運維工具,如SaltStack、Ansible或Jenkins來幫助你批量操作;
如果預料到靜態(tài)資源會頻繁改動,最好跟Java項目分開來,部署到不同站點,或者用nginx做分流;
建議部署程序去解壓war文件(而不是讓Tomcat自己來解壓),停掉Tomcat,ROOT目錄用ln -s定向到新的目錄,再啟動Tomcat,這樣Tomcat會跑得更流暢;
舊有的目錄暫時不要刪,如果部署錯了,用ln -s把ROOT目錄切換到舊的,就能實現(xiàn)快速回滾。
實際經(jīng)驗:
我經(jīng)手過的項目都是在weblogic上以目錄的形式發(fā)布,目錄結(jié)構:
DOMAINS --域
└─domainA --域A
└─apps --應用
└─app1 --應用1
├─deploy --部署
│ ├─src --Java源代碼(僅限項目實施開發(fā)的源代碼,不包含應用庫的源代碼),服務器統(tǒng)一編譯一次防止Java版本問題以及編碼問題
│ └─war --標準war包結(jié)構
├─patch --增量更新目錄
├─runtime --運行時目錄,日志,用戶文件之類的
└─tmp --臨時目錄
我按照這種標準結(jié)構寫了若干shell腳本來運維任務自動化,就是啟停,監(jiān)控,更新什么的,其實也就花了幾天時間,代碼也不多,但是現(xiàn)在我再也沒有手動干過運維的事情了。
基本流程就是:代碼開發(fā)提交-->SVN導出增量更新包-->上傳至服務器-->服務器上執(zhí)行
改一個html頁面都要重新打包,萬一打錯文件進去咋辦? 靜態(tài)的可以單獨發(fā)布,那我他媽就改一個JAVA也要重新打包就活該啦?
沒有一個容器是真正在war包里面發(fā)布和服務應用的,都是解壓到某個臨時位置,war包是壓縮格式,你讓任何一個容器每服務一個請求都去讀取壓縮文件里面的資源肯定會有性能問題的(至少JSP都是這樣)。
這是我的個人經(jīng)手的一些小型項目的解決方案,大型項目,你可能需要全流程工具鏈,就是什么持續(xù)集成什么的。