【运维知识进阶篇】Tomcat快速入门(Java环境介绍+Tomcat快速安装+Tomcat配置文件+Tomcat配置虚拟主机+Tomcat管理界面+Tomcat部署zrlog博客项目)

这篇文章给大家讲解Tomcat快速入门,Tomcat和Nginx类似,都是WEB服务器软件,只不过Tomcat是基于JAVA开发的WEB服务,主要解析JAVA代码。

Nginx仅支持静态资源解析,而Tomcat支持Java开发的web应用,还支持解析静态资源(效率不高)Nginx适合做前端负载均衡,而Tomcat适合做后端应用服务处理。通常清空下企业种会使用Nginx+Tomcat结合,Nginx处理静态资源,Tomcat处理动态资源。

目录

Java环境简单介绍

Tomcat快速安装

一、安装jdk

二、安装Tomcat(下载、解压、启动)

三、配置systemctl方式启动

Tomcat配置文件

Tomcat配置虚拟主机(与Nginx同理)

Tomcat HTTP请求过程

Tomcat管理页面

Tomcat部署zrlog项目

一、定义虚拟主机,配置tomcat文件

二、上传war包至指定目录,配置代码文件

三、创建数据库

四、访问zrlog站点进行安装

五、测试发布博客(文字+图片)


Java环境简单介绍

JVM介绍:Java业务都是运行在Java虚拟机上,Java虚拟机简称为JVM,虚拟机是通过软件模拟出具有完整硬件系统的功能

为什么Java需要JVM虚拟机?

早期C语言,不支持跨平台,如果C语言想要在Windows Linux Mac上运行,需要进行分别编译,那么在Linux上有很多优秀的软件,如果需要在Windows上使用需要重新编译,移植性差。

而Java则不同,Java是可以跨平台,只需要将源码进行一次编译,能够在不同的操作系统运行。

Java是如何做到的?

它只需要在Windows Linux系统上运行一个JVM,这样我们就能将Java编译好的war包在Windows和Linux平台运行起来,无需我们重复编译,而JVM是由JRE提供的

Java环境种JRE和JDK的区别?

JRE是Java的运行环境,包含JVM

JDK是Java的开发环境,包含Java的运行环境JRE

如果说单纯的运行环境Java代码,只需要JRE足够,但是如果需要提供开发环境以及运行环境则需要JDK

Tomcat快速安装

一、安装jdk

yum -y install java
或者上传rpm包
rpm -ivh jdk-8u181-linux-x64.rpm

二、安装Tomcat(下载、解压、启动)

Tomcat官网:Apache Tomcat® - Welcome!

#可以在官网直接下载也可以在windows下载后导入
[root@Web01 ~]# rz -E
rz waiting to receive.
[root@Web01 ~]# mkdir /soft
[root@Web01 ~]# tar xf apache-tomcat-9.0.73.tar.gz -C /soft/
#做软连接一方面是方便调用,一方面是如果升级,直接重新挂下软连接即可
[root@Web01 ~]# ln -s /soft/apache-tomcat-9.0.73/ /soft/tomcat   
[root@Web01 ~]# /soft/tomcat/bin/startup.sh     #启动
#8080对外提供服务的端口,8005关闭Tomcat端口
[root@Web01 ~]# netstat -tnulp|grep java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      36724/java          
tcp6       0      0 :::8080                 :::*                    LISTEN      36724/java  
[root@Web01 ~]# /soft/tomcat/bin/shutdown.sh    #停止

三、配置systemctl方式启动

[root@Web01 ~]# systemctl cat nginx            #模仿着写
# /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/sh -c "/bin/kill -s HUP $(/bin/cat /var/run/nginx.pid)"
ExecStop=/bin/sh -c "/bin/kill -s TERM $(/bin/cat /var/run/nginx.pid)"

[Install]
WantedBy=multi-user.target


cat >/usr/lib/systemd/system/tomcat.service<<'EOF'
[Unit]
Description=Apache Tomcat Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/soft/tomcat/bin/startup.sh
ExecStop=/soft/tomcat/bin/shutdown.sh
ExecRetart=/soft/tomcat/bin/shutdown.sh  && sleep2  && /soft/tomcat/bin/startup.sh

