1. 安装前系统准备
在Debian上部署Tomcat前,需先更新系统软件包以修复潜在漏洞,并安装Java运行环境(JRE/JDK)。Tomcat依赖Java环境,推荐使用OpenJDK(如openjdk-11-jdk),可通过sudo apt update && sudo apt install openjdk-11-jdk安装,安装后通过java -version验证是否成功。
2. Tomcat安装路径与权限设置
建议将Tomcat解压至专用目录(如/opt/tomcat),避免与其他应用混淆。为提升安全性,需创建专用系统用户(如tomcat)和组(如tomcat),并将Tomcat目录所有权赋予该用户(sudo chown -R tomcat:tomcat /opt/tomcat)。同时,需调整目录权限:conf(配置文件)、logs(日志)、temp(临时文件)目录设置为755,webapps(应用部署目录)设置为755,确保Tomcat用户有足够权限运行但无多余权限。
3. Java环境配置
Tomcat需要Java环境才能运行,需正确设置JAVA_HOME环境变量(指向JDK安装路径,如/usr/lib/jvm/default-java)。可通过编辑/etc/profile.d/tomcat.sh(全局)或~/.bashrc(用户级)文件添加export JAVA_HOME=/usr/lib/jvm/default-java,并执行source命令使配置生效。此外,建议在Tomcat的setenv.sh(位于bin目录)中设置JVM参数(如-Xms512M -Xmx1024M调整堆内存),而非直接修改catalina.sh。
4. systemd服务管理
为确保Tomcat随系统启动自动运行,需创建systemd服务文件(/etc/systemd/system/tomcat.service)。文件内容需包含User=tomcat、Group=tomcat(以专用用户运行)、Environment(设置JAVA_HOME、CATALINA_HOME等变量)、ExecStart(启动命令)、ExecStop(停止命令)及Restart=always(崩溃后自动重启)。创建后执行sudo systemctl daemon-reload重新加载配置,再通过sudo systemctl start tomcat启动服务,sudo systemctl enable tomcat设置开机自启。
5. 安全配置强化
server.xml(conf目录),将HTTP连接器端口从8080改为其他端口(如8081),避免暴露默认端口;若需HTTPS,可配置SSL连接器(SSLEnabled="true")。tomcat-users.xml(conf目录),添加具有manager-gui(管理界面)、admin-gui(管理员)角色的用户,密码需使用强密码(如包含大小写字母、数字和特殊字符),并禁用默认的admin账户。web.xml(conf目录),添加自定义错误页面(如404、500),隐藏Tomcat版本信息,防止攻击者利用版本漏洞发起攻击。sudo ufw allow 8081/tcp),或使用sudo ufw allow 'Tomcat Full'允许HTTP和HTTPS流量。6. 性能优化配置
setenv.sh中设置-Xms(初始堆内存,如512M)、-Xmx(最大堆内存,如1024M),避免频繁GC;可选择垃圾回收器(如-XX:+UseG1GC),提升GC效率。server.xml中调整maxThreads(最大线程数,如200,处理并发请求)、minSpareThreads(最小空闲线程数,如10,保持备用线程)、acceptCount(最大排队请求数,如100,队列满则拒绝请求)、compression="on"(开启响应压缩,减少传输数据量)。7. 应用部署注意事项
webapps目录(如/opt/tomcat/webapps),Tomcat会自动解压并部署。若需部署至特定路径,可修改appBase(Host标签属性)或在WAR文件名中指定上下文路径(如myapp.war对应/myapp)。WEB-INF/lib目录下(而非Tomcat的lib目录),避免影响其他应用;若为全局依赖(如数据库驱动),可放置于Tomcat的lib目录,但需注意版本兼容性。server.xml的Connector标签中添加uriencoding="utf-8",避免中文乱码(如请求参数解析错误)。8. 日志管理配置
Tomcat日志默认存储于logs目录(如catalina.out、localhost.log),需定期清理以避免磁盘空间耗尽。可通过编辑logging.properties(conf目录)配置日志级别(如FINE、INFO)、输出路径(如${catalina.base}/logs/app.log)及日志切割策略(如按天分割),便于后续分析与排查问题。