• 通过配置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
  • 相关阅读:
    淘宝技术架构演进之路
    单点登录
    [c++11] ——条件变量(Condition Variable)
    std::lock_guard unique_lock
    C++中push_back和emplace_back的区别
    C++11 CAS无锁函数compare_exchange_weak的使用
    C++11新特性之 rvalue Reference(右值引用)
    C++ auto和decltype的区别
    ovs contrack
    周总结03
  • 原文地址:https://www.cnblogs.com/wala-wo/p/5119190.html
Copyright © 2020-2023  润新知