1. 环境准备与Tomcat下载
在AlmaLinux 9系统上部署Tomcat 10之前,我们需要做好基础环境准备。AlmaLinux作为RHEL的替代发行版,其软件包管理与CentOS基本一致,这为我们的安装提供了便利。
1.1 系统更新与依赖检查
首先建议执行系统更新,确保所有基础组件处于最新状态:
bash复制sudo dnf update -y
Tomcat运行需要Java环境支持,推荐安装OpenJDK 17或更高版本(Tomcat 10要求Java 11+):
bash复制sudo dnf install java-17-openjdk java-17-openjdk-devel -y
安装完成后验证Java版本:
bash复制java -version
注意:如果系统已安装多个Java版本,可通过
alternatives --config java命令切换默认版本。
1.2 获取Tomcat安装包
访问Apache Tomcat官网下载页面时,建议选择镜像站点以提高下载速度。国内用户可以使用清华镜像源:
bash复制wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-10/v10.0.27/bin/apache-tomcat-10.0.27.tar.gz
如果直接下载遇到问题(如原文提到的404错误),可以尝试以下解决方案:
- 检查URL是否包含版本号变更
- 使用curl的-L参数跟随重定向:
bash复制curl -LO https://downloads.apache.org/tomcat/tomcat-10/v10.0.27/bin/apache-tomcat-10.0.27.tar.gz
实操心得:生产环境建议下载sha512校验文件并验证包完整性,避免下载到被篡改的安装包。
2. 文件传输与解压安装
2.1 使用FileZilla传输文件
对于Windows本地下载的情况,FileZilla确实是最常用的SFTP工具之一。连接云服务器时需要注意:
- 协议选择SFTP而非FTP
- 端口默认为22(SSH端口)
- 登录类型选择"密钥文件"更安全
避坑指南:如果连接失败,检查服务器安全组是否开放22端口,以及是否配置了正确的SSH密钥。
2.2 解压与目录规划
建议将Tomcat安装在/opt目录下,这是Linux系统存放第三方软件的常规位置:
bash复制sudo tar -zxvf apache-tomcat-10.0.27.tar.gz -C /opt
解压后建议创建符号链接方便版本管理:
bash复制sudo ln -s /opt/apache-tomcat-10.0.27 /opt/tomcat
目录结构说明:
- bin/: 启动/关闭脚本
- conf/: 配置文件
- logs/: 日志文件
- webapps/: 应用部署目录
- work/: 临时工作目录
3. 环境配置与启动
3.1 配置JAVA_HOME环境
编辑setenv.sh文件(如不存在则创建):
bash复制sudo vi /opt/tomcat/bin/setenv.sh
添加以下内容(路径需根据实际安装位置调整):
bash复制export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export CATALINA_PID="$CATALINA_BASE/tomcat.pid"
赋予执行权限:
bash复制sudo chmod +x /opt/tomcat/bin/setenv.sh
3.2 启动与验证
启动Tomcat:
bash复制/opt/tomcat/bin/startup.sh
验证启动状态:
bash复制ps -ef | grep tomcat
查看启动日志:
bash复制tail -f /opt/tomcat/logs/catalina.out
常见问题:如果启动时报权限不足,可尝试:
bash复制sudo chmod -R 755 /opt/tomcat
sudo chown -R <your_user>:<your_group> /opt/tomcat
4. 安全组与防火墙配置
4.1 云服务器安全组
不同云平台的安全组配置界面略有差异,但都需要开放以下端口:
- 8080: Tomcat默认HTTP端口
- 8009: AJP连接器端口(如使用)
- 8005: 关闭端口
4.2 系统防火墙配置
AlmaLinux 9默认使用firewalld,需要永久开放8080端口:
bash复制sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
验证端口开放状态:
bash复制sudo firewall-cmd --list-ports
5. 系统服务集成
5.1 创建systemd服务文件
创建服务配置文件:
bash复制sudo vi /etc/systemd/system/tomcat.service
推荐配置模板(根据实际情况调整):
ini复制[Unit]
Description=Apache Tomcat 10
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/opt/tomcat/bin/setenv.sh
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
Restart=on-failure
User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
[Install]
WantedBy=multi-user.target
5.2 专用用户配置
创建专用系统用户(更安全的方式):
bash复制sudo useradd -r -m -U -d /opt/tomcat -s /bin/false tomcat
设置目录权限:
bash复制sudo chown -R tomcat:tomcat /opt/tomcat
sudo chmod -R u+rwX,g+rX,o-rwx /opt/tomcat
5.3 服务管理命令
启用服务:
bash复制sudo systemctl daemon-reload
sudo systemctl enable tomcat
sudo systemctl start tomcat
常用管理命令:
bash复制# 查看状态
sudo systemctl status tomcat
# 重启服务
sudo systemctl restart tomcat
# 查看日志
sudo journalctl -u tomcat -f
6. 高级配置与优化
6.1 内存参数调整
编辑setenv.sh添加JVM参数:
bash复制export CATALINA_OPTS="-server -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m"
生产环境建议根据服务器配置调整,Xmx不应超过物理内存的70%
6.2 连接器优化
修改server.xml中的Connector配置:
xml复制<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="200"
minSpareThreads="10"
acceptCount="100"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/css,text/javascript,application/json" />
6.3 安全加固建议
- 删除默认应用:
bash复制rm -rf /opt/tomcat/webapps/*
- 修改关闭端口和命令:
xml复制<Server port="8005" shutdown="SECRET_STRING">
- 禁用管理界面或设置强密码
7. 故障排查指南
7.1 常见错误代码
| 错误代码 | 可能原因 | 解决方案 |
|---|---|---|
| 404 | 应用未部署/路径错误 | 检查webapps目录和URL路径 |
| 500 | 应用内部错误 | 查看应用日志和catalina.out |
| 503 | 服务不可用 | 检查Tomcat是否运行,连接数是否耗尽 |
| 403 | 权限不足 | 检查文件和目录权限 |
7.2 日志分析技巧
- 实时监控日志:
bash复制tail -f /opt/tomcat/logs/catalina.out
- 查找错误:
bash复制grep -i error /opt/tomcat/logs/catalina.out
- 按时间筛选:
bash复制sed -n '/2023-08-01 14:00/,/2023-08-01 15:00/p' catalina.out
7.3 性能问题排查
- 线程转储分析:
bash复制jstack <pid> > thread_dump.txt
- 内存分析:
bash复制jmap -heap <pid>
- 连接数检查:
bash复制netstat -anp | grep 8080 | wc -l
我在实际部署中发现,AlmaLinux 9的SELinux策略可能导致一些权限问题,如遇到无法访问的情况,可以临时设置为permissive模式测试:
bash复制sudo setenforce 0
长期解决方案是配置正确的SELinux策略而非完全禁用。