RedHat/CentOS8【Tomcat】部署 JavaWeb
Tomcat 是一个开源的(遵循 Apache 2.0 协议)轻量级 Web 应用服务器中间件,在中小型系统和并发量小的场景中普遍使用,是开发和调试 Servlet 和 JSP 程序的首选中间件。
本方案基于CentOS8系统设计,建议在RedHat/CentOS系统中使用。
1.安装 Tomcat 中间件
注意:安装 Tomcat 前,应确保系统已经正确安装配置 JDK 。如何安装配置 JDK,请阅读文件《RedHat/CentOS8 安装配置 OracleJDK 8 和 OpenJDK 1.8》【https://www.jianshu.com/p/208cc5b8688b】
第一步,打开 Tomcat 官方网站下载页面【https://tomcat.apache.org/download-90.cgi】,下载 Tomcat 的编译程序 tar 包到用户主目录中。
Tomcat 下载页面第二步,解压缩编译程序 tar 包到"/usr/local"目录中。
[centos@host ~]$ sudo tar zxvf apache-tomcat-9.0.34.tar.gz -C /usr/local
[centos@host ~]$ sudo mv /usr/local/apache-tomcat-9.0.34 /usr/local/tomcat-9.0.34
第三步,创建 Tomcat 管理用户和组,并设置为程序安装目录的拥有者。
[centos@host ~ ]$ sudo id tomcat
id: “tomcat”:无此用户
[centos@host ~ ]$ sudo groupadd tomcat
[centos@host ~ ]$ sudo useradd -g tomcat -s /bin/false tomcat
[centos@host ~ ]$ sudo chown -R tomcat:tomcat /usr/local/tomcat-9.0.34
第四步,创建 Tomcat 开机启动服务配置文件。
使用文本编辑器打开配置文件:
[centos@host ~]$ sudo gedit /usr/lib/systemd/system/tomcat.service
修改或验证文件中的以下参数并保存:
[Unit]
Description=Tomcat Server
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment=JAVA_HOME=/usr/local/jdk1.8.0_261
Environment=JRE_HOME=/usr/local/jdk1.8.0_261/jre
ExecStart=/usr/local/tomcat-9.0.34/bin/startup.sh
ExecStop=/usr/local/tomcat-9.0.34/bin/shutdown.sh
ExecReload=/usr/local/tomcat-9.0.34/bin/shutdown.sh
第五步,启动 Tomcat 服务,并设置为开机自动启动。
[centos@host ~]$ sudo systemctl daemon-reload
[centos@host ~]$ sudo systemctl enable tomcat.service
[centos@host ~]$ sudo systemctl start tomcat.service
第六步,设置防火墙端口(CentOS8默认安装firewall防火墙),允许"8080"端口(Tomcat 默认端口)访问服务器。
[centos@host ~]$ sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
[centos@host ~]$ sudo firewall-cmd --reload
第七步,验证安装,在浏览器中输入"http://127.0.0.1:8080"来访问 Tomcat 默认主页。
2.Tomcat 主配置文件详解
Tomcat 的主配置文件是 "/程序安装目录/conf/server.xml",该文件定义了 Tomcat 的监听服务,站点,虚拟目录信息。
Tomcat 的主配置文件结构如下:
<Server>
<Listener />
<GlobaNamingResources></GlobaNamingResources>
<Service>
<Connector />
<Engine>
<Realm />
<host>
<Context />
<Value />
</host>
</Engine>
</Service>
</Server>
-
Server(服务器)节点:Server 定义了一个提供完整的JVM的独立组件,服务器在指定的端口上监听shutdown命令。 Server 代表根容器,它是唯一的,且不能做为任何元素的子元素。属性如下:
-- port:指定监听 shutdown 命令端口,终止 Tomcat 时需要在服务器上发出 shutdown 命令,必须设置。
-- shutdown:指定终止 Tomcat 时,发给服务器的 shutdown 监听端口的字符串,必须设置。 -
Service(服务)节点:Service 定义了一个或多个 Connectors 共享一个 Engine 的组合。 Server 可以包含一个或多个 Service 。
-- name:指定 Service 的名字。 -
Connector(连接器)节点: Connector 定义请求被接收和应答所需要的端口。每个 Connector 通过共享的 Engine 处理请求。
-- port:指定服务器端创建的端口号,这个端口监听来自客户端的请求。
-- protocol:指定 HTTP 协议。
-- redirectPort:指定服务器正在处理 HTTP 请求时收到了一个 SSL 传输请求后重定向的端口号。
-- connectionTimeout:指定超时的时间数(以毫秒为单位)。 -
Engine(引擎)节点:Engine 定义处理每个请求的入口点。每个 Service 只能有一个 Engine,处理所有 Connector 接收到的客户请求。每个 Engine 可以包含一个或多个 Host 。
-- name:指定 Engine 的名字。
-- defaultHost:指定默认 Host 的名字。 -
Host(主机)节点:Host 定义虚拟主机,它包含了一个或多个 Web 应用。
-- name:指定 Host 的名字。
-- appBase:应用程序基本目录,即存放应用程序(WAR 文件)的目录。
-- unpackWARs:指定为"true",则自动将WAR文件解压;指定为"false",则不解压直接从WAR文件中运行应用程序。
-- autoDeploy:指定为"true",在 Tomcat 服务处于运行状态时,能够自动监测 appBase 下的 Web 应用,如果发现新的 Web 应用会自运发布这个 Web 应用;指定为"false",则不自动检测。 -
Context(应用程序)节点:Context 定义单个 Web 应用程序,每个 Host 可以包含一个或多个 Context 。
-- docBase:指定应用程序(WAR 文件)的物理目录。
-- path:指定应用程序的虚拟目录。 URL 请求的形式是"http://IP:PORT/虚拟目录"。
-- debug:指定输出的调试信息,允许设置"0-9","0"表示提供最少的信息,"9"表示提供最多的信息。
-- reloadable:指定为"true",则 Tomcat 会自动检测应用程序的"/WEB-INF/lib"和 "/WEB-INF/classes"目录的更新,自动装载新的应用程序;指定为"false",则不会。 -
Value(日志)节点:定义调试和错误信息。
-- className:指定实现类,默认是"org.apache.catalina.valves.AccessLogValve",用于记录应用程序的访问信息。
-- directory:指定日志文件存放的位置。
-- prefix:指定日志文件名的前缀。
-- suffix:指定日志文件名的后缀。
-- pattern:指定日志文件记录的内容和格式,通过通配符脚本表示。 -
Realm(认证)节点:Realm 定义存放用户名,密码及角色的数据库。
-- className:指定实现类。
3.使用 Ecplise 发布 WAR 包
第一步,在需要发布的项目上右击,选择"Export..."。
第二步,选择"Web"下的"WAR file"选项,点击"Next>"按钮。
第三步,点击"Browse"按钮,设置 WAR 文件存放位置。
第四步,设置 WAR 包文件部署的服务器运行环境,如:Tomcat;设置是否将源文件一并导出到 WAR 文件中(不选择则只导出编译文件,不建议选择),点击“Finish”按钮等待导出进度完成。
4.在 Tomcat 中部署 WAR 包
方案一:在默认站点中的应用程序目录中部署。(最简部署)
将已发布的 WAR 文件拷贝到"/程序安装目录/webapps"目录中即可,Tomcat 会自动检测部署,用户通过"http://ip:port/WAR文件名"即可访问,默认的端口是8080。
方案二:在默认站点中建立虚拟目录的方式部署。
① 修改主配置文件 "/程序安装目录/conf/server.xml",在默认 Host(站点)中增加 Context(应用程序)的定义。
使用文本编辑器打开配置文件:
[centos@host ~]$ sudo gedit /usr/local/tomcat-9.0.34/conf/server.xml
在文件中的增加以下配置并保存:
<Server>
<Service>
<Engine>
<Host name="localhost" appBase="webapps" autoDeploy="true">
<Context path="/virtualdirectory" docBase="physicaldirectory" reloadable="true" debug="0" />
</Host>
</Engine>
</Service>
</Server>
② 在"/程序安装目录/webapps"中创建"physicaldirectory"目录。
[centos@host ~]$ sudo -u tomcat mkdir /usr/local/tomcat-9.0.34/webapps/physicaldirectory
③ 并将已发布的 WAR 文件拷贝到该目录中,Tomcat 会自动检测部署,用户通过"http://ip:port/virtualdirectory/WAR文件名"即可访问,默认的端口是8080。
方案三:建立新的站点部署(主机头部署)。
① 修改主配置文件 "/程序安装目录/conf/server.xml",在默认的 Service (服务)中增加自定义 Host 的定义。
使用文本编辑器打开配置文件:
[centos@host ~]$ sudo gedit /usr/local/tomcat-9.0.34/conf/server.xml
在文件中的增加以下配置并保存:
<Server>
<Service>
<Engine>
<Host name="www.host.com" appBase="hostapps" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="hostlogs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
② 在"/程序安装目录"中创建"hostapps"和"hostlogs"目录。
[centos@host ~]$ sudo -u tomcat mkdir /usr/local/tomcat-9.0.34/hostapps
[centos@host ~]$ sudo -u tomcat mkdir /usr/local/tomcat-9.0.34/hostlogs
③ 将已发布的 WAR 文件拷贝到该目录中,Tomcat 会自动检测部署,用户通过"http://www.host.com:port/WAR文件名"即可访问,默认的端口是8080。
④ 在 DNS 服务器上建立域名"www.host.com"与服务器 IP 地址的解析记录。**
方案四:建立新的监听端口部署。
① 修改主配置文件 "/程序安装目录/conf/server.xml",增加新的 Service(服务)的定义。
使用文本编辑器打开配置文件:
[centos@host ~]$ sudo gedit /usr/local/tomcat-9.0.34/conf/server.xml
在文件中的增加以下配置并保存:
<Server>
<Service name="Catalina_New">
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps_new" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs_new"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
② 在"/程序安装目录"中创建"webapps_new"和"logs_new"目录。
[centos@host ~]$ sudo -u tomcat mkdir /usr/local/tomcat-9.0.34/webapps_new
[centos@host ~]$ sudo -u tomcat mkdir /usr/local/tomcat-9.0.34/logs_new
重启启动 Tomcat 后,会监听8081端口。在新的 Service(服务)中,继续选择方案一、方案二、方案三的方式部署站点和应用程序,但是在访问时应使用新的端口号。