1. 环境准备与Tomcat下载
在Linux系统上安装Tomcat前,需要确认基础环境是否符合要求。我建议使用CentOS 7或Ubuntu 20.04 LTS这类主流发行版,它们对Java环境的支持最为成熟。首先通过java -version检查JDK是否已安装,如果没有输出版本信息,需要先安装OpenJDK:
bash复制# CentOS/RHEL系统
sudo yum install java-1.8.0-openjdk-devel
# Ubuntu/Debian系统
sudo apt-get install openjdk-8-jdk
注意:Tomcat 9/10需要JDK 8或更高版本,但不要使用JDK 11+的EA(早期访问)版本,可能遇到类加载器问题。
接下来到Apache官网下载Tomcat二进制包。这里有个实用技巧:不要直接点击官网首页的下载链接,而是滚动到页面底部的"Archives"部分,选择后缀为.tar.gz的压缩包(如apache-tomcat-9.0.68.tar.gz)。这样能避免下载到Windows版的.exe安装包。使用wget命令直接获取:
bash复制wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.68/bin/apache-tomcat-9.0.68.tar.gz
下载完成后务必验证文件完整性。我遇到过因网络问题导致压缩包损坏的情况:
bash复制# 对比官方提供的SHA512校验值
sha512sum apache-tomcat-9.0.68.tar.gz
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 解压与目录结构解析
将Tomcat解压到/opt目录是行业惯例,便于统一管理服务类软件:
bash复制sudo tar -xzvf apache-tomcat-9.0.68.tar.gz -C /opt
sudo ln -s /opt/apache-tomcat-9.0.68 /opt/tomcat # 创建软链接方便版本升级
Tomcat目录结构需要重点掌握:
- bin/:启停脚本(startup.sh/shutdown.sh)和依赖库
- conf/:核心配置文件(server.xml/web.xml等)
- logs/:catalina.out记录运行日志
- webapps/:默认应用部署目录
- work/:JSP编译生成的Servlet类文件
特别要注意的是temp/目录,它不仅是临时文件存储位置,还承担着Session持久化等功能。我曾遇到因磁盘空间不足导致Session无法序列化的问题,建议定期清理:
bash复制# 添加到crontab每周清理一次
0 3 * * 0 find /opt/tomcat/temp -type f -mtime +7 -exec rm -f {} \;
3. 用户权限与安全配置
永远不要用root用户直接运行Tomcat!这会导致严重的安全风险。正确的做法是创建专用用户:
bash复制sudo groupadd tomcat
sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat
sudo chown -R tomcat:tomcat /opt/apache-tomcat-9.0.68
关键配置文件需要特别关注权限:
bash复制sudo chmod -R g+r conf
sudo chmod g+x conf
sudo chown -R tomcat webapps/ work/ temp/ logs/
在conf/tomcat-users.xml中配置管理员账户时,务必使用强密码并限制角色:
xml复制<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="deployer" password="加密后的密码"
roles="manager-gui,admin-gui"/>
安全提示:不要在密码中使用特殊字符&<>,这会导致XML解析错误。建议先用
mvn --encrypt-password生成加密密码。
4. 服务化配置与启动优化
将Tomcat配置为systemd服务可以实现开机自启。创建/etc/systemd/system/tomcat.service:
ini复制[Unit]
Description=Apache Tomcat 9
After=syslog.target network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom -Xms512M -Xmx1024M -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=512M"
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
几个关键参数说明:
-Djava.security.egd:加速SecureRandom初始化-Xms/-Xmx:堆内存初始/最大值,根据物理内存调整MetaspaceSize:元数据区大小,避免频繁GC
启动服务并验证状态:
bash复制sudo systemctl daemon-reload
sudo systemctl start tomcat
sudo systemctl enable tomcat
tail -f /opt/tomcat/logs/catalina.out # 查看实时日志
5. 防火墙与端口配置
默认情况下Tomcat使用8080端口,需要开放防火墙:
bash复制# CentOS 7+
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
# Ubuntu
sudo ufw allow 8080/tcp
如果想使用80端口,有三种方案:
-
iptables端口转发(推荐):
bash复制sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 -
修改server.xml:
xml复制<Connector port="80" protocol="HTTP/1.1" ... /> -
前端加Nginx/Apache:适合生产环境
6. 验证安装与故障排查
访问http://服务器IP:8080应该看到Tomcat欢迎页。如果遇到问题,按以下步骤排查:
常见问题1:无法连接
bash复制netstat -tulnp | grep java # 检查端口监听状态
ps -ef | grep tomcat # 检查进程是否存在
常见问题2:启动超时
检查logs/catalina.out中的异常,常见原因包括:
- 端口冲突(修改conf/server.xml中的端口号)
- 内存不足(调整JAVA_OPTS中的-Xmx参数)
- 权限问题(确保所有文件属主是tomcat用户)
性能调优建议:
- 在
conf/server.xml的Connector配置中添加:xml复制<Connector executor="tomcatThreadPool" enableLookups="false" acceptCount="100" maxThreads="200" minSpareThreads="20" compression="on" /> - 生产环境建议禁用AJP协议(注释掉conf/server.xml中的AJP Connector)
7. 应用部署实战
部署WAR包有两种方式:
-
热部署:直接将WAR包放入webapps目录
bash复制sudo cp app.war /opt/tomcat/webapps/ sudo chown tomcat:tomcat /opt/tomcat/webapps/app.war -
通过管理界面:
访问http://服务器IP:8080/manager/html,使用之前配置的账号登录后上传WAR包。
对于生产环境,我推荐使用并行部署方案:在server.xml的Host节点添加:
xml复制<Context path="" docBase="app" reloadable="false">
<Manager pathname="" />
</Context>
这样可以通过app##001.war、app##002.war的形式实现零停机更新。Tomcat会自动加载版本号最高的应用。
8. 备份与监控策略
日志轮转配置:
在/etc/logrotate.d/tomcat中添加:
code复制/opt/tomcat/logs/catalina.out {
daily
rotate 30
missingok
compress
copytruncate
}
监控建议:
- 使用JMX监控JVM状态:
bash复制JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" - 集成Prometheus监控:
部署JMX Exporter收集指标
经过以上步骤,你的Tomcat应该已经处于最佳运行状态。我在生产环境中发现,定期执行bin/catalina.sh configtest检查配置有效性,能预防90%的启动故障。
