📘 一、文章简介(摘要)
本文将手把手教你在 Linux 系统中 从源码编译安装 Apache Tomcat,并配置 systemd 服务实现开机自启。
适合想要深入理解 Tomcat 工作原理、优化性能、或自定义构建版本的读者。
✅ 教程特点:
-
兼容 Tomcat 9 / 10 / 10.1
-
含源码编译 + 本地安装 + 服务化管理
-
附完整命令、图示位置与错误排查
-
适合初学者与开发者
🧩 二、为什么要源码安装 Tomcat?
默认的 Tomcat 二进制包已足够大多数项目使用,但源码安装可以让你:
-
✨ 修改底层配置或源码
-
⚙️ 优化性能与编译参数
-
🧠 学习 Web 容器的内部机制
-
💡 掌握企业部署所需的构建技能
⚙️ 三、准备环境与依赖
1️⃣ 安装所需组件
| 组件 | 用途 |
|---|---|
| JDK | Java 编译运行环境 |
| Ant | 构建工具,用于编译源码 |
| Git | 获取源码 |
| APR/OpenSSL | tomcat-native 加速库依赖 |
2️⃣ Ubuntu / Debian 环境配置
sudo dnf update
sudo dnf install -y java-21-openjdk java-21-openjdk-deve ant
3️⃣ 配置环境变量
我们手动指定 JAVA_HOME 环境变量,让 Ant 强制使用 Java 21。
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk
export PATH=$JAVA_HOME/bin:$PATH
echo $JAVA_HOME
java -version
输出应显示为 Java 21。
📦 四、获取 Tomcat 源码
下载源码包(推荐稳定版)
wget https://mirrors.tuna.tsinghua.edu.***/apache/tomcat/tomcat-9/v9.0.111/src/apache-tomcat-9.0.111-src.tar.gz
tar zxvf apache-tomcat-9.0.111-src.tar.gz
cd apache-tomcat-9.0.111-src
🏗️ 五、编译 Tomcat 源码
Tomcat 使用 Apache Ant 进行构建。
ant
默认会在
output或dist目录生成完整的 Tomcat 运行包
🔧 六、部署 Tomcat
1️⃣ 移动安装目录
假设Tomcat编译输出在: /usr/apache-tomcat-9.0.111-src/output/build
Tomcat 可执行脚本应该在类似:
/usr/apache-tomcat-9.0.111-src/output/build/bin/startup.sh
/usr/apache-tomcat-9.0.111-src/output/build/bin/shutdown.sh
为了方便管理,建议移动到 /usr/local/tomcat9
创建 Tomcat 用户(非 root 运行)
mv /usr/apache-tomcat-9.0.111-src/output/build /usr/local/tomcat9
sudo useradd -r -m -U -d /opt/tomcat -s /bin/false tomcat
sudo chown -R tomcat:tomcat /opt/tomcat
2️⃣创建 systemd 服务文件
编辑 /etc/systemd/system/tomcat.service:
vim /etc/systemd/system/tomcat.service
写入以下内容(推荐模板):
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment=JAVA_HOME=/usr/lib/jvm/java-21-openjdk-21.0.8.0.9-1.el8.x86_64
Environment=CATALINA_HOME=/usr/local/tomcat9
Environment=CATALINA_BASE=/usr/local/tomcat9
Environment=CATALINA_PID=/usr/local/tomcat9/temp/tomcat.pid
Environment=JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true"
ExecStart=/usr/local/tomcat9/bin/catalina.sh start
ExecStop=/usr/local/tomcat9/bin/catalina.sh stop
3️⃣加载服务并启动
# 重新加载 systemd 配置
systemctl daemon-reload
# 启动 Tomcat
systemctl start tomcat
# 查看状态
systemctl status tomcat
# 设置开机自启
systemctl enable tomcat
🚀 七、启动与访问测试
编辑防火墙配置,放行8080端口
firewall-cmd --permanent --add-port=8080/tcp
重新载入防火墙配置
#重新载入防火墙配置
firewall-cmd --reload
#显示放行列表
firewall-cmd --list-ports
浏览器访问:http://ip:8080/
http://x.x.x.x:8080/
🧩 七、常见错误与排查
| 问题 | 可能原因 | 解决方法 |
|---|---|---|
curl: (7) Connection refused |
端口未监听或防火墙阻止 | 检查 Tomcat 是否运行,防火墙是否放行 |
BUILD FAILED |
JDK 或 Ant 版本不符 | 升级到 JDK17+,Ant 1.10+ |
Permission denied |
用户权限不足 | 用 tomcat 用户运行 |