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

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

20200603133552919.png

Pre


Tomcat Version : 8.5+

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


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

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



20200602232542724.png


Tomcat 各组件及关系


20200602232809275.png


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中配置


20200602233338426.png

server

root元素 , server 的顶级配置

主要属性:

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


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

telnet 127.0.0.1 8005
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 访问时需要开启。


举个例子

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


Engine


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

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


Host


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

举例配置多个Host


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

Context


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


举例配置多个Context

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


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


Tomcat与App应用分开部署

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


复制WAR包至Tomcat webapp 目录。

执行starut.bat 脚本启动。

启动过程中war 包会被自动解压装载。


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


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


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


image.png


好处很明显:


不会和 tomcat耦合在一起,升级tomcat版本很方便 ,搞个软连接爱指哪儿指哪儿

配置文件隔离 : conf目录每个app都有一份,那岂不是什么端口号啊 想改就改~ ,改了这个AP的,也不影响另外一个AP的。因为conf是每个应用都有自己的嘛

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


操作步骤:


下载tomcat8.5+, 解压,比如这里解压到/root/artisan ,当然了你可以搞个软连接指定8.5+的版本。 后续升级维护这个软连接的指向即可

新建目录用于存放你的应用,比如叫apps 然后下面存放你的其中一个应用,比如叫 artisanAPP,也可以放多个 artisanAPP2 . 这些应用都是可以单独启动的。

copy tomcat 中的 conf 和 webapps 到你的apps/artisanAPP目录下

apps/artisanAPP目录下新建logs目录 (一定要建,不然报错)

编写启动脚本 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
  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 3
        $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


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

20200603094718845.png


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



相关文章
|
3月前
|
监控 Java 应用服务中间件
部署tomcat部署实战案例
本文是关于Tomcat部署实战案例的教程,包括通过yum和二进制方式部署Tomcat的详细步骤,以及如何监控Tomcat服务。
212 84
部署tomcat部署实战案例
|
4月前
|
Java 应用服务中间件 Windows
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
|
3月前
|
应用服务中间件 Docker 容器
docker应用部署---Tomcat的部署配置
这篇文章介绍了如何使用Docker部署Tomcat服务器,包括搜索和拉取Tomcat镜像、创建容器并设置端口映射和目录映射,以及如何创建一个HTML页面并使用外部机器访问Tomcat服务器。
docker应用部署---Tomcat的部署配置
|
6月前
|
Ubuntu 前端开发 JavaScript
技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
|
2月前
|
Java 应用服务中间件 Linux
tomcat学习二:tomcat部署多个项目:不修改端口和修改端口 两种方式详解
这篇文章详细介绍了在Tomcat服务器上部署多个项目的方法,包括不修改端口和修改端口两种方式。
126 0
|
4月前
|
应用服务中间件 Docker 容器
在服务器中使用Docker安装Tomcat、同时实现目录挂载、并且部署War包到服务器
这篇文章介绍了在Docker中安装Tomcat的过程,包括搜索Tomcat镜像、拉取镜像、目录挂载的准备、创建并挂载容器,以及如何进入容器和进行测试。文中还说明了如何将WAR包部署到Tomcat服务器并访问部署的应用。
在服务器中使用Docker安装Tomcat、同时实现目录挂载、并且部署War包到服务器
|
3月前
|
前端开发 Java 应用服务中间件
react自学(6) 部署到tomcat中
react自学(6) 部署到tomcat中
|
4月前
|
jenkins 持续交付 开发工具
"引爆效率革命!Docker+Jenkins+GIT+Tomcat:解锁持续集成魔法,一键部署Java Web应用的梦幻之旅!"
【8月更文挑战第9天】随着软件开发复杂度的增加,自动化变得至关重要。本文通过实例展示如何结合Docker、Jenkins、Git与Tomcat建立高效的持续集成(CI)流程。Docker确保应用环境一致性;Jenkins自动化处理构建、测试和部署;Git管理源代码版本;Tomcat部署Web应用。在Jenkins中配置Git插件并设置项目,集成Docker构建Tomcat应用镜像并运行容器。此外,通过自动化测试、代码质量检查、环境隔离和日志监控确保CI流程顺畅,从而显著提高开发效率和软件质量。
78 3
|
5月前
|
Java 应用服务中间件 Shell
|
6月前
|
应用服务中间件
Tomcat正常部署,Tomcat使用前先add Configuration一下
Tomcat正常部署,Tomcat使用前先add Configuration一下