咱们经常站点中会提供给用户上传文件、图片、视频或者诸如为了提升性能生成的静态文件等存储在站点应用中。但若是静态资源文件和项目文件在同一个目录下,当咱们从新部署文件时,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