Tomcat在服务器上发布项目流程(项目配置文件文件分离)
理想方式-基于shell脚本实现一键发布
具备功能:
Tomcat自身配置与项目分离,便于以后升级Tomcat或者统一配置;
项目的配置文件与项目本身的war包分离(采用shell脚本将服务器上的配置文件替换war包内的配置文件);
一键部署与快速回滚
自定义项目的配置(jvm参数等)
实现步骤:
1.部署规划
文件目录结构:
├── service-app 项目部署文件目录
--------------------------从安装tomcat中拷贝以下文件夹
│ ├── conf
│ ├── logs (也可自己建立空文件夹)
│ ├── temp (同上)
│ ├── webapps (同上)
│ └── work (同上)
---------------------------项目相关文件
│ ├── app-conf (项目配置文件)
│ ├── war (war包解压后存放的文件)
--------------------------编写的shell脚本
│ ├── tomcat.sh (启动脚本)
│ ├── deploy.sh (部署脚本)
--------------------------运行脚本后生成的文件
│ ├── appwar ->
war/demo-2.0-2018-03-04_09-22-28 (软连接指向解压后的项目文件夹)
│ ├── current_deploy_info (当前部署记录)
│ ├── last_deploy_info (上次部署记录)
---------------------
[root@Aruen service-app]# ll
total 44
drwxr-xr-x 2 root root 4096 Nov 26 13:49 app-conf
lrwxrwxrwx 1 root root 45 Nov 26 14:28 appwar -> war/iaac-individual-2.0.0-2018-11-26_14-28-50
drwxr-xr-x 3 root root 4096 Nov 26 11:41 conf
-rwxr-xr-x 1 root root 84 Nov 26 14:28 current_deploy.sh
-rwxr-xr-x 1 root root 1706 Nov 26 14:11 deploy.sh
-rw-r--r-- 1 root root 84 Nov 26 14:28 last_deploy_info
drwxr-xr-x 2 root root 4096 Nov 26 14:28 logs
drwxr-xr-x 2 root root 4096 Nov 26 11:23 temp
-rwxr-xr-x 1 root root 640 Nov 26 11:31 tomcat.sh
drwxr-xr-x 5 root root 4096 Nov 26 14:28 war
drwxr-xr-x 7 root root 4096 Nov 26 11:23 webapps
drwxr-xr-x 3 root root 4096 Nov 26 11:25 work
修改conf下service.xml中的端口为默认80端口,便于浏览器访问:
connectionTimeout="20000" redirectPort="8443" /> 2.tomcat.sh脚本 #!/bin/bash #配置jvm参数 #export JAVA_OPTS="-Xms100m -Xmx200m" #export JAVA_HOME=/usr/lib/java/jdk1.8.0_131 export CATALINA_HOME=/usr/local/tomcat export CATALINA_BASE="`pwd`" case $1 in start) $CATALINA_HOME/bin/catalina.sh start echo start success!! ;; stop) $CATALINA_HOME/bin/catalina.sh stop echo stop success!! ;; restart) $CATALINA_HOME/bin/catalina.sh stop echo stop success!! sleep 2 $CATALINA_HOME/bin/catalina.sh start echo start success!! ;; esac exit 0 3.deploy.sh脚本 #!/bin/bash -e #应用war包名称 pom_a=$1 #版本号 pom_v=$2 export work_time=$(date +%Y-%m-%d_%H-%M-%S) echo "deploy time: $work_time" mkdir -p war/ #1.1 下载war包的命令可以在此补充(svn/ftp),这里写死为war目录 war=war/${pom_a}-${pom_v}.war deploy_war() { #1.2检查war包是否存在 if [ ! -f "$war" ]; then echo "war not exist: $war" exit 1 fi #2.1解压war包到指定目录,格式为war包名称加部署时间( target_d=war/${pom_a}-${pom_v}-$work_time target_dir=`pwd`/$target_d unzip -q $war -d $target_dir #2.2替换war包解压后的配置文件,重复直接覆盖,不提示 cp -rf app-conf/* $target_dir/WEB-INF/classes/ #2.3建立软连接appwar指向解压后的war包目录 rm -f appwar ln -sf $target_d appwar #2.4判断current_deploy_info文件是否存在,即是否部署过 # 第一次部署,将Root.xml中的Context标签下的docBace目录指向软连接appwar,并建立本次部署信息记录(current_deploy_info文件) # 以后部署,停止tomcat并生成上次部署的信息(lash_deplo_info文件) if [ -f current_deploy.sh ] then ./tomcat.sh stop cat current_deploy.sh > last_deploy_info fi target_ln=`pwd`/appwar echo ' ' > conf/Catalina/localhost/ROOT.xml echo -ne "
pom_a=${pom_a}
pom_v=${pom_v}
dir=${target_d}" > current_deploy.sh chmod +x current_deploy.sh ./tomcat.sh start } deploy_war 修改deploy.sh、tomcat.sh可执行权限 chmod -R 755 deploy.sh/tomcat.sh 4.使用示例 配置文件在java中修改, //File resourcesFile = new File(System.getProperty("user.dir") + "/resources/config.txt"); File resourcesFile = new File(System.getProperty("user.dir") + "/app-conf/config.txt"); 再将config文件上传到app-conf目录下 [root@Aruen app-conf]# ll total 4 -rw-r--r-- 1 root root 1211 Nov 26 13:49 config.txt ##################部署war目录下single-2.0.0.war######################### [root@Aruen service-app]# ./deploy.sh single 2.0.0 deploy time: 2018-11-26_14-28-50 Using CATALINA_BASE: /usr/service-app Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/service-app/temp Using JRE_HOME: /usr/local/jdk1.8.0_144 Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar stop success!! Using CATALINA_BASE: /usr/service-app Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/service-app/temp Using JRE_HOME: /usr/local/jdk1.8.0_144 Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started. start success!! ##################回滚部署版本为1.0######################### [root@Aruen service-app]# ll total 44 drwxr-xr-x 2 root root 4096 Nov 26 13:49 app-conf lrwxrwxrwx 1 root root 45 Nov 26 14:28 appwar -> war/single-2.0.0-2018-11-26_14-28-50 drwxr-xr-x 3 root root 4096 Nov 26 11:41 conf -rwxr-xr-x 1 root root 84 Nov 26 14:28 current_deploy.sh -rwxr-xr-x 1 root root 1706 Nov 26 14:11 deploy.sh -rw-r--r-- 1 root root 84 Nov 26 14:28 last_deploy_info drwxr-xr-x 2 root root 4096 Nov 26 14:28 logs drwxr-xr-x 2 root root 4096 Nov 26 11:23 temp -rwxr-xr-x 1 root root 640 Nov 26 11:31 tomcat.sh drwxr-xr-x 5 root root 4096 Nov 26 14:28 war drwxr-xr-x 7 root root 4096 Nov 26 11:23 webapps drwxr-xr-x 3 root root 4096 Nov 26 11:25 work [root@Aruen service-app]# rm -f appwar [root@Aruen service-app]# ln -sf war/single-1.0.0-2018-11-26_14-28-38 [root@Aruen service-app]# ll total 44 drwxr-xr-x 2 root root 4096 Nov 26 13:49 app-conf lrwxrwxrwx 1 root root 45 Nov 26 14:28 appwar -> war/single-1.0.0-2018-11-26_14-28-50 drwxr-xr-x 3 root root 4096 Nov 26 11:41 conf -rwxr-xr-x 1 root root 84 Nov 26 14:28 current_deploy.sh -rwxr-xr-x 1 root root 1706 Nov 26 14:11 deploy.sh -rw-r--r-- 1 root root 84 Nov 26 14:28 last_deploy_info drwxr-xr-x 2 root root 4096 Nov 26 14:28 logs drwxr-xr-x 2 root root 4096 Nov 26 11:23 temp -rwxr-xr-x 1 root root 640 Nov 26 11:31 tomcat.sh drwxr-xr-x 5 root root 4096 Nov 26 14:28 war drwxr-xr-x 7 root root 4096 Nov 26 11:23 webapps drwxr-xr-x 3 root root 4096 Nov 26 11:25 work [root@Aruen service-app]# ./tomcat.sh restart Using CATALINA_BASE: /usr/service-app Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/service-app/temp Using JRE_HOME: /usr/local/jdk1.8.0_144 Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar stop success!! Using CATALINA_BASE: /usr/service-app Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/service-app/temp Using JRE_HOME: /usr/local/jdk1.8.0_144 Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started. start success!!
single-1.0.0-2018-11-26_14-28-50)