1. 为什么选择在Linux上部署Tomcat?
作为Java开发者,我们经常需要在服务器环境部署Web应用。Linux系统以其稳定性、安全性和资源占用低的特性,成为生产环境的首选。而Tomcat作为Apache软件基金会下的开源Servlet容器,凭借其轻量级和良好的性能表现,在中小型Java Web项目中占据重要地位。
我曾在CentOS和Ubuntu两种主流Linux发行版上部署过数十次Tomcat,遇到过各种"坑"。比如有一次在客户现场,因为没配置JAVA_HOME导致Tomcat启动失败,排查了整整两小时才发现问题。本文将分享我在Linux系统上安装部署Tomcat的完整经验,包括环境准备、安装配置、优化调优等全流程。
2. 环境准备与依赖检查
2.1 选择合适的Linux发行版
Tomcat可以运行在大多数Linux发行版上,但不同发行版的包管理工具和目录结构略有差异:
- CentOS/RHEL:企业级首选,稳定性高,使用yum包管理器
- Ubuntu/Debian:社区支持好,使用apt包管理器
- OpenSUSE:YaST工具提供图形化配置界面
建议生产环境选择LTS(Long Term Support)版本,如Ubuntu 20.04 LTS或CentOS 7/8。
2.2 JDK安装与配置
Tomcat运行需要Java环境支持,推荐安装OpenJDK:
# Ubuntu/Debian sudo apt update sudo apt install openjdk-11-jdk # CentOS/RHEL sudo yum install java-11-openjdk-devel安装后验证Java版本:
java -version关键步骤:必须设置JAVA_HOME环境变量。编辑~/.bashrc或/etc/profile文件:
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java)))) export PATH=$PATH:$JAVA_HOME/bin然后执行source ~/.bashrc使配置生效。这是很多新手容易忽略的关键点,没有正确配置JAVA_HOME会导致Tomcat启动失败。
3. Tomcat安装与基础配置
3.1 获取Tomcat二进制包
推荐从Apache官网下载最新稳定版:
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.68/bin/apache-tomcat-9.0.68.tar.gz注意:生产环境应使用稳定版本而非最新版,避免潜在兼容性问题。
解压安装包到/opt目录(推荐):
sudo tar -xzvf apache-tomcat-9.0.68.tar.gz -C /opt sudo ln -s /opt/apache-tomcat-9.0.68 /opt/tomcat # 创建软链接方便管理3.2 目录结构解析
了解Tomcat目录结构对后续配置和问题排查很重要:
| 目录 | 用途 |
|---|---|
| bin | 启动/停止脚本 |
| conf | 配置文件(server.xml等) |
| lib | 依赖库 |
| logs | 日志文件 |
| webapps | 应用部署目录 |
| work | 运行时生成的文件 |
3.3 创建专用用户
为安全考虑,不应使用root用户运行Tomcat:
sudo groupadd tomcat sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat sudo chown -R tomcat:tomcat /opt/apache-tomcat-9.0.684. 服务配置与优化
4.1 配置系统服务
创建systemd服务文件/etc/systemd/system/tomcat.service:
[Unit] Description=Apache Tomcat Web Application Container After=network.target [Service] Type=forking User=tomcat Group=tomcat Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64" Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid" Environment="CATALINA_HOME=/opt/tomcat" Environment="CATALINA_BASE=/opt/tomcat" ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/opt/tomcat/bin/shutdown.sh Restart=on-failure [Install] WantedBy=multi-user.target启用并启动服务:
sudo systemctl daemon-reload sudo systemctl enable tomcat sudo systemctl start tomcat4.2 基础安全配置
- 修改默认端口:编辑
conf/server.xml,将8080改为非常用端口 - 禁用管理界面:非必要不部署
manager和host-manager应用 - 配置访问限制:在
conf/tomcat-users.xml中设置强密码
4.3 性能调优
修改conf/server.xml中的Connector配置:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxThreads="200" minSpareThreads="10" acceptCount="100" enableLookups="false" URIEncoding="UTF-8"/>关键参数说明:
maxThreads:最大处理线程数,根据CPU核心数调整minSpareThreads:最小空闲线程数acceptCount:等待队列长度
5. 应用部署与日常管理
5.1 部署Web应用
有三种常用部署方式:
- 直接复制WAR包:将应用WAR文件放入
webapps目录 - 热部署:通过Manager应用界面部署
- 上下文配置:在
conf/Catalina/localhost下创建XML文件
推荐生产环境使用第一种方式,简单可靠。
5.2 日志管理
Tomcat主要日志文件:
catalina.out:主日志localhost.[date].log:应用日志host-manager.[date].log:管理界面日志
建议配置日志轮转,编辑conf/logging.properties调整日志级别和输出格式。
5.3 常见问题排查
问题1:Tomcat启动失败,无错误信息
- 检查
catalina.out日志 - 确认JAVA_HOME设置正确
- 检查端口是否被占用:
netstat -tulnp | grep 8080
问题2:应用访问出现乱码
- 确认Connector配置了
URIEncoding="UTF-8" - 检查应用本身的编码设置
- 确保Linux系统locale配置正确
问题3:内存溢出
- 调整
bin/setenv.sh中的内存参数:
export JAVA_OPTS="-Xms512m -Xmx1024m -XX:MaxPermSize=256m"6. 进阶配置与安全加固
6.1 SSL/TLS配置
生成自签名证书:
keytool -genkey -alias tomcat -keyalg RSA -keystore /opt/tomcat/conf/keystore.jks修改server.xml配置HTTPS连接器:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true"> <SSLHostConfig> <Certificate certificateKeystoreFile="/opt/tomcat/conf/keystore.jks" certificateKeystorePassword="changeit" type="RSA" /> </SSLHostConfig> </Connector>6.2 连接器优化
对于高并发场景,考虑使用NIO2或APR连接器:
<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" connectionTimeout="20000" redirectPort="8443" />6.3 防火墙配置
开放必要端口:
sudo ufw allow 8080/tcp sudo ufw allow 8443/tcp sudo ufw enable对于生产环境,建议配置反向代理(如Nginx)而不是直接暴露Tomcat端口。
7. 监控与维护
7.1 健康检查
配置JMX监控:
export CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"7.2 备份策略
关键需要备份的目录:
conf:所有配置文件webapps:部署的应用logs:历史日志(可选)
建议编写自动化备份脚本,定期备份到远程存储。
7.3 版本升级
升级步骤:
- 备份当前安装
- 下载新版本并解压到新目录
- 复制旧版的
conf、webapps等到新目录 - 测试新版本
- 切换软链接指向新版本
升级前务必阅读官方Release Notes,了解兼容性变化。