Linux 下安装 Tomcat 8.5 和 JDK 8:从目录扩容到双实例启动
在 Linux 服务器上部署 Tomcat 时,不能只关注 Tomcat 压缩包本身。实际环境里经常还要先确认安装目录空间是否足够、JDK 路径是否正确、多个 Tomcat 实例的端口是否冲突。
本文以 /app 目录为安装目录,整理一次 Tomcat 8.5.59 与 JDK 8 的部署过程。原现场还涉及 LVM 扩容,所以这里把目录扩容、文件上传、解压、环境变量配置、端口调整和启动验证放在一起说明。
原文发布时间:2020-10-28 16:47:44
原文链接:https://blog.csdn.net/weixin_45833902/article/details/109336998
一、部署前先确认目录空间
先查看服务器磁盘和挂载情况:
df -h
如果 Tomcat 准备安装到 /app,重点关注 /app 对应文件系统的容量和剩余空间。
原环境中 /app 位于 LVM 逻辑卷:
/dev/mapper/VolGroup-app 40G 33M 40G 1% /app
同时卷组还有剩余空间:
vgs
vgdisplay
lvs
可看到 VolGroup 还有约 69G 空闲空间,因此可以给 /app 扩容。
二、给 /app 逻辑卷扩容
先确认 /app 对应的逻辑卷路径:
lvdisplay | grep app
示例输出:
LV Path /dev/VolGroup/app
LV Name app
将卷组剩余 PE 扩展给 /app:
lvextend -l +17665 /dev/VolGroup/app
如果 /app 使用的是 XFS 文件系统,在线扩容使用:
xfs_growfs /dev/VolGroup/app
再次检查容量:
df -h /app
原环境中 /app 从 40G 扩展到了 109G:
/dev/mapper/VolGroup-app 109G 33M 109G 1% /app
如果 Tomcat 运行用户是 bjtel,还需要确认目录属主:
chown -R bjtel:bjtel /app
三、上传 Tomcat 和 JDK 安装包
将 Tomcat 与 JDK 安装包上传到 /app 目录,例如:
apache-tomcat-8.5.59.zip
jdk-8u271-linux-x64.tar.gz
切换到安装用户后给安装包赋权:
cd /app
chmod 775 apache-tomcat-8.5.59.zip
chmod 775 jdk-8u271-linux-x64.tar.gz
这里的权限不是必须固定为 775,关键是当前安装用户具备读取和解压权限。
四、解压 Tomcat 和 JDK
解压 Tomcat:
unzip apache-tomcat-8.5.59.zip
解压 JDK:
tar -zxvf jdk-8u271-linux-x64.tar.gz
解压后建议确认目录结构:
ls -ld /app/apache-tomcat-8.5.59
ls -ld /app/jdk1.8.0_271
如果要部署两个 Tomcat 实例,可以复制两份目录并用端口区分:
cp -a /app/apache-tomcat-8.5.59 /app/apache-tomcat-8.5.59-8090
cp -a /app/apache-tomcat-8.5.59 /app/apache-tomcat-8.5.59-9090
五、配置 Tomcat 使用指定 JDK
进入 Tomcat 的 bin 目录:
cd /app/apache-tomcat-8.5.59-9090/bin
可以在 setclasspath.sh 或 catalina.sh 中加入 JDK 路径:
vi setclasspath.sh
vi catalina.sh
添加内容示例:
export JAVA_HOME=/app/jdk1.8.0_271
export JRE_HOME=/app/jdk1.8.0_271
如果同一台服务器上有多个 Java 版本,建议显式写入 Tomcat 启动脚本,避免调用到系统默认的错误版本。
六、修改 Tomcat 端口,避免双实例冲突
如果服务器上启动两个 Tomcat 实例,必须修改 server.xml 中的端口,否则第二个实例会因为端口占用启动失败。
编辑配置文件:
vi /app/apache-tomcat-8.5.59-9090/conf/server.xml
常见需要检查的端口包括:
- Server port:默认 8005,用于 shutdown。
- Connector port:默认 8080,用于 HTTP 访问。
- AJP port:默认 8009,如果启用 AJP,也要避免冲突。
例如一个实例使用 8090,另一个实例使用 9090:
<Server port="9005" shutdown="SHUTDOWN">
<Connector port="9090" protocol="HTTP/1.1" />
<Connector port="9009" protocol="AJP/1.3" />
另一个实例则配置为:
<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8090" protocol="HTTP/1.1" />
<Connector port="8009" protocol="AJP/1.3" />
端口具体怎么分配不固定,核心原则是同一台机器上不能重复。
七、清理默认 webapps 目录
如果只保留业务应用,可以进入 Tomcat 的 webapps 目录,删除不需要的默认应用。
常见默认目录包括:
docs
examples
host-manager
manager
ROOT
如果业务应用部署在 ROOT,可以只保留 ROOT。但删除前要确认业务部署方式,避免把后续需要的管理功能或默认页面误删。
八、启动 Tomcat
分别启动两个 Tomcat 实例:
/app/apache-tomcat-8.5.59-9090/bin/startup.sh
/app/apache-tomcat-8.5.59-8090/bin/startup.sh
启动后检查进程:
ps -ef | grep tomcat | grep -v grep
检查端口:
ss -lntp | grep -E '8090|9090'
如果系统没有 ss,也可以使用:
netstat -lntp | grep -E '8090|9090'
再查看启动日志:
tail -f /app/apache-tomcat-8.5.59-9090/logs/catalina.out
看到 Server startup in ... ms 之类的输出,一般说明 Tomcat 已启动完成。
九、常见问题
1. unzip 命令不存在
如果执行解压时报错 unzip: command not found,需要先安装 unzip:
yum install -y unzip
或在支持 DNF 的系统上执行:
dnf install -y unzip
2. 启动时报 JAVA_HOME 找不到
检查 JDK 路径是否正确:
ls -ld /app/jdk1.8.0_271
再检查启动脚本中是否写成了正确的 JAVA_HOME 和 JRE_HOME。
3. 第二个 Tomcat 启动失败
大概率是端口冲突。检查端口占用:
ss -lntp | grep -E '8005|8009|8080|8090|9005|9009|9090'
确保每个 Tomcat 实例的 shutdown、HTTP、AJP 端口都不重复。
4. 启动脚本没有执行权限
如果提示权限不足,可以给脚本增加执行权限:
chmod +x /app/apache-tomcat-8.5.59-9090/bin/*.sh
chmod +x /app/apache-tomcat-8.5.59-8090/bin/*.sh
十、结论
Tomcat 安装看起来只是解压和启动,但在生产环境中至少要确认四件事:
1. /app 等安装目录容量充足。
2. Tomcat 运行用户对安装目录有权限。
3. JAVA_HOME 和 JRE_HOME 指向正确的 JDK。
4. 多个 Tomcat 实例的端口不能冲突。
本次部署流程可以概括为:先扩容 /app,再上传并解压 Tomcat 与 JDK,随后配置 JDK 路径和端口,最后启动 Tomcat 并通过进程、端口和日志进行验证。