咱們經常站點中會提供給用戶上傳文件、圖片、視頻或者諸如爲了提升性能生成的靜態文件等存儲在站點應用中。但若是靜態資源文件和項目文件在同一個目錄下,當咱們從新部署文件時,war從新解壓會致使靜態資源文件的丟失。若是經過提早備份這些靜態文件,一來添加了很多麻煩,而來隨着上傳的數據文件的增長,文件數和文件大小的增長,增長了部署的時間。那麼如何解決這個問題?css
因爲個人服務器是linux服務器,應用服務器是tomcat。所以要使用bash腳本進行解壓的,並規定哪些目錄是能夠替換的,哪些目錄必須保留不能刪除和覆蓋。html
在解壓和覆蓋以前先進行備份相關應用程序和資源文件。要想經過自定義的解壓更新,必須關閉tomcat的自解壓功能。在server.xml中不能設置該應用的context的節點屬性 reloadable="true".如下是自解壓腳本代碼。假設站點名稱爲site
java
# site deploy script WEB_APP_DIR="/home/webapps/site" WEB_DEPLOY_DIR="/home/deploy/site" BACKUP_DIR="/home/backup/site" WAR_FILENAME="site.war" #stop tomcat service cd $TOMCAT_HOME/bin ./shutdown.sh mkdir $WEB_DEPLOY_DIR #backup file cp -R $WEB_APP_DIR $BACKUP_DIR/site_$(date -d today +%Y%m%d%H%M%S) cp $WEB_APP_DIR/WEB-INF/classes/setup/applicationContext.xml $WEB_DEPLOY_DIR/applicationContext.xml #copy apps cd $WEB_DEPLOY_DIR cp /ftpupload/$WAR_FILENAME $WAR_FILENAME jar -xf $WAR_FILENAME rm -r $WEB_APP_DIR/WEB-INF cp -R WEB-INF $WEB_APP_DIR rm -r $WEB_APP_DIR/ckeditor cp -R ckeditor $WEB_APP_DIR rm -r $WEB_APP_DIR/css cp -R css $WEB_APP_DIR rm -r $WEB_APP_DIR/js cp -R js $WEB_APP_DIR rm -r $WEB_APP_DIR/images cp -R images $WEB_APP_DIR rm -r $WEB_APP_DIR/META-INF cp -R META-INF $WEB_APP_DIR rm -r $WEB_APP_DIR/about cp -R about $WEB_APP_DIR rm -r $WEB_APP_DIR/ueditor cp -R ueditor $WEB_APP_DIR rm -r $WEB_APP_DIR/upload cp -R upload $WEB_APP_DIR cp index.jsp $WEB_APP_DIR #recover config file cp applicationContext.xml $WEB_APP_DIR/WEB-INF/classes/setup/ echo $WEB_DEPLOY_DIR #remove all deploy files rm -rf $WEB_DEPLOY_DIR #start tomcat service cd $TOMCAT_HOME/bin ./startup.sh
將以上內容保存爲site_deploy.sh,並對該bash文件進行受權linux
chmod +x site_deploy.sh
假設站點名稱爲site,咱們在server.xml中添加一個帶有虛擬路徑的site的站點配置web
<Host name="site.com" appBase="/home/tomcat/webapps/" unpackWARs="true" autoDeploy="true" > <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/home/logs/tomcat/site" prefix="site." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> <Context path="" docBase="/home/webapps/site" reloadable="true" crossContext="true"/> <Context path="/html" docBase="/home/apache2/htdocs/site" reloadable="true" crossContext="true"/> </Host>
經過以上即可以解決上面所說的問題。應用程序的部署不影響到用戶上傳的數據文件以及程序生成的靜態數據文件。apache
若是有經過apache部署負載均衡的,須要在httpd.conf設定虛擬路徑的別名才能正常訪問靜態資源文件。tomcat
Alias /html /home/apache2/htdocs/moral