文档章节

快速搭建LNMT平台和环境部署 Tomcat详解

 网络小虾米
发布于 10/19 23:53
字数 2604
阅读 25
收藏 0

Tomcat部署的基本概念

1. CATALINA_HOME与CATALINA_BASE分别指什么?

    CATALINA_HOME指的是Tomcat的安装目录

    bin:\\Tomcat一些脚本存放目录,比如启动脚本startup.bat/startup.sh等

    conf:\\Tomcat配置文件所在目录,最主要的就是server.xml与web.xml

    lib:\\主要存放Tomcat依赖包

    logs:\\Tomcat日志所在目录。以为catalina、host-manager等开头日志

    temp:\\存放Tomcat运行时的临时文件,通常放一些缓存文件,一般不要删除

    webapps:\\应用部署所在目录,就是在这里存放我们需要部署的文件目录、WAR包

    work:\\存放由JSP文件生成的Servlet

    RUNNING.txt:\\运行说明,必需的一些环境信息

    NOTICE:\\通知信息,软件的版权信息等

    RELEASE-NOTES:\\发布说明,比如版本升级的功能说明

    LICENSE:\\版权许可证,软件版权信息

    CATALINA_BASE指的是Tomcat的实例所在目录,Tomcat的实例由除了bin、lib外的目录组成

    两者的对比图如下一目了然,配置多实例,也只需要Copy相应的目录组成新的Tomcat实例即可。

    

 

 

2. conf目录下的配置文件具体用来做什么?

    Tomcat的配置需要分为:JVM配置、服务器配置、Web应用配置、Tomcat管理配置四个方面(其中JVM的配置一般在catalina.sh/catalina.bat中配置,这里不做介绍),这里只做简单的介绍,不会具体介绍Tomcat配置

    1)服务器配置

      服务器配置主要集中于$CATALINA_HOME/conf下的catalina.policy、catalina.properties、context.xml、server.xml、tomcat-users.xml、web.xml文件。

    2)Web应用配置

      web.xml是Web应用的部署描述文件,它支持的元素及属性来自于Servlet规范定义。在Tomcat中,Web应用的部署描述信息包括$CATALINA_BASE/conf/web.xml中的默认配置。Tomcat的默认配置比Web应用定制配置负责很多,如果是完全基于JSP的Web应用不需要添加任何定制配置。主要包括ServletContext的初始化参数、会话配置、Filter定义与映射等

    3)Tomcat管理配置

      主要是针对host-manager 与manager两个功能进行配置,在Tomcat中我们可以针对虚拟主机进行配置,也可以对我们的Web应用进行管理。

3. webapps下的目录哪些可以删除?

    Wwbapps目录下包括docs、ROOT、manager、host-manager、examples。webapps不一定是Tomcat部署web应用唯一的地方,可以在任何一处,但只需要做好映射即可(context.xml描述文件或者Host的appBase属性可以做到)

    事实上,全部都可以删除。为什么呢?这是因为

    1)ROOT:\\Tomcat本身默认的访问http://{ip}:{port},也就是访问http://127.0.0.1:8080标志性的Tomcat首页所在之处

    2)manager:\\访问http://{ip}:{port}/manager/html,可以管理部署应用(当然需要配置tomcat-users.xml文件)。一般部署Web应用往往是不需要的

    3)host-manager:\\访问http://{ip}:{port}/host-manager/html,可以管理配置Host虚拟主机。一般简单web应用部署也不会用到

    4)examples:\\Servlet、JSP、WebSocket示例,展示在Tomcat下如何使用等,访问http://{ip}:{port}/examples/index.html即可进入。也是不需要的,可以删除

    5)docs:\\Tomcat HTML文档中心,不影响应用部署,可以删除

4. Tomcat为了避免端口冲突需要更改哪些端口?

  1)Server Port:该端口用于监听关闭tomcat的shutdown命令,默认为8005
      <Server port="8006" shutdown="SHUTDOWN">
  2)Connector Port:该端口用于监听HTTP的请求,默认为8080

          <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

  3)AJP Port:该端口用于监听AJP( Apache JServ Protocol )协议上的请求,通常用于整合Apache Server等其他HTTP服务器,默认为8009。实际上可以不用管,因为AJP基本用不到,特别是Ngxin与Tomcat集成时(Nginx没有响应的支持AJP模块,只有第三方模块支持AJP协议)

           <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

  4)Redirect Port:重定向端口,出现在Connector配置中,如果该Connector仅支持非SSL的普通http请求,那么该端口会把 https 的请求转发到这个Redirect Port指定的端口,默认为8443;

简单的应用部署为避免端口冲突,实际上只需要更改SHUTDOWN监听端口与Connector链接器监听端口即可

5. Tomcat部署应用的方式有哪几种?

  1) Context描述文件部署

  Tomcat支持通过一个独立的Context描述文件配置并启动Web应用,该文件的存储路径由Hot中xmlBase属性指定,若不指定,则默认CATALINA_BASE/conf/<Engine名称>/<Host名称>,对于Tomcat默认的就是CATALINA_BASE/conf/Catalina/localhost;其实也就是conf/context.xml文件:Tomcat启动时即会自动部署该Web应用。

  2) Web部署

  即以目录的形式发布部署Web应用,复制到Host指定appBase目录下即可完成部署。

  3) WAR包部署

  xxx.war包解压成目录形式。

接下来我们根据上文Tomcat的介绍做Linux+Nginx+MariaDB+Tomcat动静分离实战演练

    1.环境描述

    准备两台虚拟机,一台作为nginx服务器+mysql服务器,IP为:192.168.109.131;另外一台作为Tomcat服务器配置多实例,IP为:192.168.109.132。当客户端发来请求,首先由nginx处理,如果为静态内容直接由nginx响应,将结果直接给客户端;如果为动态内容,则由nginx反向代理至后端的Tomcat服务器。

    2.安装Nginx

    [root@centos7~]#yum -y install gcc pcre pcre-devel openssl openssl-devel make automake autoconf wget vim

    [root@centos7~]#wget http://nginx.org/download/nginx-1.17.4.tar.gz

    [root@centos7~]#useradd -s /sbin/nologin nginx

    [root@centos7~]#cd nginx-1.17.4

    [root@centos7~]#cd nginx-1.17.4

    [root@centos7 nginx-1.17.4]##./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module

    [root@centos7 nginx-1.17.4]#make && make install

    [root@centos7 nginx-1.17.4]#cat /usr/local/nginx/sbin/nginx

    [root@centos7 nginx-1.17.4]# ln -s /usr/local/nginx/sbin/nginx /sbin

    [root@centos7 nginx-1.17.4]# nginx

    [root@centos7 nginx-1.17.4]# nginx -s reload

Nginx 安装完毕,稍后我们再配置,接下来安装mariadb

    3.安装mariadb

    [root@centos7~]#yum -y install mariadb mariadb-server mariadb-devel

    [root@centos7~]#systemctl restart mariadb 

    [root@centos7~]#systemctl enable mariadb

Mysql安装完毕,我们切换到另一台最小化方式安装的虚拟机上安装Tomcat

    4.安装Tomcat

    [root@centos7~]#yum -y install wget bash-completion vim 

    [root@centos7~]#wget wget --no-check-certificate https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.27/bin/apache-tomcat-9.0.27.tar.gz

    [root@centos7~]#yum -y install java    //安装JDK

    [root@centos7~]#java -version    //查看JDK版本

    [root@centos7~]#yum install -y tomcat-webapps tomcat-admin-webapps    //安装tomcat管理包

    [root@centos7~]#mkdir /usr/local/tomcat  /usr/local/tomcat/tomcat_1  /usr/local/tomcat/tomcat_2

    [root@centos7~]#tar -xvf apache-tomcat-9.0.27.tar.gz tomcat_bin -C /usr/local/tomcat/tomcat

    [root@slave tomcat]#mv apache-tomcat-9.0.27 tomcat_bin

    [root@slave tomcat_bin]# cp conf/ webapps/ temp/ logs/ work/ -r  /usr/local/tomcat/tomcat_1

    [root@slave tomcat_bin]# cp conf/ webapps/ temp/ logs/ work/ -r  /usr/local/tomcat/tomcat_2

    [root@slave tomcat_bin]# vim /usr/local/tomcat/tomcat_1/conf/server.xml     //主要修改tomcat_1以下两个参数

    <Server port="8010" shutdown="SHUTDOWN">    //修改shutdown命令监听端口
    <Connector port="8081" protocol="HTTP/1.1"        //修改Connector链接器监听端口
               connectionTimeout="20000"
               redirectPort="8443" />

    [root@slave tomcat_bin]# vim /usr/local/tomcat/tomcat_1/conf/server.xml    //主要修改tomcat_2以下两个参数

    <Server port="8020" shutdown="SHUTDOWN">    //修改shutdown命令监听端口
    <Connector port="8082" protocol="HTTP/1.1"        //修改Connector链接器监听端口
               connectionTimeout="20000"
               redirectPort="8443" />

