应用部署
应用部署前言
- Tomcat 应用部署和其它web服务的区别:
nginx部署方式
假设在nginx中部署2个网站应用 eshop、forum,假设网站根目录是/data/nginx/html/,那么部署可以是这样的:
- eshop解压缩所有文件放到 /data/nginx/html/ 目录下
- forum的文件放到 /data/nginx/html/forum/ 目录下
最终网页连接和目录的对应关系:
http://localhost/ #即对应eshop的应用,对应的目录是:/data/nginx/html/
http://localhost/forum/ #即对应forum的应用,对应的目录是:/data/nginx/html/forum/tomcat部署方式
tomcat的默认根目录是 $CATALINA_BASE/webapps/ROOT
- eshop解压缩所有文件放到 $CATALINA_BASE/webapps/ROOT 目录下
- forum的文件放到 $CATALINA_BASE/webapps/forum/ 目录下
最终网页连接和目录的对应关系:
http://localhost/ #即对应eshop的应用,对应的目录是:$CATALINA_BASE/webapps/ROOT
http://localhost/forum/ #即对应forum的应用,对应的目录是:$CATALINA_BASE/webapps/forum/其它说明:
-
$CATALINA_BASE 就是 tomcat 的家目录,比如:/usr/local/tomcat/
-
如果同时存在 $CATALINA_BASE/webapps/forum/ 和 $CATALINA_BASE/webapps/ROOT/forum/,则以 $CATALINA_BASE/webapps/forum/优先生效
-
每一个虚拟主机都可以使用appBase指令配置自己的站点目录,使用appBase目录下的ROOT目录作为主站目录
部署目录说明
-
Tomcat 中默认网站根目录是:$CATALINA_BASE/webapps/
-
$CATALINA_BASE: /usr/local/tomcat(即tomcat安装时的根目录)
-
$CATALINA_BASE/webapps/ 下面的每个目录都是对应的 WebApp
-
WebApp目录中,可能有以下子目录,但下面子目录是非必须的
- WEB-INF/:当前目录WebApp的私有资源路径,通常存储当前应用使用的web.xml和context.xml配置文件
- META-INF/:类似于WEB-INF/,也是私有资源的配置信息,和WEB-INF/目录一样浏览器无法访问
- classes/:类文件,当前webapp需要的类
- lib/:当前应用依赖的jar包
部署目录规划
- 实际生产环境参考范例:
- /data/tomcat/tomcat_appdir 保存web压缩包的目录
- 如:
- myapp_2022-03-06-22:06:43.tar.gz
- myapp_2022-03-08-23:06:32.tar.gz
- myapp.war 等…
- 如:
- /data/tomcat/tomcat_webdir 保存web压缩包解压后的目录,也就是java代码的实际存放目录
- 如:
- myapp_2022-03-06-22:06:43
- myapp_2022-03-08-23:06:32 等…
- 如:
- /data/tomcat/tomcat_webapps tomcat加载目录,在server.xml定义,等价于/usr/local/tomcat/webapps/,主要是将此目录下的app以软连接的方式指向/data/tomcat/tomcat_webdir中的版本
- 如:
- /usr/local/tomcat/webapps/myapp –> /data/tomcat/tomcat_webdir/myapp_2022-03-08-23:06:32
- 如:
目录创建方式
[root@tomcat-node1 ~]# mkdir -p /data/tomcat/tomcat_{appdir,webapps,webdir}server.xml配置
[root@tomcat-node1 ~]# vim /usr/local/tomcat/conf/server.xml
...
<Host name="myapp" appBase="/data/tomcat/tomcat_webapps">
...主页部署
主页存放位置和查找次序说明
- 默认情况下 tomcat 会在 $CATALINA_BASE/webapps/ROOT/ 目录下寻找主页文件
- 查找次序如下:
- index.html
- index.htm
- index.jsp
- 可以通过修改 $CATALINA_BASE/conf/web.xml 文件中的
标签中的内容修改默认页面文件查找次序
修改默认主页查找次序
全局修改默认主页
- 优先级低于webAPP的专有配置
- 需重启tomcat服务才能生效(测试发现 Tomcat/8.5.73 无需重启也可生效)
#准备测试页面
[root@centos8 ~]# echo 'index.jsp' > /usr/local/tomcat/webapps/ROOT/index.jsp
[root@centos8 ~]# echo 'index.html' > /usr/local/tomcat/webapps/ROOT/index.html
[root@centos8 ~]# echo 'index.htm' > /usr/local/tomcat/webapps/ROOT/index.htm
#修改前测试
[root@client ~]#curl 10.0.0.8:8080
index.html
#修改全局配置文件
[root@centos8 ~]# vim /usr/local/tomcat/conf/web.xml
...
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>
...
#修改后测试
[root@client ~]#curl 10.0.0.8:8080
index.jspwebAPP专有配置修改默认主页
- 优先级高于全局配置
- 无需重启tomcat即可生效
#准备测试页面
[root@centos8 ~]#echo 'index.jsp' > /usr/local/tomcat/webapps/WEB-INF/index.jsp
[root@centos8 ~]#echo 'index.html' > /usr/local/tomcat/webapps/WEB-INF/index.html
[root@centos8 ~]#echo 'index.htm' > /usr/local/tomcat/webapps/WEB-INF/index.htm
#修改前测试
[root@client ~]#curl 10.0.0.8:8080/WEB-INF
index.jsp
#修改webAPP专有配置
[root@centos8 ~]# vim /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml
...
#在文件倒数第二行添加添加
<welcome-file-list>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
#测试访问
[root@client ~]#curl 10.0.0.8:8080/WEB-INF
index.htm
#全局配置如下:
#可以发现应用独立配置优先级高于全局配置
[root@centos8 ~]# vim /usr/local/tomcat/conf/web.xml
...
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>
...应用部署
将webapp的源文件放置到目标目录,通过web.xml和context.xml文件中配置的路径就可以访问该webapp,通过类加载器加载其特有的类和依赖的类到JVM上,最终实现用户可以通过浏览器访问该应用
应用的归档格式
- *.war:WebApp打包,类zip格式文件,通常包括一个应用的所有资源(如:jsp、html、配置文件等)
- *.jar:EJB类文件的打包压缩类zip格式文件,包括很多
自动部署
-
Tomcat一旦发现多了一个web应用APP.war包后,默认会自动把它解压缩,加载并启动起来
-
**自动部署 和 自动反部署依赖于以下配置:**此配置也是默认值
-
自动部署在生产中通常都是关闭的
- 设置 unpackWARs=“false” autoDeploy=“false"后重启tomcat服务,将不会再进行自动部署和自动反部署,生产中为了防止被植入木马等恶意程序,因此我们要关闭自动部署
[root@centos8 ~]# cd /usr/local/tomcat/ [root@centos8 tomcat]# pwd /usr/local/tomcat [root@centos8 tomcat]# vim conf/server.xml ... <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> ...
实战案例:自动部署war包
准备war包
#准备war包中的文件
[root@centos8 ~]# mkdir /data/app
[root@centos8 ~]# cat /data/app/index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>
#打成war包(war包的名称决定了tomcat子目录的名称)
[root@centos8 app]# cd /data/app/
[root@centos8 app]# jar cvf app.war *
added manifest
adding: index.jsp(in = 118) (out= 103)(deflated 12%)
[root@centos8 app]# ls
app.war index.jsp
[root@centos8 app]# file app.war
app.war: Java archive data (JAR)
#修改war包权限
[root@centos8 app]# chown tomcat.tomcat app.war 实现自动部署war包
#部署前查看
[root@centos8 ~]# ll /usr/local/tomcat/webapps/ -t
total 4
drwxr-x--- 6 tomcat tomcat 114 Jan 1 01:40 manager
drwxr-x--- 6 tomcat tomcat 79 Jan 1 01:40 host-manager
drwxr-x--- 7 tomcat tomcat 99 Jan 1 01:40 examples
drwxr-x--- 15 tomcat tomcat 4096 Jan 1 01:40 docs
drwxr-x--- 3 tomcat tomcat 223 Jan 1 01:40 ROOT
#将制作的war包拷贝到webapps目录下
[root@centos8 ~]# cp -a /data/app/app.war /usr/local/tomcat/webapps/
[root@centos8 ~]# ll /usr/local/tomcat/webapps/ -t
total 8
drwxr-x--- 3 tomcat tomcat 39 Jan 2 19:13 app #自动解压缩的war包,和war包同名
-rw-r--r-- 1 tomcat tomcat 555 Jan 2 19:08 app.war #拷贝的war包
drwxr-x--- 6 tomcat tomcat 114 Jan 1 01:40 manager
drwxr-x--- 6 tomcat tomcat 79 Jan 1 01:40 host-manager
drwxr-x--- 7 tomcat tomcat 99 Jan 1 01:40 examples
drwxr-x--- 15 tomcat tomcat 4096 Jan 1 01:40 docs
drwxr-x--- 3 tomcat tomcat 223 Jan 1 01:40 ROOT
#测试访问
[root@client ~]#curl 10.0.0.18:8080/app/
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>
[root@client ~]#curl 10.0.0.18:8080/app/ -I
HTTP/1.1 200
Set-Cookie: JSESSIONID=83A175C613AA5E389C50AB6CC21ECECB; Path=/app; HttpOnly
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Sun, 02 Jan 2022 11:15:44 GMT
#还会生成一些其它文件相关
[root@centos8 ~]# tree /usr/local/tomcat/webapps/app
/usr/local/tomcat/webapps/app
├── index.jsp
└── META-INF
├── MANIFEST.MF
└── war-tracker手动部署
手动部署分类
-
冷部署:
- 部署前停止tomcat服务,然后将webapp放到指定目录,最后再去启动tomcat服务
-
热部署:
- tomcat服务不停止,需要依赖manager、ant脚本、tcd(tomcat client deployer)等工具
实战案例:手动部署
#手动部署前
[root@centos8 ~]# ll -t /usr/local/tomcat/webapps/
total 4
drwxr-x--- 6 tomcat tomcat 114 Jan 1 01:40 manager
drwxr-x--- 6 tomcat tomcat 79 Jan 1 01:40 host-manager
drwxr-x--- 7 tomcat tomcat 99 Jan 1 01:40 examples
drwxr-x--- 15 tomcat tomcat 4096 Jan 1 01:40 docs
drwxr-x--- 3 tomcat tomcat 223 Jan 1 01:40 ROOT
#手动部署
[root@centos8 ~]# unzip /data/app/app.war -d /usr/local/tomcat/webapps/app
Archive: /data/app/app.war
creating: /usr/local/tomcat/webapps/app/META-INF/
inflating: /usr/local/tomcat/webapps/app/META-INF/MANIFEST.MF
inflating: /usr/local/tomcat/webapps/app/index.jsp
[root@centos8 ~]# chown -R tomcat.tomcat /usr/local/tomcat/webapps/app
#查看结果
total 4
drwxr-xr-x 3 tomcat tomcat 39 Jan 2 19:55 app
drwxr-x--- 6 tomcat tomcat 114 Jan 1 01:40 manager
drwxr-x--- 6 tomcat tomcat 79 Jan 1 01:40 host-manager
drwxr-x--- 7 tomcat tomcat 99 Jan 1 01:40 examples
drwxr-x--- 15 tomcat tomcat 4096 Jan 1 01:40 docs
drwxr-x--- 3 tomcat tomcat 223 Jan 1 01:40 ROOT反部署
-
即移除部署(回滚)
-
停止webapp运行,并从JVM上清除已经加载的类,再从tomcat应用目录中移除部署的文件
自动反部署
#反部署前
[root@centos8 ~]# ll /usr/local/tomcat/webapps/ -t
total 8
drwxr-x--- 3 tomcat tomcat 39 Jan 2 19:13 app
-rw-r--r-- 1 tomcat tomcat 555 Jan 2 19:08 app.war
drwxr-x--- 6 tomcat tomcat 114 Jan 1 01:40 manager
drwxr-x--- 6 tomcat tomcat 79 Jan 1 01:40 host-manager
drwxr-x--- 7 tomcat tomcat 99 Jan 1 01:40 examples
drwxr-x--- 15 tomcat tomcat 4096 Jan 1 01:40 docs
drwxr-x--- 3 tomcat tomcat 223 Jan 1 01:40 ROOT
#删除目录中的war包
[root@centos8 ~]# rm -f /usr/local/tomcat/webapps/app.war
#查看结果(app目录也随之删除)
[root@centos8 ~]# ll /usr/local/tomcat/webapps/ -t
total 4
drwxr-x--- 6 tomcat tomcat 114 Jan 1 01:40 manager
drwxr-x--- 6 tomcat tomcat 79 Jan 1 01:40 host-manager
drwxr-x--- 7 tomcat tomcat 99 Jan 1 01:40 examples
drwxr-x--- 15 tomcat tomcat 4096 Jan 1 01:40 docs
drwxr-x--- 3 tomcat tomcat 223 Jan 1 01:40 ROOT