享学课堂特邀作者:老顾
转载请声明出处!

一、前言

小伙伴们在网上看到的很多文章,都是对tomcat的一些介绍,什么配置啊,怎么启动。其实在生产环境中怎么部署,和网上介绍的有很大区别。这篇文章老顾就带着大家分享一些如何在生产环境下部署。

二、tomcat组件

我们先回顾一下tomcat有哪些组件

我们小伙伴要抓住几个点

  1. 对外接收请求是Connector连接器组件,可以支持不同协议,Connector组件中可设置端口,所以我们请求的时候需要输入端口号。可以把Connector当作接待员。

  2. Connector组件接收到请求后,转发给处理**Engine(catalina引擎)**组件去处理。

  3. 根据请求的域名,分配到对应的Host主机。

  4. 在根据path分配context组件

区分项目有2个核心组件,一个是host,一个是context。根据域名和path分配不同的项目。其实还少了一个就是启动参数的配置,也就是一同的项目启动参数也可以不一样,如端口号啊。

三、部署目录

我们先看一下Tomcat目录结构:

--bin //存放着tomcat启动和关闭脚本--conf //存放着tomcat服务器的各种配置文件--lib //tomcat服务器和所有web应用所属的jar文件--logs //存放着Tomcat的日志文件--temp //存放着Tomcat的运行时产生的临时文件--webapps //把web应用放到此目录即可--work //Tomcat将jsp生成的servlet源文件和字节码文件放到此目录

我们要部署一个web应用,只要把应用的war包放到webapps就可以了。网上一般也是这么讲的。小伙伴们觉得有什么问题吗

我们看一下,如果我们要部署两个web应用Web-A和Web-B,把他放到webapps中。我们到bin目录下运行startup.sh启动,这样web-A和web-B就可以访问了。

如果现在业务上需要把web-B先暂停,那我们改怎么办?还有就是tomcat启动是会有启动参数设置,如最大线程数,最小线程数等配置。那web-A和web-B怎么配置不一样的启动参数呢?

其实还有一个问题,如果我们要把**tomcat版本升级,怎么办?**把tomcat直接覆盖?那些web应用重新部署?

小伙伴们,应该怎么办呢?

四、目录规划

tomcat软链接

我们先把tomcat应用放到/usr/local目录下

# cd /usr/local# lldrwxr-xr-x.  9 root root  220 5月   8 19:23 apache-tomcat-8.5.40

上面我们是应用了tomcat8.5版本,如果我们需要升级到9.x版本的话,如果我们需要升级到9.x版本的话,那关于tomcat目录的路径就需要重新修改,这就太不方便了,所以我们可以用软链接的方式解决这个问题

# ln -s apache-tomcat-8.5.40 tomcat# lldrwxr-xr-x.  9 root root  220 5月   8 19:23 apache-tomcat-8.5.40lrwxrwxrwx.  1 root root   20 5月   8 16:42 tomcat -> apache-tomcat-8.5.40

这样以后用tomcat应用路径,就直接使用tomcat这个软链接,即使将来tomcat升级只要修改一些软链接就行了,其他就不需要改。

目录分离

我们应该要把tomcat和web应用目录分离出来,即使tomcat升级也跟web应用没有关系。那分离出来,怎么启动呢?

我们要利用启动参数中的CATALINA_HOME和CATALINA_BASE,来指定tomcat程序应用和web应用;通过CATALINA_BASE就可以实现web应用分离出去,我们来看一些tomcat一共有哪些启动参数

启动参数 描述说明
JAVA_OPT jvm启动参数,设置内存 编码等-Xms100m -Xmx200m -Dfile.encoding=UTF-8
JAVA_HOME 指定jdk目录
CATALINA_HOME tomcat程序根目录
CATALINA_BASE 应用部署目录,默认为 $CATALINA_HOME
CATALINA_OUT 应用日志输出目录,默认为$CATALINA_BASE/logs
CATALINA_TMPDIR 应用临时目录,默认为$CATALINA_BASE/temp

我们先在/usr/local目录下新建一个web-apps目录,此目录就放web应用

# mkdir web-apps
# ll
lrwxrwxrwx.  1 root root   20 5月   8 16:42 tomcat -> apache-tomcat-8.5.40
drwxr-xr-x.  2 root root    6 5月   8 20:29 web-apps

在web-apps目录下,新建web-a和web-b目录,这两个目录就是web-A和web-b的web应用目录。

# cd web-apps/
# mkdir web-a
# mkdir web-b
# ll
drwxr-xr-x. 2 root root 6 5月   8 20:33 web-a
drwxr-xr-x. 2 root root 6 5月   8 20:33 web-b

把tomcat程序中的conf目录拷贝到web-a和web-b里面,这样各个web应用都有各自的配置文件。

# cp -r /usr/local/tomcat/conf /usr/local/web-apps/web-a/
# cp -r /usr/local/tomcat/conf /usr/local/web-apps/web-b/

再在web-a和web-b目录下,新建webapps和logs目录,webapps存放web应用,logs存放日志文件。

到此目录分离开了,但还缺少一个启动脚本

五、启动脚本

此启动脚本,老顾引用了网上的一个脚本改造了一下,命名为tomcat.sh

#!/bin/bash
export JAVA_OPTS="-Xms100m -Xmx200m"
export JAVA_HOME="/usr/java/jdk1.8.0_181"
export CATALINA_HOME="/usr/local/tomcat"
export CATALINA_BASE="`pwd`"case $1 instart)$CATALINA_HOME/bin/catalina.sh startecho start success!!;;stop)$CATALINA_HOME/bin/catalina.sh stopecho stop success!!;;restart)$CATALINA_HOME/bin/catalina.sh stopecho stop success!!sleep 2$CATALINA_HOME/bin/catalina.sh startecho start success!!;;version)$CATALINA_HOME/bin/catalina.sh version;;configtest)$CATALINA_HOME/bin/catalina.sh configtest;;
esac
exit 0

脚本比较简单,核心就是启动参数,只要注意CATALINA_BASE="pwd"的意思是,执行脚本的路径,也就是代表web应用路径是脚本执行的路径;再把tomcat.sh设置一些启动权限 # chmod +x tomcat.sh 。

修改conf下的server.xml

<Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true"><Context path="/" docBase="" reloadable="true" /><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

修改了红色字体部分,host中的appBase是相对CATALINA_BASE的路径,就是web应用的路径,context中的path是请求url,docBase也是相对路径,相对于appBase的,当然也可以设置绝对路径。在web-a下创建index.html文件

到现在为止的web-a的目录下

# ll
drwx------. 3 root root 254 5月   8 22:05 conf
drwxr-xr-x. 2 root root 197 5月   8 21:27 logs
-rwxr-xr-x. 1 root root 598 5月   8 21:21 tomcat.sh
drwxr-xr-x. 2 root root  24 5月   8 21:25 webapps
# ll webapps/
-rw-r--r--. 1 root root 12 5月   8 21:25 index.html

启动tomcat.sh

# ./tomcat.sh start

访问 http://192.168.31.150:8080/ 就ok了,直接返回了index.html里面的内容。

需要说明的是,在web-a执行tomcat.sh,里面的启动参数**CATALINA_BASE是web应用路径,那tomcat.sh脚本中的$CATALINA_HOME/bin/catalina.sh 这个脚本执行所采用的conf配置文件是web-a目录下的,**跟tomcat程序的conf没有任务关系,也跟web-b目录下的conf也没有任何关系,这样就达到了应用之间的配置分离。

补充一下,**在配置context和host时,很多公司不会在server.xml配置,而是通过conf/Catalina目录下,新建host和context,**这个知识点,网上很多,小伙伴们可自行查看,因为我们已经单应用分离出来了,那样的配置好处不大。

六、总结

上面老顾介绍了tomcat在生产环境的部署要点,其实还缺少一个环节,就是我们war包或jar包是按照什么流程以及方式上传到生产环境的?这个留个悬念,下次老顾会介绍。

总结

上述知识点,囊括了目前互联网企业的主流应用技术以及能让你成为“香饽饽”的高级架构知识,每个笔记里面几乎都带有实战内容。

很多人担心学了容易忘,这里教你一个方法,那就是重复学习。

打个比方,假如你正在学习 spring 注解,突然发现了一个注解@Aspect,不知道干什么用的,你可能会去查看源码或者通过博客学习,花了半小时终于弄懂了,下次又看到@Aspect 了,你有点郁闷了,上次好像在哪哪哪学习,你快速打开网页花了五分钟又学会了。

资料领取方式:戳这里免费领取

从半小时和五分钟的对比中可以发现多学一次就离真正掌握知识又近了一步。

人的本性就是容易遗忘,只有不断加深印象、重复学习才能真正掌握,所以很多书我都是推荐大家多看几遍。哪有那么多天才,他只是比你多看了几遍书。
学会了。

资料领取方式:戳这里免费领取

从半小时和五分钟的对比中可以发现多学一次就离真正掌握知识又近了一步。

[外链图片转存中…(img-YV84jmMb-1623614617860)]

人的本性就是容易遗忘,只有不断加深印象、重复学习才能真正掌握,所以很多书我都是推荐大家多看几遍。哪有那么多天才,他只是比你多看了几遍书。

你知道怎么在生产环境下部署tomcat吗?相关推荐

  1. 你知道怎么在生产环境下部署tomcat吗?,灵魂拷问

    我们先看一下Tomcat目录结构: --bin //存放着tomcat启动和关闭脚本--conf //存放着tomcat服务器的各种配置文件--lib //tomcat服务器和所有web应用所属的ja ...

  2. mongodb添加创建修改时间_mongodb副本集生产环境下部署案例,推荐一个主两个从三台机器...

    Linux中部署Mongodb副本集 提示: 以下操作步骤较多,请耐心阅读. 关于理论部分请参考上篇浅谈mongodb副本集. 1. 准备 192.168.102.110 master 192.168 ...

  3. redis生产环境下部署lua脚本

    加载到redis redis-cli script load "$(cat test.lua)" 得到sha1值 执行 redis-cli evalsha "7a2054 ...

  4. windows环境下部署Tomcat到服务器

    1.在系统变量中设置: 变量名:CATALINA_HOME 变量值:D:\Program Files\Tomcat7.0.81   (放Tomcat的主目录) 2.系统变量的PATH变量中增加Tomc ...

  5. 【转】在生产环境中部署前端代码

    在生产环境中部署前端代码 本文章前端代码是基于vue+webpack开发的 Nginx是一款轻量级的Web 服务器/反向代理服务器 首先,webpack配置如下 在开发过程中,我们是通过npm run ...

  6. 在生产环境下处理EFCore数据库迁移的五种方法

    在生产环境下处理EFCore数据库迁移的五种方法 原文链接:https://www.thereformedprogrammer.net/handling-entity-framework-core-d ...

  7. mysql jail_2.1.5 jail在生产环境下的注意事项

    2.1.5 jail在生产环境下的注意事项 我们将jail用在线上的生产环境,发现其中有许多需要注意的事项,如下所示: 1)线上的服务器用的jail机器还是挺多的,通常一台Dell PowerEdge ...

  8. 多个vue项目生产环境下NGINX配置文件

    多个vue项目生产环境下NGINX配置文件 使用场景 1.多个前端项目 2.多个后端项目 3.修改nginx配置后端接口转发路径 4.反向代理 某个目录下 带特定后缀名的文件 5.vue3项目 使用前 ...

  9. Kubernetes 生产环境安装部署 基于 Kubernetes v1.14.0 之 etcd集群

    说明:没有明确注明在某台服务器,都是在k8s-operation 工作服务器完成 K8S node 节点数大于2000 节点 k8s-operation 目录规划,工作目录/apps/work/k8s ...

最新文章

  1. 7.Mongodb复制(副本集)
  2. Java程序员进阶的 3 个层次,你处于哪个?
  3. ae万能弹性表达式_外置常用ae插件 快速掌握AE软件的精髓
  4. j2ee servlet 和 threadlocal ,synchronized 与 web容器
  5. Express engine 学习笔记 - app.engine 的使用方法
  6. 红米note3支持html,【小米红米Note3评测】外观变化不小 金色版略显俗套_小米 红米Note3_手机评测-中关村在线...
  7. 找到符合条件的索引_程序员写了多年CRUD,总结出数据库索引这几点值得注意...
  8. 不为人知的 35 个 More Effective C++ 改善编程与设计的最佳方法 | 原力计划
  9. 【JAVA实例】代码生成器的原理讲解以及实际使用
  10. Javascript视频教程全集,基础入门学习-动力节点
  11. oracle awr报告提取,Oracle AWR报告提取方法
  12. php支付sdk接入网站教程,laravel 5.5 接入蚂蚁金服官方SDK(支付宝APP支付为例)开发步骤...
  13. 基于NLP处理企业家传记文档
  14. CTB6.0标注体系
  15. 你们公司测试都用什么工具啊?
  16. 利用Windows系统自带命令手工搞定病毒
  17. SAP 固定资产减值准备的处理方法
  18. PostgreSQL统计表占用空间
  19. 怎么购买企业邮箱,才划算?
  20. appium知识总结

热门文章

  1. SQL Server 2005 中附加只有mdf文件的数据库(修复置疑的数据库)
  2. python大作业外星人入侵_【python3小白上路系列】外星人入侵——开始
  3. python的应用包括哪些_Python应用领域有哪些?
  4. java 条码识别_条码识别示例代码
  5. linux强制回收内存,Linu系统cache强制回收
  6. shadows a parameter
  7. Python熊猫– GroupBy
  8. php 邮件验证_PHP程序来验证电子邮件地址
  9. psu是什么电脑配件_PSU的完整形式是什么?
  10. bfs广度优先搜索算法_图的广度优先搜索(BFS)