[root@centos7~]#bash /usr/local/tomcat/tomcat_bin/bin/startup.sh   // 启动实例0(默认配置)

Using CATALINA_BASE:   /usr/local/tomcat/tomcat_bin
Using CATALINA_HOME:   /usr/local/tomcat/tomcat_bin
Using CATALINA_TMPDIR: /usr/local/tomcat/tomcat_bin/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/tomcat_bin/bin/bootstrap.jar:/usr/local/tomcat/tomcat_bin/bin/tomcat-juli.jar
[root@centos7~]#bash /usr/local/tomcat/tomcat_1/bin/startup.sh    //启动实例1

Using CATALINA_BASE:   /usr/local/tomcat/tomcat_1
Using CATALINA_HOME:   /usr/local/tomcat/tomcat_1
Using CATALINA_TMPDIR: /usr/local/tomcat/tomcat_1/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/tomcat_1/bin/bootstrap.jar:/usr/local/tomcat/tomcat_1/bin/tomcat-juli.jar
Tomcat started.

[root@centos7~]#bash /usr/local/tomcat/tomcat_2/bin/startup.sh    //启动实例2

Using CATALINA_BASE:   /usr/local/tomcat/tomcat_2
Using CATALINA_HOME:   /usr/local/tomcat/tomcat_2
Using CATALINA_TMPDIR: /usr/local/tomcat/tomcat_2/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/tomcat_2/bin/bootstrap.jar:/usr/local/tomcat/tomcat_2/bin/tomcat-juli.jar
Tomcat started.

[root@centos7~]# netstat -nptl    //    检查端口是否已经起来
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1482/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2045/master         
tcp6       0      0 :::8009                 :::*                    LISTEN      2956/java           
tcp6       0      0 127.0.0.1:8010          :::*                    LISTEN      3037/java           
tcp6       0      0 :::8080                 :::*                    LISTEN      2956/java           
tcp6       0      0 :::8081                 :::*                    LISTEN      3037/java           
tcp6       0      0 :::8082                 :::*                    LISTEN      3097/java           
tcp6       0      0 127.0.0.1:8020          :::*                    LISTEN      3097/java           
tcp6       0      0 :::22                   :::*                    LISTEN      1482/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      2045/master         
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      2956/java   

为了便于区别验证实例是否都正常工作,修改主页文件来验证

[root@centos7~]#/usr/local/tomcat/tomcat_bin/webapps/ROOT/index.jsp

<!DOCTYPE HTML><html lang="en"><head>
<meta charset="UTF-8">
<title>Apache Tomcat Examples</title>
</head>
<body>
<h1>This is Tomcat 0</H1>
</body></html>

[root@centos7~]#/usr/local/tomcat/tomcat_1/webapps/ROOT/index.jsp

<!DOCTYPE HTML><html lang="en"><head>
<meta charset="UTF-8">
<title>Apache Tomcat Examples</title>
</head>
<body>
<h1>This is Tomcat 1</H1>
</body></html>

[root@centos7~]#/usr/local/tomcat/tomcat_2/webapps/ROOT/index.jsp

<!DOCTYPE HTML><html lang="en"><head>
<meta charset="UTF-8">
<title>Apache Tomcat Examples</title>
</head>
<body>
<h1>This is Tomcat 2</H1>
</body></html>

最后,验证以下Tomcat运行是否正常。

*****************************************tomcat多实例至此安装完成***************************

5.配置nginx反向代理动态页面转发到tomcat,静态页面直接处理

[root@centos7~]#vim /usr/local/nginx/conf/nginx.conf    //只保留配置部分,监听域名www.cc.com

