部署專案時一直用資料夾方式部署項目,近期嘗試使用WAR套件專案部署,遇到了下面的問題:
上傳檔案位置指定本機路徑,但由於獨立在專案外,還需要單獨配置專案才能存取
#公司專案數量多(1台伺服器200左右,20台左右)時,每個專案這樣配置,運維工作十分繁重
#維護時只調整了一個css或JS文件,卻要重新打包發布
#比較之前資料夾方式,實在是很麻煩,想問下有經驗的同學:
你遇到的使用WAR包方式的應用程式場景是什麼?
如何解決我遇到的問題?
Following the voice in heart.
以下是我的實戰運維經驗:
配置應是獨立於專案的,這樣可以只打一次war包,而運用到不同環境上;
運用自動化維運工具,如SaltStack、Ansible或Jenkins來幫助你大量操作;
如果預料到靜態資源會頻繁改動,最好跟Java專案分開來,部署到不同站點,或用nginx做分流;
建議部署程式去解壓縮war檔(而不是讓Tomcat自己來解壓縮),停掉Tomcat,ROOT目錄用ln -s定向到新的目錄,再啟動Tomcat,這樣Tomcat會跑得更流暢;
舊有的目錄暫時不要刪,如果部署錯了,用ln -s把ROOT目錄切換到舊的,就能實現快速回滾。
實際經驗:我經手過的項目都是在weblogic上以目錄的形式發布,目錄結構:
DOMAINS --域 └─domainA --域A └─apps --应用 └─app1 --应用1 ├─deploy --部署 │ ├─src --Java源代码(仅限项目实施开发的源代码,不包含应用库的源代码),服务器统一编译一次防止Java版本问题以及编码问题 │ └─war --标准war包结构 ├─patch --增量更新目录 ├─runtime --运行时目录,日志,用户文件之类的 └─tmp --临时目录
我依照這個標準結構寫了若干shell腳本來運維任務自動化,就是啟停,監控,更新什麼的,其實也就花了幾天時間,程式碼也不多,但是現在我再也沒有手動幹過運維的事情了。
基本流程就是:程式碼開發提交-->SVN匯出增量更新包-->上傳至伺服器-->伺服器上執行
改一個html頁面都要重新打包,萬一打錯文件進去咋辦? 靜態的可以單獨發布,那我他媽改一個JAVA也要重新打包就活該啦?
沒有一個容器是真正在war包裡面發布和服務應用的,都是解壓到某個臨時位置,war包是壓縮格式,你讓任何一個容器每服務一個請求都去讀取壓縮文件裡面的資源肯定會有效能問題的(至少JSP都是這樣)。
這是我的個人經手的一些小型項目的解決方案,大型項目,你可能需要全流程工具鏈,就是什麼持續整合什麼的。
以下是我的實戰運維經驗:
配置應是獨立於專案的,這樣可以只打一次war包,而運用到不同環境上;
運用自動化維運工具,如SaltStack、Ansible或Jenkins來幫助你大量操作;
如果預料到靜態資源會頻繁改動,最好跟Java專案分開來,部署到不同站點,或用nginx做分流;
建議部署程式去解壓縮war檔(而不是讓Tomcat自己來解壓縮),停掉Tomcat,ROOT目錄用ln -s定向到新的目錄,再啟動Tomcat,這樣Tomcat會跑得更流暢;
舊有的目錄暫時不要刪,如果部署錯了,用ln -s把ROOT目錄切換到舊的,就能實現快速回滾。
實際經驗:
我經手過的項目都是在weblogic上以目錄的形式發布,目錄結構:
我依照這個標準結構寫了若干shell腳本來運維任務自動化,就是啟停,監控,更新什麼的,其實也就花了幾天時間,程式碼也不多,但是現在我再也沒有手動幹過運維的事情了。
基本流程就是:程式碼開發提交-->SVN匯出增量更新包-->上傳至伺服器-->伺服器上執行
改一個html頁面都要重新打包,萬一打錯文件進去咋辦? 靜態的可以單獨發布,那我他媽改一個JAVA也要重新打包就活該啦?
沒有一個容器是真正在war包裡面發布和服務應用的,都是解壓到某個臨時位置,war包是壓縮格式,你讓任何一個容器每服務一個請求都去讀取壓縮文件裡面的資源肯定會有效能問題的(至少JSP都是這樣)。
這是我的個人經手的一些小型項目的解決方案,大型項目,你可能需要全流程工具鏈,就是什麼持續整合什麼的。