[Install]
WantedBy=multi-user.target
EOF

[root@Web01 ~]# systemctl daemon-reload    #加进配置文件后重载
[root@Web01 ~]# systemctl start tomcat
[root@Web01 ~]# netstat -tnulp|grep java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      38210/java          
tcp6       0      0 :::8080                 :::*                    LISTEN      38210/java          
[root@Web01 ~]# systemctl enable tomcat
Created symlink from /etc/systemd/system/multi-user.target.wants/tomcat.service to /usr/lib/systemd/system/tomcat.service.

Tomcat配置文件

tomcat软件目录结构
bin		        ---主要包含启动和关闭tomcat的脚本(启停java脚本依赖jar包文件)
conf		    ---tomcat配置文件的目录(站点配置:server.xml)
lib		        ---tomcat运行时需要加载的jar包
logs		    ---tomcat日志存放位置
temp		    ---tomcat临时存放文件路径
webapps		    ---tomcat默认站点目录
work		    ---tomcat运行时产生的缓存文件
[root@Web01 ~]# vim /soft/tomcat/conf/server.xml    #配置文件
[root@Web01 ~]# sed -i '/<!--/,/-->/d' /soft/tomcat/conf/server.xml     #删除注释行

Tomcat配置虚拟主机(与Nginx同理)

[root@Web01 ~]# cat /soft/tomcat/conf/server.xml
......    #添加下面内容到默认host下面
      <Host name="test.koten.org"  appBase="/code/tomcat/test"
            unpackWARs="true" autoDeploy="true">


        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="test" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>
......
[root@Web01 ~]# systemctl restart tomcat
[root@Web01 ~]# mkdir -p /code/tomcat/test/ROOT
[root@Web01 ~]# echo 'test:koten' > /code/tomcat/test/ROOT/index.html

本地解析hosts,浏览器访问:test.koten.org:8080

907eb18ba00f449e831ce26dcea5f0da.png

Tomcat HTTP请求过程

用户发出一个请求,如http://test.koten.org:8080/index.jsp

Connector发现是http/1.1协议,而且还是8080端口,于是就把请求接收后交给符合条件的Engine

Engine通过请求中的主机名test.koten.org查找满足条件的虚拟主机(Host)

找到后就去此虚拟主机指定的appBase(代码存放的目录)最后将解析产生的结果返回给用户。

Tomcat中的Context与Nginx中的location定义的路径效果类似,也与alias类似

location /files/ {
    alias /var/www/myfiles/;
}
[root@Web01 ~]# cat /soft/tomcat/conf/server.xml
......
      </Host>
      <Host name="test.koten.org"  appBase="/code/tomcat/test" #appBase与docBase前面部分需要保持一致
            unpackWARs="true" autoDeploy="true">
<!--访问test.koten.org:8080/tt这个url,会获取/code/tomcat/test/tt中页面的资源-->
	<Context docBase="/code/tomcat/test/tt" path="/tt" reloadable="true" />

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="test" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>
......
[root@Web01 ~]# systemctl restart tomcat
[root@Web01 ~]# mkdir /code/tomcat/test/tt
[root@Web01 ~]# echo 'test:tt' > /code/tomcat/test/tt/index.html    #注意这里不需要ROOT目录

#经测试,先创建tt目录重启后会显示8005端口,不先创建tt目录,虽然也可以看,但是不显示8005端口,不知道这两者是否有关联

b7577808a567415eaa757b1ee2a19afc.png

Tomcat管理页面

Tomcat自带的管理页面有管理功能和监控功能

1、所有的管理页面,都将权限赋予了角色,而角色的名称是固定的:manager-gui,admin-gui

2、需要添加一个用户,将用户捆绑至对应的角色,这样用户就可以访问到对应的管理页面

[root@Web01 ~]# vim /soft/tomcat/conf/tomcat-users.xml
......
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="123456" roles="manager-gui,admin-gui"/>
</tomcat-users>