user  nginx nginx;
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream web {                           //添加upstream模块
    server 192.168.109.132:8080 ;    //tomcat实例0
    server 192.168.109.132:8081 ;    //tomcat实例1
    server 192.168.109.132:8082 ;    //tomcat实例2
    }
    server {
        listen       80;
        server_name  www.cc.com;
        location ~* \.(do|jsp)$ {    //定义访问类型转发到后端web
        proxy_pass http://web;
        }
        location ~* tomcat\.(png|css)$ {    //定义访问类型转发到后端web
        proxy_pass http://web;
        }

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
[root@centos7~]#nginx -t     //测试一下nginx配置文件

[root@centos7~]#nginx -s reload     //平滑启动nginx

最后本地绑定hosts文件测试一下配置结果:

访问静态主页:

访问动态页面:

总结:

实际生产环境中可能会遇到nginx多实例做负载均衡(ELB)和tomcat多实例为主的情况,根据服务器容量也有单机多实例和集群模式,所以根据不同的生产环境会有不同的配置方式,满足业务需求才是运维的第一生产力

tomcat的启停可以编辑一下Shell/Python脚本来帮助管理实例,日志的管理和参数调优也是需要继续学习的地方

© 著作权归作者所有

粉丝 0
博文 21
码字总数 21022
作品 0
沙坪坝
运维
私信 提问
LNMT一键安装包 beta 0.2 版本正式发布

LNMT一键安装包是一个用Linux Shell编写的可以为CentOS/RedHat VPS(VDS)或独立主机安装LNMT(Nginx、MySQL、JRE、Tomcat)生产环境的Shell程序。同时提供一些实用的辅助脚本如:可以帮助完成N...

蓝翔妓工
2015/02/27
3.2K
8
一键PHP/JAVA安装工具:OneinStack 1.2 发布

导读 OneinStack是使用 shell编写,为了快速在生产环境上部署lnmp/lamp/lnmpa/lnmt(Linux、Nginx/Tengine、 MySQL/MariaDB/Percona、PHP、Apache、Tomcat),适用于CentOS 5~7(包括redhat)...

linuxprobe16
2016/11/22
15
0
OneinStack 1.0 发布,一键 PHP/JAVA 安装工具

这个脚本是使用shell编写,为了快速在生产环境上部署lnmp/lamp/lnmpa/lnmt(Linux、Nginx/Tengine、 MySQL/MariaDB/Percona、PHP、Apache、Tomcat),适用于CentOS 5~7(包括redhat)、Debia...

lj2007331
2015/09/01
5.2K
21
OneinStack 1.4 发布,一键 PHP/JAVA 安装工具

OneinStack 1.4 发布了,这个脚本是使用 shell编写,为了快速在生产环境上部署lnmp/lamp/lnmpa/lnmt(Linux、Nginx/Tengine/OpenResty、 MySQL/MariaDB/Percona、PHP、Apache、Tomcat),适用...

lj2007331
2016/07/12
3.3K
21
一键安装包--LNMT

LNMT一键安装包是什么? LNMT一键安装包是一个用 Linux Shell 编写的可以为 CentOS/RedHat VPS(VDS) 或独立主机安装 LNMT(Nginx、MySQL、JRE、Tomcat) 生产环境的 Shell 程序。同时提供一些实...

蓝翔妓工
2015/01/30
3K
5

没有更多内容

加载失败,请刷新页面

加载更多

Kafka实战(五) - 核心API及适用场景全面解析

1 四个核心API ● Producer API 允许一个应用程序发布一串流式的数据到一个或者多个Kafka topic。 ● Consumer API 允许一个应用程序订阅一个或多个topic ,并且对发布给他们的流式数据进行处...

JavaEdge
今天
11
0
实现线程的第三种方式——Callable & Future

Callable Runnable 封装一个异步运行的任务, 可以把它想象成为一个没有参数和返回值的异步方 法。Callable 与 Runnable 类似, 但是有返回值。Callable 接口是一个参数化的类型, 只有一 个...

ytuan996
今天
12
0
OSChina 周六乱弹 —— 不要摁F了!

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 : 朴树写的词曲都给人一种莫名的失落感,不过这首歌他自己却没有唱,换成赵传这种高音阶嘶喊的确很好,低沉但却有力,老男人的呐喊...

小小编辑
今天
22
0
Android Binder机制 - interface_cast和asBinder讲解

研究Android底层代码时,尤其是Binder跨进程通信时,经常会发现interface_cast和asBinder,很容易被这两个函数绕晕,下面来讲解一下: interface_cast 下面根据下述ICameraClient例子进行分析...

天王盖地虎626
昨天
13
0
计算机实现原理专题--存储器的实现(二)

计算机实现原理专题--存储器的实现(一)中描述了一种可以记住输入端变化的装置。现需要对其功能进行扩充,我们将上面的开关定义为置位,下面的开关定义为复位,然后需要增加一个保持位,当保...

FAT_mt
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部