通過配置tomcat虛擬路徑配置站點的靜態資源


      我們常常站點中會提供給用戶上傳文件、圖片、視頻或者諸如為了提高性能生成的靜態文件等存儲在站點應用中。但如果靜態資源文件和項目文件在同一個目錄下,當我們重新部署文件時,war重新解壓會導致靜態資源文件的丟失。如果通過提前備份這些靜態文件,一來添加了不少麻煩,而來隨着上傳的數據文件的增加,文件數和文件大小的增加,增加了部署的時間。那么如何解決這個問題?

     通過編寫bash腳本實現指定目錄解壓

      由於我的服務器是linux服務器,應用服務器是tomcat。因此要使用bash腳本進行解壓的,並規定哪些目錄是可以替換的,哪些目錄必須保留不能刪除和覆蓋。

      在解壓和覆蓋之前先進行備份相關應用程序和資源文件。要想通過自定義的解壓更新,必須關閉tomcat的自解壓功能。在server.xml中不能設置該應用的context的節點屬性    reloadable="true".以下是自解壓腳本代碼。假設站點名稱為site

 

# 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文件進行授權

 

 

chmod +x site_deploy.sh

 

      通過給tomcat配置虛擬目錄

        假設站點名稱為site,我們在server.xml中添加一個帶有虛擬路徑的site的站點配置

      <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>

 

  • /home/webapps/site為站點主應用程序的部署路徑。
  • /html為站點的虛擬路徑,/home/apache2/htdocs/site為靜態資源存儲絕對路徑。

        通過以上便可以解決上面所說的問題。應用程序的部署不影響到用戶上傳的數據文件以及程序生成的靜態數據文件。

        如果有通過apache部署負載均衡的,需要在httpd.conf設定虛擬路徑的別名才能正常訪問靜態資源文件。

 

    Alias /html /home/apache2/htdocs/moral

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM