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

享学课堂特邀做者:老顾
html

1、前言

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

2、tomcat组件

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


咱们小伙伴要抓住几个点apache

  1. 对外接收请求是Connector链接器组件,能够支持不一样协议,Connector组件中可设置端口,因此咱们请求的时候须要输入端口号。能够把Connector看成接待员。tomcat

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

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

  4. 在根据path分配context组件app

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

3、部署目录

咱们先看一下Tomcat目录结构:jvm

--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应用从新部署?

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

4、目录规划

tomcat软连接

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

# cd /usr/local

# ll

drwxr-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

# ll

drwxr-xr-x.  9 root root  220 5月   8 19:23 apache-tomcat-8.5.40

lrwxrwxrwx.  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存放日志文件。

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

5、启动脚本

此启动脚本,老顾引用了网上的一个脚本改造了一下,命名为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 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!!
        ;;
    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,这个知识点,网上不少,小伙伴们可自行查看,由于咱们已经单应用分离出来了,那样的配置好处不大。

6、总结

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

咱们通常在学习中,一些介绍的资料都是浅层次的,虽然可以运行起来,但在真实使用过程当中须要考虑别的因素(维护的方便性,隔离性等),因此在咱们学习到的基础上面会有很大的不同。但愿小伙伴经过本身学习的,必定要结合公司或者前辈们分享的生产实战经验,去理解真正的使用。谢谢你们!!!

相关文章
相关标签/搜索