开发者

linux之Tomcat服务器部署和项目部署全过程

目录
  • Tomcat
    • Tomcat安装
    • 简单的Tomcat项目部署演示
    • Tomcat主配置文件解析
      • Server
      • Connector
      • Engine
      • Host
      • context
    • Tomcat部署项目
      • 部署jpress---war
      • 部署当当网--文件夹
    • Tomcat优化
      • 安全优化
      • 性能优化
  • 总结

    Tomcat

    Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。

    Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选

    Tomcat官网: http://tomcat.apache.org

    Tomcat安装

    linux之Tomcat服务器部署和项目部署全过程

    Tomcat是Java语言编写程序,首先在虚拟机中安装jdk

    注意:.rpm包如果依赖一些组件,需要我们手动解决安装依赖

    安装jdk的rpm包

    [root@localhost tmp]# cd /tmp
    [root@lwww.devze.comocalhost tmp]# rpm -ivh jdk-8u251-linux-x64.rpm 
    警告:jdk-8u251-linux-x64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID ec551f03: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:jdk1.8-2000:1.8.0_251-fcs        ################################# [100%]Unpacking JAR files...
        tools.jar...
        plugin.jar...
        javaws.jar...
        deploy.jar...
        rt.jar...
        jsse.jar...
        charsets.jar...
        localedata.jar...

    此时:JDK已经被安装在了 /usr/java/jdk1.80_xxx 目录下。

    配置环境变量

    [root@localhost java]# vi /etc/profile
    ​
    在profile中尾部追加一下3行配置
    export JAVA_HOME=/usr/java/default
    export PATH=$PATH:$JAVA_HOME/bin
    export CLASSPATH=.
    ​
    //刷新环境变量
    [root@localhost java]# source /etc/profile
    ​
    如果刷新环境变量时,有异常信息,大多是配置环境变量的关键字有错

    安装Tomcat

    #获取Tomcat压缩包
    ​
    #解压
    [root@localhost opt]# tar -xzvf apache-tomcat-8.5.78.tar.gz

    Tomcat为java语言编写,不需要编译安装,解压即用

    启停命令

    注意:Tomcat兼容linux和Windows系统,其中.BAT文件为Windows系统可用.sh文件为linux系统可用

    启动Tomcat

    [root@localhost bin]# /opt/apache-tomcat-8.5.78/bin/startup.sh

    访问Tomcat

    #查看Tomcat程序占用端口
    [root@localhost bin]# netstat -tunlp
    ​#浏览器输入访问地址
    http://主机ip:8080

    关闭Tomat

    #方法一,运行shutdown.sh脚本
    [root@localhost bin]# /opt/apache-tomcat-8.5.78/bin/shutdown.sh
    
    
    #方法二,通过8005端口关闭,此端口只能本机访问
    [root@localhost bin]# telnet 127.0.0.1 8005   #通过telnet连接8005端口
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
    SHUTDOWN                                  #输入SHUTDOWN
    ​

    简单的Tomcat项目部署演示

    将项目放入tomcat的webapps文件夹中

    linux之Tomcat服务器部署和项目部署全过程

    开启tomcat

    [root@localhost webapps]# /opt/apache-tomcat-8.5.78/bin/startup.sh 

    访问项目

    访问路径为  http://主机ip:8080/项目名/资源名

    linux之Tomcat服务器部署和项目部署全过程

    Tomcat主配置文件解析

    ​Tomcat配置文件被存放在conf中,其中最主要的配置文件为server.XML

    #配置文件示例
    <?xml version="1.0" encoding="UTF-8"?>
    ​
    <Server port="8005" shutdown="SHUTDOWN">
      <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
      <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
      <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
      <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
      <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
      <GlobalNamingResources>
        <Resource name="UserDatabase" auth="Container"
                  type="org.apache.catalina.UserDatabase"
                  description="User database that can be updated and saved"
                  factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
                  pathname="conf/tomcat-users.xml" />
      </GlobalNamingResources>
      <Service name="Catalina">
        <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />
        <Engine name="Catalina" defaultHost="localhost">
          <Realm className="org.apache.catalina.realm.LockOutRealm">
            <Realm className="org.apache.catalina.realm.UserDatabaseRjsealm"
                   resourceName="UserDatabase"/>
          </Realm>
          <Host name="localhost"  appBase="webapps"
                unpackWARs="true" autoDeploy="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>
        </Engine>
      </Service>
    </Server>

    Server

    ​是整个配置文件的根元素。表示整个Catalina容器。

    #参数信息
        className:实现了org.apache.catalina.Server接口的类名,默认实现了                  org.apache.catalina.core.StandardServer类;
        Port:Tomcat服务器监听用于关闭Tomcat服务器的命令(必须);
        Shutdown:发送到端口上用于关闭Tomcat服务器的命令;

    Connector

    ​连接器,负责接收客户的请求,以及向客户端回送响应的消息

    #参数解析
        allowTrace:是否允许HTTP的TRACE方法,默认为false;
        emptySessionPath:如果设置为true,用户的所有路径都将设置为/,默认为false;
        enableLookups:调用request、getRemoteHost()执行DNS查询,以返回远程主机的主机名,如果设置为false,则直接返回IP地址;
        maxPostSize:指定POST方式请求的最大量,没有指定默认为2097152;
        protocol:值必须为HTTP1.1,如果使用AJP处理器,该值必须为AJP/1.3;
        proxyName:如这个连接器正在一个代理配置中被使用,指定这个属性,在request.getServerName()时返回;
        redirectPort:如连接器不支持SSL请求,如收到SSL请求,Catalina容器将会自动重定向指定的端口号,让其进行处理;
        scheme:设置协议的名字,在request.getScheme()时返回,SSL连接器设为”https”,默认为”http”;
        secure:在SSL连接器可将其设置为true,默认为false;
        URIEncoding:用于解码URL的字符编码,没有指定默认值为ISO-8859-1;
        useBodyEncodingForURI:主要用于Tomcat4.1.x中,指示是否使用在contentType中指定的编码来取代URIEncoding,用于解码URI查询参数,默认为false;
        xpoweredBy:为true时,Tomcat使用规范建议的报头表明支持Servlet的规范版本,默认为false;
        acceptCount:当所有的可能处理的线程都正在使用时,在队列中排队请求的最大数目。当队列已满,任何接收到的请求都会被拒绝,默认值为10;
        bufferSize:设由连接器创建输入流缓冲区的大小,以字节为单位。默认情况下,缓存区大的大小为2048字节;
        compressableMimeType:MIME的列表,默认以逗号分隔。默认值是text/html,text/xml,text/plain;
        compression:指定是否对响应的数据进行压缩。off:表示禁止压缩、on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为off;
        connectionTimeout:设置连接的超时值,以毫秒为单位。默认值为60000=60秒;
        disableUploadTimeOut:允许Servlet容器,正在执行使用一个较长的连接超时值,以使Servlet有较长的时间来完成它的执行,默认值为false;
        maxHttpHeaderSize:HTTP请求和响应头的最大量,以字节为单位,默认值为4096字节;
        maxKeepAliveRequest:服务器关闭之前,客户端发送的流水线最大数目。默认值为100;
        maxSpareThreads:允许存在空闲线程的最大数目,默认值为50;
        minSpareThreads:设当连接器第一次启协创建线程的数目,确保至少有这么多的空闲线程可用。默认值为4;
        port:服务端套接字监听的TCP端口号,默认值为8080(必须);
        socketBuffer:设Socket输出缓冲区的大小(以字节为单位),-1表示禁止缓冲,默认值为9000字节;
        toNoDelay:为true时,可以提高性能。默认值为true;
        threadPriority:设JVM中请求处理线程优先级。默认值为NORMAL-PRIORITY;

    Engine

    ​为特定的Service处理所有的请示。每个Service只能包含一个Engine元素,它负责接收和处理此Service所有的连接器收到的请求,向连接发回响应,并最终显示在客户端。<Engine>至少有一个<Host>元素,必须至少有一个<Host>属性的名字与defaultHost指定的名字相匹配。

    #参数解析
      className:实现org.apache.catalina.Engine接口,默认实现类为org.apache.catalina.core.StandardEngine类;
      defaultHost:默认主机名,值必须与<Service>的name值相匹配;
      name:指定Engine的逻辑名字(必须);
      jvmRoute:在负载匀衡中使用的标识符,必须唯一;

    Host

    ​表示一个虚拟主机,为特定的虚拟主机处理所有请求

    • appBase:设定应用程序的基目录,绝对路径或相对于%CATALINA_HOME%的路径名;
    • autoDeploy:指示Tomcat运行时,如有新的WEB程序加开appBase指定的目录下,是否为自动布署,默认值为true;
    • className:实现了org.apache.catalina.Host接口的类,标准实现类为org.apache.catalina.core.StandardHost类;
    • deployOnStartup:Tomcat启动时,是否自动部署appBase属性指定目录下所有的WEB应用程序,默认值为true;
    • name:虚拟主机的网络名(必须);

    context

    ​一个WEB应用程序,处理当前WEB应用程序的所有请求,每一个<Context>必须使用唯一的上下文路径

    • className:实现了org.apache.catalina.Context接口的类,标准实现类org.apache.catalina.core.StandardContext类;
    • cookies:是否将Cookie应用于Session,默认值为true;
    • crossContext:是否允许跨域访问,为true时,在程序内调用ServletContext.getContext()方法将返回一个虚拟主机上其它web程序的请求调度器;默认值为false,调 径用getContext()返回为null;
    • docBase:绝对路径或相对于Host的appBase 属性的相对路径;
    • privileged:为true,允许Web应用程序使用容器的Servlet;
    • path:指定上下文路径。一个虚拟主机中,上下文路径必须唯一;
    • reloadable:为true,Tomcat运行时,如果WEB-INF/classes和WEB-INF/lib目录中有改变,Tomcat会自动重新加载该WEB应用程序。虽方便,但开销也大,默认值为false,我们在调用可以打开,发布后再关闭;
    • cacheMaxSize:静态资源缓存最大值,以KB为单位,默认值为10240KB;
    • cachingAllowed:是否允许静态资源缓存,默认为true;
    • caseSensitive:默认为true,资源文件名大小写敏感,如果为false大小写不敏感;
    • unpackWAR:默认为true;
    • workDir:为WEB应用程序内部的Servlet指定临时读写的目录路径名。如没有设置,则Tomcat会在%CATALINA_HOME%/work目录下提供一个合适的目录;
     <Server port="8005" shutdown="SHUTDOWN">
        <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
        <Listener className="org.apache.catalina.security.SecurityListener" />
        <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> 
        <Listener className="org.apache.catalina.core.JASPerListener" /> 
        <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> 
        <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> 
        <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> 
        <GlobalNamingResources> 
       <!-- 全局命名资源,来定义一些外部访问资源,其作用是为所有引擎应用程序所引用的外部资源的定义 --> 
         <Resource name="UserDatabase" auth="Container" 
                   type="org.apache.catalina.UserDatabase" 
                   description="User database that can be updated and saved" 
                   factory="org.apache.catalina.users.MemoryUserDatabaseFactory" 
                   pathname="conf/tomcat-users.xml" /> 
       </GlobalNamingResources> 
       <!-- 定义的一个名叫“UserDatabase”的认证资源,将conf/tomcat-users.xml加载至内存中,在需要认证的时候到内存中进行认证 --> 
          
          
       <Service name="Catalina"> 
       <!-- # 定义Service组件,同来关联Connector和Engine,一个Engine可以对应多个Connector,每个Service中只能一个Engine --> 
           
           
         <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 
         <!-- 修改HTTP/1.1的Connector监听端口为80.客户端通过浏览器访问的请求,只能通过HTTP传递给tomcat。还可以设置server与URIEncoding参数 --> 
         
           
           
         <Engine name="Catalina" de编程客栈faultHost="test.com"> 
           <!--修改当前Engine,默认主机是:www.test.com,此处写主机域名或ip  --> 
             
             
         <Realm className="org.apache.catalina.realm.LockOutRealm"> 
             <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 
                    resourceName="UserDatabase"/> 
     python    </Realm> 
         <!-- Realm组件,定义对当前容器内的应用程序访问的认证,通过外部资源UserDatabase进行认证 -->
             
             
             
             
           <Host name="test.com"  appBase="/web" unpackWARs="true" autoDeploy="true"> 
           <!--  定义一个主机,域名为:test.com,应用程序的目录是/web,设置自动部署,自动解压    --> 
               
             <Alias>www.test.com</Alias> 
             <!--    定义一个别名www.test.com,此处写主机域名或ip--> 
               
             <Context path="" docBase="www/" reloadable="true" /> 
             <!--    定义该应用程序,访问路径"",即访问www.test.com即可访问,网页目录为:相对于appBase下的www/,即/web/www,并且当该应用程序下web.xml或者类等有相关变化时,自动重载当前配置,即不用重启tomcat使部署的新应用程序生效  --> android
               
             <Context path="/bbs" docBase="/web/bbs" reloadable="true" /> 
             <!--  定义另外一个独立的应用程序(虚拟主机),访问路径为:www.test.com/bbs,该应用程序网页目录为/web/bbs   --> 
               
             <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/web/www/logs" 
                    prefix="www_access." suffix=".log" 
                    pattern="%h %l %u %t &quot;%r&quot; %s %b" /> 
             <!--   定义一个Valve组件,用来记录tomcat的访问日志,日志存放目录为:/web/www/logs如果定义为相对路径则是相当于$CATALINA_HOME,并非相对于appBase,这个要注意。定义日志文件前缀为www_access.并以.log结尾,pattern定义日志内容格式,具体字段表示可以查看tomcat官方文档   --> 
               
           </Host>
             
             
             
             
           <Host name="manager.test.com" appBase="webapps" unpackWARs="true" autoDeploy="true"> 
           <!--   定义一个主机名为man.test.com,应用程序目录是$CATALINA_HOME/webapps,自动解压,自动部署   --> 
             <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="172.16.100.*" /> 
             <!--   定义远程地址访问策略,仅允许172.16.100.*网段访问该主机,其他的将被拒绝访问  --> 
             <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/web/bbs/logs" 
                    prefix="bbs_access." suffix=".log" 
                    pattern="%h %l %u %t &quot;%r&quot; %s %b" /> 
             <!--   定义该主机的访问日志      --> 
           </Host> 
         </Engine> 
       </Service> 
     </Server
    

    log相关的日志

    • catalina.2024-08-14.log     运行时的错误信息日志
    • host-manager.2024-08-14.log     记录网上对Tomcat做的配置
    • localhost_access_log.2024-08-14.txt     访问日志,直到谁访问了我
    • catalina.out        运行的报错信息日志总和
    • localhost.2024-08-14.log        Tomcat启动请求信息
    • manager.2024-08-14.log          和host-manager.2024-08-14.log一样,一般都是空的,不是空的时那就是被入侵了

    Tomcat部署项目

    ​tomcat除了可以部署文件夹之外,还可以部署编程人员打包好的.war和.jar文件

    部署jpress---war

    配置数据库环境

    #创建ipress分库,并设置编码为utf8
    mysql> create database jpress default character set utf8; 
    #创建用户
    mysql> grant all on jpress.* to jpress@'%' identified by '111111';

    部署项目

    将war包放入tomcat的项目目录

    linux之Tomcat服务器部署和项目部署全过程

    启动tomcat

    [root@localhost webapps]# /opt/apache-tomcat-8.5.78/bin/startup.sh

    linux之Tomcat服务器部署和项目部署全过程

    访问项目

    linux之Tomcat服务器部署和项目部署全过程

    配置数据库信息

    linux之Tomcat服务器部署和项目部署全过程

    配置网站信息

    访问网站,登录

    http://主机ip:8080/jpress-web-newest/admin/login

    linux之Tomcat服务器部署和项目部署全过程

    部署当当网--文件夹

    配置数据库

    # 创建分库
    mysql> create database dang;
    # 创建用户
    mysql> grant all on dang.* to dang@'%' identified by '111111';
    # 导入数据
    mysql> use dang
    mysql> source  /opt/dang.sql

    修改项目中数据库连接配置

    位置:\WEB-INF\classes

    linux之Tomcat服务器部署和项目部署全过程

    linux之Tomcat服务器部署和项目部署全过程

    部署项目

    linux之Tomcat服务器部署和项目部署全过程

    启动项目

    [root@localhost myweb]# /opt/apache-tomcat-8.5.78/bin/startup.sh 

    访问

    http://主机ip:8080/dang/Book/BookFace.do

    linux之Tomcat服务器部署和项目部署全过程

    Tomcat优化

    常用优化手段固定,需要多看多记忆

    安全优化

    telnet管理端口保护(强制)

    类别配置内容及说明标准配置备注
    telnet管理端口保护1.修改默认的8005管理端口为不易猜测的端口(大于1024);2.修改SHUTDOWN指令为其他字符串;<Server port="**8527**" shutdown="**dangerous**">1.以上配置项的配置内容只是建议配置,可以按照服务实际情况进行合理配置,但要求端口配置在8000~8999之间

    降权启动(强制)

    类别配置内容及说明标准配置备注
    降权启动1.tomcat启动用户权限必须为非root权限,尽量降低tomcat启动用户的目录访问权限;2.如需直接对外使用80端口,可通过普通账号启动后,配置iptables规则进行转发;避免一旦tomcat 服务被入侵,黑客直接获取高级用户权限危害整个server的安全;

    文件列表访问控制(强制)

    类别配置内容及说明标准配置备注
    文件列表访问控制1.conf/web.xml文件中default部分listings的配置必须为false;<init-param><param-name>listings</param-name><param-value>false</param-value></init-param>false为不列出目录文件,true为允许列出,默认为false;

    起停脚本权限回收(推荐)

    类别配置内容及说明标准配置或操作备注
    起停脚本权限回收去除其他用户对Tomcat的bin目录下shutdown.sh、startup.sh、catalina.sh的可执行权限;chmod -R 744 tomcat/bin/*防止其他用户有起停线上Tomcat的权限;

    访问日志格式规范(推荐)

    conf/server.xml

    类别配置内容及说明标准配置或操作备注
    访问日志格式规范开启Tomcat默认访问日志中的Referer和User-Agent记录<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t %r %s %b %{Referer}i %{User-Agent}i %D" resolveHosts="false"/>开启Referer和User-Agent是为了一旦出现安全问题能够更好的根据日志进行问题排查;

    性能优化

    上策:优化代码

    • 该项需要开发经验足够丰富,对开发人员要求较高

    中策:jvm**优化机制** 垃圾回收机制 把不需要的内存回收

    • 优化jvm--优化垃圾回收策略
    • 优化catalina.sh配置文件。在catalina.sh配置文件中添加以下代码
    # tomcat分配1G内存模板
    JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m"     
    ​
    # 重启服务
    su -c '/home/tomcat/tomcat8_1/bin/shutdown.sh' tomcat
    su -c '/home/tomcat/tomcat8_1/bin/startup.sh' tomcat

    下策:加足够大的内存

    • 该项的资金投入较大

    下下策:每天0点定时重启tomcat

    • 使用较为广泛

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新运维

    运维排行榜