You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Tomcat打包为RPM:实现安装、WAR部署与服务启动?

构建包含Tomcat安装、WAR部署与自动启动的RPM包

嘿,我来帮你搞定这个Tomcat RPM打包的需求!要实现安装时自动部署WAR并启动Tomcat,核心是写好RPM的spec配置文件,下面一步步给你拆解:

1. 准备RPM构建环境

首先得把打包工具装上,以CentOS/RHEL为例:

sudo yum install rpm-build rpmdevtools -y
# 初始化RPM构建目录结构
rpmdev-setuptree

执行完rpmdev-setuptree后,会在你的用户目录下生成~/rpmbuild目录,里面包含SOURCES(放资源文件)、SPECS(放spec配置)等子目录。

2. 准备打包资源

  • 下载你需要的Tomcat tar包(比如apache-tomcat-9.0.80.tar.gz),放到~/rpmbuild/SOURCES目录
  • 把要部署的WAR文件(比如myapp.war)也放到~/rpmbuild/SOURCES目录
  • 提前写好Tomcat的systemd服务配置文件tomcat.service(内容后面会给),同样放到~/rpmbuild/SOURCES

3. 编写核心的spec配置文件

在~/rpmbuild/SPECS目录创建tomcat-app.spec文件,内容如下,我会给你逐段解释:

Summary: Apache Tomcat with pre-deployed myapp WAR
Name: tomcat-app
Version: 9.0.80
Release: 1%{?dist}
License: Apache License 2.0
URL: https://tomcat.apache.org/
Requires: java-1.8.0-openjdk >= 1.8.0.302
Source0: apache-tomcat-%{version}.tar.gz
Source1: myapp.war
Source2: tomcat.service

# 预安装脚本:创建Tomcat用户组
%pre
if ! getent group tomcat >/dev/null; then
    groupadd -r tomcat
fi
if ! getent passwd tomcat >/dev/null; then
    useradd -r -g tomcat -d /opt/tomcat -s /sbin/nologin -c "Tomcat Service User" tomcat
fi
exit 0

# 解压Tomcat源码包
%prep
%setup -q -n apache-tomcat-%{version}

# 安装阶段:复制文件到构建根目录
%install
# 创建Tomcat安装目录
mkdir -p %{buildroot}/opt/tomcat
# 复制Tomcat所有文件到安装目录
cp -r * %{buildroot}/opt/tomcat/
# 复制WAR文件到webapps目录
cp %{SOURCE1} %{buildroot}/opt/tomcat/webapps/
# 创建systemd服务文件目录并复制服务配置
mkdir -p %{buildroot}/usr/lib/systemd/system
cp %{SOURCE2} %{buildroot}/usr/lib/systemd/system/tomcat.service
# 创建Tomcat运行时PID目录
mkdir -p %{buildroot}/var/run/tomcat
# 设置权限,让tomcat用户拥有所有相关目录
chown -R tomcat:tomcat %{buildroot}/opt/tomcat %{buildroot}/var/run/tomcat

# 定义要打包的文件及权限
%files
/opt/tomcat
/usr/lib/systemd/system/tomcat.service
%attr(0755, tomcat, tomcat) /var/run/tomcat

# 安装后脚本:重载systemd并启动+启用Tomcat服务
%post
systemctl daemon-reload
systemctl enable tomcat --now
exit 0

# 卸载前脚本:停止Tomcat服务
%preun
if [ $1 -eq 0 ]; then
    systemctl stop tomcat
    systemctl disable tomcat
fi
exit 0

# 卸载后脚本:清理Tomcat用户和目录(可选)
%postun
if [ $1 -eq 0 ]; then
    userdel tomcat
    groupdel tomcat
    rm -rf /opt/tomcat /var/run/tomcat
fi
exit 0

关键部分说明:

  • Requires:指定依赖的Java版本,确保安装RPM时会自动安装Java环境
  • %pre:预安装时创建Tomcat专用用户,避免用root运行服务
  • %install:把Tomcat、WAR、systemd服务文件都放到对应目录,设置正确权限
  • %post:安装完成后自动启动并启用Tomcat服务,确保服务器开机自启
  • %preun/%postun:卸载时停止服务并清理资源(可选,根据需求调整)

另外,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/jre-1.8.0-openjdk"
Environment="CATALINA_PID=/var/run/tomcat/tomcat.pid"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_BASE=/opt/tomcat"
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target

4. 构建RPM包

执行下面的命令开始构建:

rpmbuild -ba ~/rpmbuild/SPECS/tomcat-app.spec

构建成功后,你会在~/rpmbuild/RPMS/noarch/目录下找到生成的RPM包(比如tomcat-app-9.0.80-1.el8.noarch.rpm)。

5. 测试安装

用root权限安装测试:

sudo rpm -ivh ~/rpmbuild/RPMS/noarch/tomcat-app-9.0.80-1.el8.noarch.rpm

安装完成后,可以用systemctl status tomcat检查服务状态,或者访问http://localhost:8080/myapp验证WAR是否成功部署。

注意事项:

  • 如果你用的是Tomcat 10+,记得调整Java依赖版本(比如java-11-openjdk)
  • 根据你的实际需求修改WAR文件名、Tomcat版本、JVM参数等配置
  • 如果需要自定义Tomcat配置(比如server.xml),可以把修改后的配置文件放到SOURCES目录,在%install阶段覆盖默认配置

内容的提问来源于stack exchange,提问作者Kiran Kumar Reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:20:55