1. Tomcat介绍与部署
1.1 Tomcat简介
tomcat是一个免费的,开放源代码的Web应用服务器,是Apache软件基金会项目中的一个核心项目,由Apache ,Sun和一些公司以及个人共同开发而成,深受Java爱好者的喜爱,是一款比较流行的web应用服务器。
Tomcat由一系列的组件构成,其中核心的组件有三个:
(1) web容器:完成web服务器的功能。
(2) servlet容器:名字为catalina,用于处理Servlet代码。
(3)JSP容器:用于将JSP动态网页翻译成Servlet代码。
因此Tomcat是web应用服务器,也是一个Servlet/JSP容器。Tomcat作为 Servlet容器,负责处理客户请求,把请求传送给servlet,并将servlet的响应传送回给客户。
-
什么是servlet ?
Servlet 是 Java Servlet 的简称,可以理解为是一个服务连接器,是用Java编写的服务器端程序,具有独立于平台和协议的特性,简单的理解: servlet就是一个中间件,包含了接口和方法,将客户端和数据库连接,从而实现动态网页的创建。 -
什么是JSP?
JSP 全称 Java Server Pages,是一种动态网页开发技术。它使用JSP 标签在HTML,网页中插入Java代码。标签通常以 <% 开头,以 %> 结束。
JSP是一种Java servlet,主要用于实现Java web 应用程序的用户界面部分。
JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
1.2 Tomcat 功能组件结构:
Tomcat的核心功能有两个,分别是负责接收和反馈外部请求的连接器Connector,和负责处理请求的容器Container:其中连接器和容器相辅相成,一起构成了基本的 web服务Service。每个Tomcat服务器可以管理多个Service。
**Conector: 负责对外接收和响应请求。**它是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界。
**Container: 负责对内处理业务逻辑。**其内部由 Engine、Host、Context和wrapper 四个容器组成,用于管理和调用Servlet相关逻辑。
Service:对外提供的web服务。主要包含Connector和 Container两个核心组件,以及其他功能组件。Tomcat可以管理多个Service,且各Service 之间相互独立
1.3 Container 结构分析
每个Service 会包含一个Container容器。在Container内部包含了4个子容器:4个子容器的作用分别是:
(1) Engine:引擎,用来管理多个虚拟主机,一个Service最多只能有一个Engine:
(2)Host:代表一个虚拟主机,也可以叫站点,通过配置 Host 就可以添加站点;
(3)Context:代表一个 web 应用,包含多个Servlet封装器;
(4) wrapper:封装器,容器的最底层。每一Wrapper封装着一个Servlet,负责对象实例的创建、执行和销毁功能。
Engine、Host、Context和 wrapper,这四个容器之间属于父子关系。
容器由一个引擎可以管理多个虚拟主机。每个虚拟主机可以管理多个web应用。每个web应用会有多个Servlet封装器
1.4 Tomcat请求过程
1、用户在浏览器中输入网址,请求被发送到本机端口8080,被在那里监听的 Connector获得;
2、Connector 把该请求交给它所在的Service 的 Engine (Container)来处理,并等待Engine的回应;
3、请求在Engine、Host、Context和Wwrapper 这四个容器之间层层调用,最后在Servlet 中执行对应的业务逻辑、数据存储等。
4、执行完之后的请求响应在Context、Host、Engine容器之间层层返回,最后返回给Connector,并通过Connector 返回给客户端。
2. tomcat项目部署
2.1 java环境安装
//安装jdk环境
[root@node5 ~]# yum -y install java-17-openjdk*
.....安装过程略
//查看安装的版本
[root@node5 ~]# java -version
openjdk version "17.0.1" 2021-10-19 LTS
OpenJDK Runtime Environment 21.9 (build 17.0.1+12-LTS)
OpenJDK 64-Bit Server VM 21.9 (build 17.0.1+12-LTS, mixed mode, sharing)
2.2 tomcat部署
在tomcat官网 下载tomcat
//下载tomcat
[root@node5 ~]# cd /usr/src/
[root@node5 src]# ls
debug kernels
[root@node5 src]# wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.65/bin/apache-tomcat-9.0.65.tar.gz
//解压部署
[root@node5 src]# ls
apache-tomcat-9.0.65.tar.gz debug kernels
[root@node5 src]# tar xf apache-tomcat-9.0.65.tar.gz -C /usr/local/
[root@node5 src]# cd /usr/local/
[root@node5 local]# ln -s apache-tomcat-9.0.65/ tomcat
[root@node5 local]# ll
total 0
drwxr-xr-x. 9 root root 220 Aug 17 15:15 apache-tomcat-9.0.65
drwxr-xr-x. 2 root root 6 May 19 2020 bin
drwxr-xr-x. 2 root root 6 May 19 2020 etc
drwxr-xr-x. 2 root root 6 May 19 2020 games
drwxr-xr-x. 2 root root 6 May 19 2020 include
drwxr-xr-x. 2 root root 6 May 19 2020 lib
drwxr-xr-x. 3 root root 17 Aug 3 15:24 lib64
drwxr-xr-x. 2 root root 6 May 19 2020 libexec
drwxr-xr-x. 2 root root 6 May 19 2020 sbin
drwxr-xr-x. 5 root root 49 Aug 3 15:24 share
drwxr-xr-x. 2 root root 6 May 19 2020 src
lrwxrwxrwx. 1 root root 21 Aug 17 15:16 tomcat -> apache-tomcat-9.0.65/
//写一个hello world的java页面
[root@node5 local]# cd tomcat/
[root@node5 tomcat]# ls
bin CONTRIBUTING.md logs RELEASE-NOTES webapps
BUILDING.txt lib NOTICE RUNNING.txt work
conf LICENSE README.md temp
[root@node5 tomcat]# cd webapps/
[root@node5 webapps]# mkdir test
[root@node5 webapps]# ls
docs examples host-manager manager ROOT test
[root@node5 webapps]# cd test/
[root@node5 test]# vim index.jsp
[root@node5 test]# cat index.jsp
<html>
<head>
<title>test page</title>
</head>
<body>
<%
out.println("Hellow World");
%>
</body>
</html>
[root@node5 test]# ll
total 4
-rw-r--r--. 1 root root 141 Aug 17 15:22 index.jsp
//配置环境变量启动tomcat
[root@node5 test]# echo 'export PATH=/usr/local/tomcat/bin:$PATH' > /etc/profile.d/tomcat.sh
[root@node5 test]# source /etc/profile.d/tomcat.sh
[root@node5 test]# catalina.sh start
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
[root@node5 test]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:*
LISTEN 0 100 *:8080 *:*
- 在浏览器上浏览网页
3 Tomcat主要目录及其文件说明
[root@node5 ~]# cd /usr/local/
[root@node5 local]# ll
total 0
drwxr-xr-x. 9 root root 220 Aug 17 15:15 apache-tomcat-9.0.65
drwxr-xr-x. 2 root root 6 May 19 2020 bin
drwxr-xr-x. 2 root root 6 May 19 2020 etc
drwxr-xr-x. 2 root root 6 May 19 2020 games
drwxr-xr-x. 2 root root 6 May 19 2020 include
drwxr-xr-x. 2 root root 6 May 19 2020 lib
drwxr-xr-x. 3 root root 17 Aug 3 15:24 lib64
drwxr-xr-x. 2 root root 6 May 19 2020 libexec
drwxr-xr-x. 2 root root 6 May 19 2020 sbin
drwxr-xr-x. 5 root root 49 Aug 3 15:24 share
drwxr-xr-x. 2 root root 6 May 19 2020 src
lrwxrwxrwx. 1 root root 21 Aug 17 15:16 tomcat -> apache-tomcat-9.0.65/
[root@node5 local]# ll tomcat/
total 128
drwxr-x---. 2 root root 4096 Aug 17 15:15 bin //bin:存放启动和关闭 Tomcat 的脚本文件,如 catalina.sh startup.sh、shutdown.sh
-rw-r-----. 1 root root 19992 Jul 14 20:28 BUILDING.txt
drwx------. 3 root root 254 Aug 17 15:27 conf //conf:存放Tomcat服务器的各种配置文件,如主配置文件 server.xml和应用默认的部署描述文件 web.xml
-rw-r-----. 1 root root 6210 Jul 14 20:28 CONTRIBUTING.md
drwxr-x---. 2 root root 4096 Aug 17 15:15 lib //lib : 存放Tomcat运行需要的库文件的jar包,一般不作任何改动
-rw-r-----. 1 root root 57092 Jul 14 20:28 LICENSE
drwxr-x---. 2 root root 197 Aug 17 15:27 logs //logs : 存放Tomcat执行时的日志
-rw-r-----. 1 root root 2333 Jul 14 20:28 NOTICE
-rw-r-----. 1 root root 3398 Jul 14 20:28 README.md
-rw-r-----. 1 root root 6901 Jul 14 20:28 RELEASE-NOTES
-rw-r-----. 1 root root 16505 Jul 14 20:28 RUNNING.txt
drwxr-x---. 2 root root 30 Aug 17 15:15 temp //temp : 存放Tomcat运行时产生的文件 会定期自动删除
drwxr-x---. 8 root root 93 Aug 17 15:21 webapps //webapps:存放Tomcat默认的web应用部署目录
drwxr-x---. 3 root root 22 Aug 17 15:27 work //work:存放web应用代码生成和编译文件的临时目录
[root@node5 local]# cd tomcat/
[root@node5 tomcat]# ll bin/
total 892
-rw-r-----. 1 root root 34700 Jul 14 20:28 bootstrap.jar
-rw-r-----. 1 root root 16840 Jul 14 20:28 catalina.bat
-rwxr-x---. 1 root root 25294 Jul 14 20:28 catalina.sh //linux端启动脚本
-rw-r-----. 1 root root 1664 Jul 14 20:28 catalina-tasks.xml
-rw-r-----. 1 root root 2123 Jul 14 20:28 ciphers.bat
-rwxr-x---. 1 root root 1997 Jul 14 20:28 ciphers.sh
-rw-r-----. 1 root root 25410 Jul 14 20:28 commons-daemon.jar
-rw-r-----. 1 root root 211777 Jul 14 20:28 commons-daemon-native.tar.gz
-rw-r-----. 1 root root 2040 Jul 14 20:28 configtest.bat
-rwxr-x---. 1 root root 1922 Jul 14 20:28 configtest.sh //检查配置文件
-rwxr-x---. 1 root root 9100 Jul 14 20:28 daemon.sh
-rw-r-----. 1 root root 2091 Jul 14 20:28 digest.bat
-rwxr-x---. 1 root root 1965 Jul 14 20:28 digest.sh
-rw-r-----. 1 root root 3606 Jul 14 20:28 makebase.bat
-rwxr-x---. 1 root root 3382 Jul 14 20:28 makebase.sh
-rw-r-----. 1 root root 3460 Jul 14 20:28 setclasspath.bat
-rwxr-x---. 1 root root 3708 Jul 14 20:28 setclasspath.sh
-rw-r-----. 1 root root 2020 Jul 14 20:28 shutdown.bat
-rwxr-x---. 1 root root 1902 Jul 14 20:28 shutdown.sh //关闭服务脚本
-rw-r-----. 1 root root 2022 Jul 14 20:28 startup.bat
-rwxr-x---. 1 root root 1904 Jul 14 20:28 startup.sh //启动服务脚本
-rw-r-----. 1 root root 47050 Jul 14 20:28 tomcat-juli.jar
-rw-r-----. 1 root root 436593 Jul 14 20:28 tomcat-native.tar.gz
-rw-r-----. 1 root root 4574 Jul 14 20:28 tool-wrapper.bat
-rwxr-x---. 1 root root 5540 Jul 14 20:28 tool-wrapper.sh
-rw-r-----. 1 root root 2026 Jul 14 20:28 version.bat
-rwxr-x---. 1 root root 1908 Jul 14 20:28 version.sh //查看版本脚本
4. tomcat 界面进一步配置
- 配置 server status 等图形化界面
# 添加图形化角色
[root@node5 ~]# vim /usr/local/tomcat/conf/tomcat-users.xml
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/> //添加此3行
#重启服务
[root@node5 ~]# catalina.sh stop
[root@node5 ~]# catalina.sh start
#配置context.xml文件
[root@node5 ~]# cd /usr/local/tomcat/webapps/manager/META-INF/
[root@node5 META-INF]# ls
context.xml
[root@node5 META-INF]# vim context.xml
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="192\.168\.177\.\d+|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> //添加192.168.177.\d+
[root@node5 META-INF]# vim /usr/local/tomcat/webapps/host-manager/META-INF/context.xml
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="192\.168\.177\.\d+|:127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> //添加192.168.177.\d+
5. 通过tomcat发布jenkins
jenkins简介
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
jenkins工作原理
jenkins部署
- 基本部署环境
1.jdk环境,Jenkins是java语言开发的,因需要jdk环境(已经拥有)。
2.git/svn客户端,因一般代码是放在git/svn服务器上的,我们需要拉取代码。
3.maven客户端,因一般java程序是由maven工程,需要maven打包,当然也有其他打包方式,如:gradle - 安装步骤
下载安装包
[root@node5 ~]# cd /usr/local/tomcat/webapps/
[root@node5 webapps]# mv * /opt/
[root@node5 webapps]# ls
[root@node5 webapps]# wget https://get.jenkins.io/war-stable/2.346.3/jenkins.war
[root@node5 webapps]# ls
jenkins jenkins.war //Tomcat已自动生成目录
#重启服务
[root@node5 webapps]# catalina.sh stop
[root@node5 webapps]# catalina.sh start
进入浏览器访问jenkins 网址: http://localhost:8080/jenkins,(少许等待)
根据提示路径找到初始密码,激活系统
[root@node5 webapps]# cat /root/.jenkins/secrets/initialAdminPassword
1c6d836e77324f6daa6ac0ebeb688b6b
进入插件安装选择 :推荐安装的插件保证基本常用的功能可以使用
选择后,进入插件安装页面(自动安装,等待即可)
安装完成后,创建初始账户密码
进入系统,安装完成
- 新建用户
使用jenkins部署项目
基本软件 | ip |
---|---|
tomcat+jenkins | 192.168.177.137 |
tomcat | 192.168.177.138 |
需求:通过192.168.177.137主机 部署jenkins 将项目打包传输的192.168.177.138主机 并可以通过浏览器访问到项目网页
- 创建项目
-
设置任务名称和类型
-
拉取代码
-
生成拉取代码的脚本
-
编写流水线脚本
pipeline {
agent any
stages {
stage("pull code"){
steps {
git 'https://github.com/chendao2015/tomcat-java-demo.git'
}
}
}
}
-
编写完成后测试
-
开始构建
-
构建完成后 可以查看logs
- 这里是下载后项目保存的路径
- 命令行内查看
[root@node5 ~]# cd .jenkins/workspace/test
[root@node5 test]# ls
db Dockerfile LICENSE pom.xml README.md src
- 打包
#安装打包工具
yum install maven -y
#编写打包脚本
pipeline {
agent any
stages {
stage("pull code"){
steps {
git 'https://github.com/chendao2015/tomcat-java-demo.git'
}
}
stage("make pkg"){
steps {
sh """
mvn clean package -Dmaven.test.skip=true
"""
}
}
}
}
#命令行查看项目test目录
[root@node5 test]# cd target/ //target为打包后生成的目录
[root@node5 target]# ls
classes ly-simple-tomcat-0.0.1-SNAPSHOT maven-archiver
generated-sources ly-simple-tomcat-0.0.1-SNAPSHOT.war maven-status
- 部署
需要在192.168.177.137主机部署tomcat 详细过程请查看上面的tomcat部署
#配置免密登陆
[root@node5 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:ILexF+o4ascaGiaXqsJ4gx+KbvUjWp+x8ZMfEtzeS2k root@localhost.localdomain
The key's randomart image is:
+---[RSA 3072]----+
| |
| |
| . + . |
| o.*.. |
| +oS. |
| o o .o . . |
|=o*o+o...o E |
|BO==++*o. + . |
|@*=+.+..o. . |
+----[SHA256]-----+
[root@localhost ~]# ssh-copy-id root@192.168.177.137
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.177.137 (192.168.177.137)' can't be established.
ECDSA key fingerprint is SHA256:qoJI5joraUlKD9iXhfj+GRVHvegeRitHHDZexhWLOLs.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.177.137's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@192.168.177.137"
and check to make sure that only the key(s) you wanted were added.
# 登陆验证
[root@localhost ~]# ssh root@192.168.177.137
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Thu Aug 18 14:12:17 2022 from 192.168.220.1
[root@node5 ~]# ip addr show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:8c:8e:d5 brd ff:ff:ff:ff:ff:ff
inet 192.168.177.137/24 brd 192.168.220.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe8c:8ed5/64 scope link noprefixroute
valid_lft forever preferred_lft forever
#编写输出脚本
pipeline {
agent any
stages {
stage("pull code"){
steps {
git 'https://github.com/chendao2015/tomcat-java-demo.git'
}
}
stage("make pkg"){
steps {
sh """
mvn clean package -Dmaven.test.skip=true
"""
}
}
stage("publish"){
steps {
sh """
cd /root/.jenkins/workspace/test/target/
scp ly-simple-tomcat-0.0.1-SNAPSHOT.war root@192.168.177.137:/usr/local/tomcat/webapps/
ssh root@192.168.177.137 '/usr/local/tomcat/bin/catalina.sh stop && /usr//local/tomcat/bin/catalina.sh start'
"""
}
}
}
}
-
启动构建
-
192.168.177.137主机查看
[root@node5 ~]# cd /usr/local/tomcat/webapps/
[root@node5 webapps]# ls
docs examples host-manager ly-simple-tomcat-0.0.1-SNAPSHOT ly-simple-tomcat-0.0.1-SNAPSHOT.war manager ROOT
#关闭防火墙和selinux
[root@localhost webapps]# systemctl disable --now firewall
[root@localhost webapps]# setenforce 0
- 网页访问