3、由于项目默认允许127.0.0.1访问,所以配置好了角色和用户也无法正常访问

将127改成10

[root@Web01 ~]# cat /soft/tomcat/webapps/host-manager/META-INF/context.xml |grep 10
         allow="10\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
[root@Web01 ~]# cat /soft/tomcat/webapps/manager/META-INF/context.xml |grep 10
         allow="10\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

4、重启tomcat并访问 10.0.0.7:8080

bbd1081ecad74835a537e454d912b6b0.png

f9a868bf930a46bc9d49a1b6e3db73b5.png

可以查看服务器的状态 

866173f81da64f02b5ded0fc9a0cfa36.png

在上面也可以进行一些部署 

e1937cceb1de47e4bf4c6ead6d143b0e.png

 可以开启、停止、添加部署的虚拟主机

1e5ede147e584e058713f5a649cafee6.png

Tomcat部署zrlog项目

一、定义虚拟主机,配置tomcat文件

[root@Web01 ~]# cat /soft/tomcat/conf/server.xml
...... 
     <Host name="zrlog.koten.org"  appBase="/code/tomcat/zrlog"
            unpackWARs="true" autoDeploy="true">

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="zrlog" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

     </Host>
......
[root@Web01 ROOT]# systemctl restart tomcat
[root@Web01 ROOT]# netstat -tnulp|grep java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      60913/java          
tcp6       0      0 :::8080                 :::*                    LISTEN      60913/java 

自定义日志格式:

%a    远程的IP地址
%A    本地的IP地址
%b    发送的字节数,不包括HTTP头,如果没有发送字节则显示"-"
%B    发送的字节数,不包括HTTP头
%h    远程主机名
%H    请求协议
%l    小写的L,远程逻辑从identd的用户名,总是返回"-"
%m    请求方法
%p    本地端口
%q    查询字符数,在前面加上一个"?",如果它存在则使用%q参数记录该字符串,否则用一个空字符串标识查询字符串不存在
%r    请求行,协议头第一行,包括请求方法,uri和http协议版本
%s    响应的HTTP状态码
%S    用户会话ID
%t    日期和时间,在通用日志格式
%u    远程用户身份验证
%U    请求的URL路径
%v    本地服务器名
%D    处理请求的时间(以毫秒为单位)
%T    处理请求的时间(以秒为单位)
%I    大写的i,当前请求的线程名称

二、上传war包至指定目录,配置代码文件

zrlog官网:ZrLog 博客程序

d3ff68d42153441189b77cd86a942c1e.png

[root@Web01 ~]# mkdir -p /code/tomcat/zrlog/ROOT
[root@Web01 ~]# cd /code/tomcat/zrlog/ROOT
[root@Web01 ROOT]# wget https://dl.zrlog.com/release/zrlog-2.2.1-efbe9f9-release.war?attname=ROOT.war&ref=index
[root@Web01 ROOT]# jar -xvf zrlog-2.2.1-efbe9f9-release.war?attname=ROOT.war
[root@Web01 ROOT]# rm -rf zrlog-2.2.1-efbe9f9-release.war?attname=ROOT.war
#用完即使删掉,防止后续迁移时会再次解压,覆盖已经部署甚至已有数据的文件  

三、创建数据库

[root@DB01 ~]# mysql -uroot
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 11408
Server version: 5.5.68-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database zrlog charset utf8;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> grant all privileges on *.* to 'koten'@'%' identified by 'koten.vip';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> quit
Bye

四、访问zrlog站点进行安装

8faebd8b5ae744b78d9d909935d0abc4.png

 7b0b54e6981846158bc06303c4922859.png

 e1feea0e0a9648989749622136c74bca.png

3e6b7080fc1d4476b588d6e37efe4ac9.png

五、测试发布博客(文字+图片)

后台成功上传,前台正常显示

87bc9bf6c1264a87bc71acd4af157bc9.png


我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!

猜你喜欢

转载自blog.csdn.net/qq_37510195/article/details/130592945