1. 项目概述
最近在 openEuler 24.03 LTS 上部署 Tomcat 9 时踩了不少坑,这里把完整过程记录下来。作为国产操作系统的代表,openEuler 24.03 LTS 版本在稳定性和性能上都有了显著提升,但在软件生态方面与传统 Linux 发行版仍有些差异。本文将详细介绍如何在 openEuler 上从零开始部署 Tomcat 9 应用服务器,包括环境准备、依赖安装、配置优化等全流程。
提示:本文所有操作均在 openEuler 24.03 LTS 最小化安装环境下测试通过,建议使用相同版本以避免兼容性问题。
2. 环境准备与依赖安装
2.1 系统基础配置
首先确保系统是最新状态:
sudo dnf update -y sudo dnf install -y wget tar gzipopenEuler 默认使用 DNF 作为包管理器,与传统 CentOS/RHEL 的 YUM 命令基本兼容。我建议在开始前先检查系统架构:
uname -m如果是 ARM 架构(aarch64),需要特别注意后续下载的软件包版本。
2.2 Java 环境部署
Tomcat 9 需要 Java 8 或更高版本。openEuler 官方源提供了多个 JDK 选项:
sudo dnf search jdk推荐安装 OpenJDK 11:
sudo dnf install -y java-11-openjdk-devel安装后验证:
java -version javac -version注意:如果系统已有多个 Java 版本,可以通过
alternatives --config java切换默认版本。
3. Tomcat 9 安装与配置
3.1 获取 Tomcat 9 安装包
建议从 Apache 官网获取最新稳定版:
wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.76/bin/apache-tomcat-9.0.76.tar.gz下载后验证文件完整性:
wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.76/bin/apache-tomcat-9.0.76.tar.gz.sha512 sha512sum -c apache-tomcat-9.0.76.tar.gz.sha5123.2 安装与目录结构
解压安装包到 /opt 目录:
sudo tar -xzf apache-tomcat-9.0.76.tar.gz -C /opt sudo ln -s /opt/apache-tomcat-9.0.76 /opt/tomcat创建专用用户和组:
sudo groupadd tomcat sudo useradd -g tomcat -d /opt/tomcat -s /bin/false tomcat sudo chown -R tomcat:tomcat /opt/tomcat目录结构说明:
- bin/: 启动/停止脚本
- conf/: 配置文件
- logs/: 日志文件
- webapps/: 应用部署目录
- work/: 临时工作目录
3.3 基础配置调整
修改 conf/server.xml 优化连接器配置:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxThreads="200" minSpareThreads="10" enableLookups="false" acceptCount="100" compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/css,text/javascript,application/javascript"/>设置管理员账户(conf/tomcat-users.xml):
<role rolename="manager-gui"/> <role rolename="admin-gui"/> <user username="admin" password="复杂密码" roles="manager-gui,admin-gui"/>4. 服务管理与优化
4.1 系统服务集成
创建 systemd 服务文件 /etc/systemd/system/tomcat.service:
[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_HOME=/usr/lib/jvm/java-11-openjdk" 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 --now tomcat4.2 性能优化建议
- JVM 参数调整(bin/setenv.sh):
export CATALINA_OPTS="-server -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m"- 关闭不需要的 Web 应用:
rm -rf /opt/tomcat/webapps/examples rm -rf /opt/tomcat/webapps/docs- 日志轮转配置(/etc/logrotate.d/tomcat):
/opt/tomcat/logs/catalina.out { daily rotate 30 missingok compress copytruncate dateext }5. 安全加固措施
5.1 基础安全配置
- 禁用管理界面外部访问(conf/Catalina/localhost/manager.xml):
<Context privileged="true" antiResourceLocking="false" docBase="${catalina.home}/webapps/manager"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.0\.0\.1|::1|192\.168\.\d+\.\d+" /> </Context>- 隐藏服务器信息(conf/server.xml):
<Connector port="8080" ... server="Unknown" />并在 webapps/ROOT/WEB-INF/web.xml 添加:
<error-page> <error-code>404</error-code> <location>/404.html</location> </error-page>5.2 防火墙配置
sudo firewall-cmd --permanent --add-port=8080/tcp sudo firewall-cmd --reload如果需要 HTTPS 支持,建议使用 Nginx 反向代理并配置 Let's Encrypt 证书。
6. 常见问题排查
6.1 启动失败排查
- 端口冲突:
sudo netstat -tulnp | grep 8080- 权限问题:
sudo chmod -R g+r /opt/tomcat/conf sudo chmod g+x /opt/tomcat/conf- 内存不足: 检查 /opt/tomcat/logs/catalina.out 中的 OutOfMemoryError
6.2 性能问题分析
- 线程池耗尽:
tail -f /opt/tomcat/logs/catalina.out | grep "All threads are busy"- 内存泄漏检测:
jstat -gcutil <pid> 1000 10- 连接数监控:
sudo ss -ltnp | grep java7. 应用部署实践
7.1 手动部署 WAR 包
将应用 WAR 包复制到 webapps 目录:
sudo cp myapp.war /opt/tomcat/webapps/ sudo chown tomcat:tomcat /opt/tomcat/webapps/myapp.warTomcat 会自动解压部署,可以通过日志观察进度:
tail -f /opt/tomcat/logs/catalina.out7.2 使用 Manager App 部署
- 确保 conf/tomcat-users.xml 已配置 manager-gui 角色
- 访问 http://服务器IP:8080/manager/html
- 在 "WAR file to deploy" 部分上传应用
安全提示:生产环境建议禁用 Manager App,或严格限制访问IP
7.3 多实例部署方案
对于需要隔离的环境,可以创建多个实例:
sudo cp -r /opt/tomcat /opt/tomcat-instance2 sudo chown -R tomcat:tomcat /opt/tomcat-instance2修改 conf/server.xml 中的端口号(8005, 8080, 8009),然后创建新的 systemd 服务文件。
8. 监控与维护
8.1 基础监控配置
- 启用 JMX 监控(bin/setenv.sh):
export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"- 使用 jConsole 连接:
jconsole 服务器IP:90108.2 日志分析技巧
- 查找错误:
grep -E "ERROR|Exception" /opt/tomcat/logs/catalina.out- 分析访问模式:
awk '{print $1}' /opt/tomcat/logs/localhost_access_log.* | sort | uniq -c | sort -nr- 监控慢请求:
grep "processing time" /opt/tomcat/logs/localhost_access_log.* | awk '$NF>1000 {print}'8.3 备份策略
- 配置文件备份:
sudo tar -czf /backup/tomcat-conf-$(date +%F).tar.gz /opt/tomcat/conf- 应用数据备份:
sudo tar -czf /backup/tomcat-webapps-$(date +%F).tar.gz /opt/tomcat/webapps- 定期清理日志:
find /opt/tomcat/logs -name "*.log" -mtime +30 -exec rm -f {} \;