Tomcat - 你该知道的Tomcat生产环境部署

Dear 丶 2023-02-14 13:09 11阅读 0赞

文章目录

  • Pre
  • Tomcat 各组件及关系
  • server.xml 配置详解
    • server
    • service
    • connector
    • Engine
    • Host
    • Context
  • Tomcat与App应用分开部署

在这里插入图片描述


Pre

Tomcat Version : 8.5+

我们先回顾下 前几节学习的的tomcat的功能及架构

Tomcat是一个基于JAVA的WEB容器,其实现了JAVA EE中的 Servlet 与 jsp 规范,与Nginx apache 服务器不同在于一般用于动态请求处理。

在架构设计上采用面向组件的方式设计, 即整体功能是通过组件的方式拼装完成。

在这里插入图片描述


Tomcat 各组件及关系

在这里插入图片描述

  • Server 和 Service
  • Connector 连接器
     HTTP 1.1
     SSL https
     AJP( Apache JServ Protocol) apache 私有协议,用于apache 反向代理Tomcat
  • Container
     Engine 引擎 catalina
     Host 虚拟机 基于域名 分发请求
     Context 隔离各个WEB应用 每个Context的 ClassLoader都是独立
  • Component
     Manager (管理器)
     logger (日志管理)
     loader (载入器)
     pipeline (管道)
     valve (管道中的阀)

server.xml 配置详解

上述组件,都是可以在server.xml中配置

在这里插入图片描述

server

root元素 , server 的顶级配置

主要属性:

  • port:执行关闭命令的端口号
  • shutdown:关闭命令

基于telent 执行SHUTDOWN 命令即可关闭(必须大写)

  1. telnet 127.0.0.1 8005
  2. SHUTDOWN

service

服务:将多个connector 与一个Engine组合成一个服务,可以配置多个服务。


connector

连接器:用于接收 指定协议下的连接 并指定给唯一的Engine 进行处理。

主要属性:

  • protocol 监听的协议,默认是http/1.1
  • port 指定服务器端要创建的端口号
  • minThread服务器启动时创建的处理请求的线程数
  • maxThread最大可以创建的处理请求的线程数
  • enableLookups如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址
  • redirectPort指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号
  • acceptCount指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理
  • connectionTimeout指定超时的时间数(以毫秒为单位) 【请求连接tomcat的最大超时时间,如果超过该时间,tomcat自动掐断该请求。如果当前可使用的线程都被使用,connectionTimeout时间内还是没有线程能处理该请求,即超时 】
  • SSLEnabled 是否开启 SSL 验证,在Https 访问时需要开启。

举个例子

  1. <Connector port="8860" protocol="org.apache.coyote.http11.Http11NioProtocol"
  2. connectionTimeout="20000"
  3. redirectPort="8862"
  4. URIEncoding="UTF-8"
  5. useBodyEncodingForURI="true"
  6. compression="on" compressionMinSize="2048"
  7. compressableMimeType="text/html,text/xml,text/plain,text/javascript,text/css,application/x-json,application/json,application/x-javascript"
  8. maxThreads="1024" minSpareThreads="200"
  9. acceptCount="800"
  10. enableLookups="false"
  11. />

Engine

引擎:用于处理连接的执行器,默认的引擎是catalina。一个service 中只能配置一个Engine。

主要属性:name 引擎名称 defaultHost 默认host


Host

虚拟机:基于域名匹配至指定虚拟机。类似于nginx 当中的server,默认的虚拟机是localhost. 主要属性

举例配置多个Host

  1. <Host name="www.luban.com" appBase="/usr/www/artisan" unpackWARs="true" autoDeploy="true">
  2. <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="www.artisan.com.access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
  3. </Host>

Context

应用上下文:一个host 下可以配置多个Context ,每个Context 都有其独立的classPath。相互隔离,以免造成ClassPath 冲突。

举例配置多个Context

  1. <Context docBase="hello" path="/h" reloadable="true"/>

docBase 不能有 / , 否则是根目录


Tomcat与App应用分开部署

我们平时启动Tomcat过程是怎么样的?

  1. 复制WAR包至Tomcat webapp 目录。
  2. 执行starut.bat 脚本启动。
  3. 启动过程中war 包会被自动解压装载。

再回想我们在idea 中启动WEB项目的时候 也是把War包复杂至webapps 目录解压吗?

显然不是,其真正做法是在Tomcat程序文件之外创建了一个部署目录,在一般生产环境中也是这么做的 即:Tomcat 程序目录和部署目录分开 。

我们只需要在启动时指定CATALINA_HOME 与 CATALINA_BASE 参数即可实现。


































启动参数 描述说明
JAVA_OPTS jvm 启动参数 , 设置内存 编码等 -Xms200m -Xmx200m -Dfile.encoding=UTF-8
JAVA_HOME 指定jdk 目录,如果未设置从java 环境变量当中去找。
CATALINA_HOME Tomcat 程序根目录
CATALINA_BASE 应用部署目录,默认为$CATALINA_HOME
CATALINA_OUT 应用日志输出目录:默认$CATALINA_BASE/logs
CATALINA_TMPDIR 应用临时目录:默认:$CATALINA_BASE/temp

好处很明显:

  • 不会和 tomcat耦合在一起,升级tomcat版本很方便 ,搞个软连接爱指哪儿指哪儿
  • 配置文件隔离 : conf目录每个app都有一份,那岂不是什么端口号啊 想改就改~ ,改了这个AP的,也不影响另外一个AP的。因为conf是每个应用都有自己的嘛

当然了,缺点也是你得搞个启动脚本

操作步骤:

  1. 下载tomcat8.5+, 解压,比如这里解压到/root/artisan ,当然了你可以搞个软连接指定8.5+的版本。 后续升级维护这个软连接的指向即可
  2. 新建目录用于存放你的应用,比如叫apps 然后下面存放你的其中一个应用,比如叫 artisanAPP,也可以放多个 artisanAPP2 . 这些应用都是可以单独启动的。
  3. copy tomcat 中的 conf 和 webapps 到你的apps/artisanAPP目录下
  4. apps/artisanAPP目录下新建logs目录 (一定要建,不然报错)
  5. 编写启动脚本 tomcat.sh ,如下

    !/bin/bash

    export JAVA_OPTS=”-Xms1024m -Xmx1024m”
    export JAVA_HOME=/root/artisan/jdk
    export CATALINA_HOME=/root/artisan/apache-tomcat
    export CATALINA_BASE=pwd

    start stop restart status

    case $1 in

    1. start)
    2. $CATALINA_HOME/bin/catalina.sh start
    3. echo "start success"
    4. ;;
    5. stop)
    6. $CATALINA_HOME/bin/catalina.sh stop
    7. echo stop success!!
    8. ;;
    9. restart)
    10. $CATALINA_HOME/bin/catalina.sh stop
    11. echo stop success!!
    12. sleep 3
    13. $CATALINA_HOME/bin/catalina.sh start
    14. echo start success!!
    15. ;;
    16. version)
    17. $CATALINA_HOME/bin/catalina.sh version
    18. ;;
    19. configtest)
    20. $CATALINA_HOME/bin/catalina.sh configtest
    21. ;;
    22. esac

    exit 0

以上是一个比较简单的启动tomcat的脚本,本质上也是调用catalina.sh 。

在这里插入图片描述

可以调用 tomcat.sh/configtest 来验证配置是否正确。

发表评论

表情:
评论列表 (有 0 条评论,11人围观)

还没有评论,来说两句吧...

相关阅读