Debian 上 Tomcat 的更新与升级指南
一 升级策略与准备
- 明确目标:区分小版本更新(如 9.0.x → 9.0.y,通常配置与 API 兼容)与跨大版本升级(如 8.5 → 9.0,需评估应用兼容性)。
- 兼容性核对:确认 Java 版本与 Tomcat 版本匹配,必要时先升级 JDK。
- 备份关键数据:完整备份 $CATALINA_HOME/conf(如 server.xml、context.xml、web.xml)、webapps、work/Catalina、以及自定义库与应用配置;记录当前版本与启动参数,便于回滚。
- 变更窗口与回滚预案:选择低峰时段,保留旧目录与包,准备一键回滚脚本或快照。
二 使用官方二进制包原地升级(通用且可控)
- 步骤概览:
- 备份:
sudo cp -r /opt/tomcat /opt/tomcat_backup_$(date +%F)
- 停止服务:
sudo systemctl stop tomcat
- 下载并解压新版本到同级目录(示例使用 Tomcat 9):
wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.76/bin/apache-tomcat-9.0.76.tar.gz
sudo tar -xvf apache-tomcat-9.0.76.tar.gz -C /opt/tomcat --strip-components=1
- 迁移配置与数据(避免覆盖新版的 bin/ 与 lib/):
sudo cp -r /opt/tomcat_backup_$(date +%F)/conf /opt/tomcat/
sudo cp -r /opt/tomcat_backup_$(date +%F)/webapps /opt/tomcat/
sudo cp -r /opt/tomcat_backup_$(date +%F)/work /opt/tomcat/
sudo cp -r /opt/tomcat_backup_$(date +%F)/logs /opt/tomcat/ # 可选:保留历史日志
- 使用符号链接便于下次升级(可选):
sudo ln -sfn /opt/tomcat /opt/tomcat/latest
- 更新 systemd 服务文件中的 CATALINA_HOME/CATALINA_BASE 指向新目录(如使用符号链接则指向 /opt/tomcat/latest),然后重载并启动:
sudo systemctl daemon-reload
sudo systemctl start tomcat
- 验证:
curl -I http://127.0.0.1:8080/
tail -n50 /opt/tomcat/logs/catalina.out
- 要点:保持 $CATALINA_BASE 不变以沿用数据与部署;仅替换 bin/ 与 lib/ 可能引入不兼容,推荐整目录替换或使用符号链接方案。
三 使用 APT 包管理器的原地更新(适合 Debian 官方仓库)
- 步骤概览:
- 更新索引并查看可用版本:
sudo apt update
apt policy tomcat9
- 执行升级:
sudo apt upgrade tomcat9
- 重启服务:
sudo systemctl restart tomcat9
- 验证:
sudo systemctl status tomcat9
tail -n50 /var/log/tomcat9/catalina.out
- 说明:仓库版本通常较保守,适合稳定环境;如需新特性或安全补丁更快,可考虑官方二进制包或第三方仓库(注意来源可信与 GPG 校验)。
四 跨大版本升级要点与回滚
- 跨大版本(如 8.5 → 9.0)建议:
- 在测试环境验证所有应用的 Servlet/JSP/EL/WebSocket 等 API 兼容性;
- 逐项检查 server.xml 中 连接器、Realm、Valve、Host/Context 等配置差异;
- 清理 work/ 与 temp/,避免类加载冲突;
- 逐步迁移,先双写/灰度,再切换生产。
- 快速回滚:
- 二进制包方案:停止服务,恢复备份目录(或切换符号链接),重载并启动;
sudo systemctl stop tomcat
sudo rm -rf /opt/tomcat && sudo mv /opt/tomcat_backup_$(date +%F) /opt/tomcat
sudo systemctl daemon-reload && sudo systemctl start tomcat
- APT 方案:
sudo apt install --reinstall tomcat9=<旧版本号>
sudo systemctl restart tomcat9。