Tomcat 自动化脚本安装方案

以下是 Tomcat 自动化脚本安装方案,支持多个版本和安装方式:


📦 Tomcat 一键安装脚本

脚本功能

  • ✅ 支持 Tomcat 8/9/10 版本选择

  • ✅ 自动安装 JDK 依赖

  • ✅ 创建 systemd 服务管理

  • ✅ 配置用户认证和安全设置

  • ✅ 支持 SSL/TLS 配置

  • ✅ 自动防火墙配置


🔧 完整安装脚本

bash 复制代码
#!/bin/bash
​
# Tomcat 自动安装脚本
# 支持: CentOS/RHEL/Ubuntu/Debian/Amazon Linux
​
set -e
​
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
​
# 输出函数
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
log_debug() { echo -e "${BLUE}[DEBUG]${NC} $1"; }
​
# 变量配置
TOMCAT_VERSION="9"
TOMCAT_MAJOR_VERSION="9"
TOMCAT_FULL_VERSION="9.0.85"
INSTALL_DIR="/opt"
TOMCAT_USER="tomcat"
TOMCAT_GROUP="tomcat"
​
# 检测系统
detect_os() {
    if [ -f /etc/os-release ]; then
        . /etc/os-release
        OS=$ID
        VER=$VERSION_ID
    else
        OS=$(uname -s)
        VER=$(uname -r)
    fi
    log_info "检测到操作系统: $OS $VER"
}
​
# 安装JDK
install_java() {
    log_info "检查Java环境..."
    
    if java -version &>/dev/null; then
        log_info "Java 已安装: $(java -version 2>&1 | head -n1)"
        return 0
    fi
    
    log_info "安装 OpenJDK 8..."
    case $OS in
        ubuntu|debian)
            apt-get update
            apt-get install -y openjdk-8-jdk
            ;;
        centos|rhel|amzn|fedora)
            if command -v dnf >/dev/null 2>&1; then
                dnf install -y java-1.8.0-openjdk-devel
            else
                yum install -y java-1.8.0-openjdk-devel
            fi
            ;;
    esac
    
    # 设置JAVA_HOME
    JAVA_HOME=$(readlink -f /usr/bin/java | sed 's:/bin/java::')
    echo "export JAVA_HOME=$JAVA_HOME" >> /etc/profile.d/tomcat.sh
    source /etc/profile.d/tomcat.sh
    
    log_info "Java 安装完成: $(java -version 2>&1 | head -n1)"
}
​
# 创建Tomcat用户
create_tomcat_user() {
    log_info "创建Tomcat用户和组..."
    
    if id "$TOMCAT_USER" &>/dev/null; then
        log_info "用户 $TOMCAT_USER 已存在"
    else
        groupadd $TOMCAT_GROUP
        useradd -s /bin/false -g $TOMCAT_GROUP -d $INSTALL_DIR/tomcat $TOMCAT_USER
    fi
}
​
# 下载安装Tomcat
install_tomcat() {
    log_info "安装 Tomcat $TOMCAT_FULL_VERSION..."
    
    # 选择版本
    case $TOMCAT_VERSION in
        8)
            TOMCAT_MAJOR_VERSION="8"
            TOMCAT_FULL_VERSION="8.5.98"
            ;;
        9)
            TOMCAT_MAJOR_VERSION="9"
            TOMCAT_FULL_VERSION="9.0.85"
            ;;
        10)
            TOMCAT_MAJOR_VERSION="10"
            TOMCAT_FULL_VERSION="10.1.20"
            ;;
        *)
            log_error "不支持的Tomcat版本: $TOMCAT_VERSION"
            exit 1
            ;;
    esac
    
    # 下载Tomcat
    cd /tmp
    TOMCAT_URL="https://archive.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR_VERSION/v$TOMCAT_FULL_VERSION/bin/apache-tomcat-$TOMCAT_FULL_VERSION.tar.gz"
    
    log_info "下载 Tomcat $TOMCAT_FULL_VERSION..."
    if command -v wget >/dev/null 2>&1; then
        wget $TOMCAT_URL
    else
        curl -O $TOMCAT_URL
    fi
    
    # 停止现有Tomcat服务
    if systemctl is-active --quiet tomcat; then
        systemctl stop tomcat
    fi
    
    # 安装Tomcat
    tar -xzf apache-tomcat-$TOMCAT_FULL_VERSION.tar.gz
    mv apache-tomcat-$TOMCAT_FULL_VERSION $INSTALL_DIR/tomcat
    ln -sf $INSTALL_DIR/tomcat $INSTALL_DIR/tomcat/latest
    
    # 设置权限
    chown -R $TOMCAT_USER:$TOMCAT_GROUP $INSTALL_DIR/tomcat
    chmod +x $INSTALL_DIR/tomcat/bin/*.sh
    
    # 清理
    rm -f apache-tomcat-$TOMCAT_FULL_VERSION.tar.gz
}
​
# 配置Tomcat
configure_tomcat() {
    log_info "配置Tomcat..."
    
    local TOMCAT_HOME="$INSTALL_DIR/tomcat"
    local TOMCAT_CONF="$TOMCAT_HOME/conf"
    
    # 备份原始配置
    cp $TOMCAT_CONF/server.xml $TOMCAT_CONF/server.xml.backup
    cp $TOMCAT_CONF/tomcat-users.xml $TOMCAT_CONF/tomcat-users.xml.backup
    
    # 配置server.xml - 优化连接器
     sed -i 's|<Connector port="8080" protocol="HTTP/1.1"|<Connector port="8080" protocol="HTTP/1.1"\n               maxThreads="200"\n               minSpareThreads="10"\n               maxConnections="10000"\n               compression="on"\n               compressionMinSize="1024"\n               compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"|' $TOMCAT_CONF/server.xml
        
    # 配置AJP连接器(可选)
    sed -i 's|<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />|<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" secretRequired="false" />|' $TOMCAT_CONF/server.xml
    
    # 创建Tomcat用户管理
    cat > $TOMCAT_CONF/tomcat-users.xml << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">
    
    <role rolename="manager-gui"/>
    <role rolename="manager-script"/>
    <role rolename="manager-jmx"/>
    <role rolename="manager-status"/>
    <role rolename="admin-gui"/>
    <role rolename="admin-script"/>
    
    <user username="admin" password="tomcat@admin123" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script"/>
</tomcat-users>
EOF
​
    # 配置管理界面访问限制
    if [ ! -f $TOMCAT_HOME/webapps/manager/META-INF/context.xml ]; then
        mkdir -p $TOMCAT_HOME/webapps/manager/META-INF
    fi
    
    cat > $TOMCAT_HOME/webapps/manager/META-INF/context.xml << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<Context antiResourceLocking="false" privileged="true" >
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
</Context>
EOF
​
    # 创建setenv.sh配置内存参数
    cat > $TOMCAT_HOME/bin/setenv.sh << 'EOF'
#!/bin/bash
​
# Java 内存配置
export JAVA_OPTS="$JAVA_OPTS -Xms512m -Xmx1024m -XX:MaxMetaspaceSize=256m"
​
# GC 配置
#export JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -XX:+DisableExplicitGC"
export JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC "
​
# 编码配置
export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"
​
# 时区配置
export JAVA_OPTS="$JAVA_OPTS -Duser.timezone=Asia/Shanghai"
​
# 安全配置
export JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom"
EOF
​
    chmod +x $TOMCAT_HOME/bin/setenv.sh
    chown $TOMCAT_USER:$TOMCAT_GROUP $TOMCAT_HOME/bin/setenv.sh
}
​
# 创建systemd服务
create_systemd_service() {
    log_info "创建systemd服务..."
    
    cat > /etc/systemd/system/tomcat.service << EOF
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
​
[Service]
Type=forking
User=$TOMCAT_USER
Group=$TOMCAT_GROUP
​
Environment="JAVA_HOME=$JAVA_HOME"
Environment="CATALINA_PID=$INSTALL_DIR/tomcat/temp/tomcat.pid"
Environment="CATALINA_HOME=$INSTALL_DIR/tomcat"
Environment="CATALINA_BASE=$INSTALL_DIR/tomcat"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
​
ExecStart=$INSTALL_DIR/tomcat/bin/startup.sh
ExecStop=$INSTALL_DIR/tomcat/bin/shutdown.sh
​
RestartSec=10
Restart=always
​
[Install]
WantedBy=multi-user.target
EOF
​
    systemctl daemon-reload
}
​
# 配置防火墙
configure_firewall() {
    log_info "配置防火墙..."
    
    if command -v ufw >/dev/null 2>&1; then
        ufw allow 8080/tcp
        ufw reload
    elif command -v firewall-cmd >/dev/null 2>&1; then
        firewall-cmd --permanent --add-port=8080/tcp
        firewall-cmd --reload
    else
        log_warn "未找到防火墙工具,请手动开放8080端口"
    fi
}
​
# 配置SSL(可选)
configure_ssl() {
    log_info "配置SSL/TLS..."
    
    local TOMCAT_CONF="$INSTALL_DIR/tomcat/conf"
    
    # 生成自签名证书(生产环境应使用正式证书)
    if [ ! -f $TOMCAT_CONF/keystore.jks ]; then
        keytool -genkey -alias tomcat -keyalg RSA -keysize 2048 \
                -keystore $TOMCAT_CONF/keystore.jks \
                -keypass changeit -storepass changeit \
                -dname "CN=localhost, OU=IT, O=Company, L=City, ST=State, C=CN" \
                -validity 3650
    fi
    
    chown $TOMCAT_USER:$TOMCAT_GROUP $TOMCAT_CONF/keystore.jks
    
    # 配置SSL连接器
    if ! grep -q "SSL HTTP/1.1 Connector" $TOMCAT_CONF/server.xml; then
        sed -i '/<!-- Define an SSL HTTP\/1.1 Connector on port 8443 -->/,/<!--/ s/<!--//' $TOMCAT_CONF/server.xml
        sed -i '/<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"/,/\/>/ s/<!--//' $TOMCAT_CONF/server.xml
    fi
}
​
# 创建测试应用
create_test_app() {
    log_info "创建测试应用..."
    
    local WEBAPPS_DIR="$INSTALL_DIR/tomcat/webapps"
    
    # 创建测试应用目录
    mkdir -p $WEBAPPS_DIR/test/WEB-INF/classes
    mkdir -p $WEBAPPS_DIR/test/WEB-INF/lib
    
    # 创建web.xml
    cat > $WEBAPPS_DIR/test/WEB-INF/web.xml << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
                             http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    
    <display-name>Tomcat Test Application</display-name>
    <description>
        Test application for Tomcat installation
    </description>
</web-app>
EOF
​
    # 创建测试页面
    cat > $WEBAPPS_DIR/test/index.jsp << 'EOF'
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="java.util.*, java.text.*" %>
<!DOCTYPE html>
<html>
<head>
    <title>Tomcat 测试页面</title>
    <meta charset="UTF-8">
    <style>
        body { font-family: Arial, sans-serif; margin: 40px; }
        .container { max-width: 800px; margin: 0 auto; }
        .success { color: #28a745; }
        .info { background: #d1ecf1; padding: 15px; border-radius: 5px; }
    </style>
</head>
<body>
    <div class="container">
        <h1 class="success">🎉 Tomcat 安装成功!</h1>
        
        <div class="info">
            <h2>服务器信息</h2>
            <p><strong>时间:</strong> <%= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) %></p>
            <p><strong>Java 版本:</strong> <%= System.getProperty("java.version") %></p>
            <p><strong>Tomcat 版本:</strong> <%= application.getServerInfo() %></p>
            <p><strong>系统架构:</strong> <%= System.getProperty("os.arch") %></p>
            <p><strong>操作系统:</strong> <%= System.getProperty("os.name") %> <%= System.getProperty("os.version") %></p>
        </div>
        
        <h2>管理界面</h2>
        <ul>
            <li><a href="/manager/html">Manager App</a> - 应用管理</li>
            <li><a href="/host-manager/html">Host Manager</a> - 虚拟主机管理</li>
        </ul>
        
        <h2>有用的链接</h2>
        <ul>
            <li><a href="https://tomcat.apache.org/">Apache Tomcat 官网</a></li>
            <li><a href="https://tomcat.apache.org/tomcat-${TOMCAT_MAJOR_VERSION}-doc/index.html">Tomcat ${TOMCAT_MAJOR_VERSION} 文档</a></li>
        </ul>
    </div>
</body>
</html>
EOF
​
    chown -R $TOMCAT_USER:$TOMCAT_GROUP $WEBAPPS_DIR/test
}
​
# 启动Tomcat服务
start_tomcat() {
    log_info "启动Tomcat服务..."
    
    systemctl enable tomcat
    systemctl start tomcat
    
    # 等待服务启动
    sleep 10
    
    if systemctl is-active --quiet tomcat; then
        log_info "Tomcat 启动成功"
    else
        log_error "Tomcat 启动失败"
        systemctl status tomcat
        journalctl -u tomcat -n 50 --no-pager
        exit 1
    fi
}
​
# 验证安装
verify_installation() {
    log_info "验证Tomcat安装..."
    
    # 检查进程
    if pgrep -f tomcat >/dev/null; then
        log_info "Tomcat 进程运行正常"
    else
        log_error "未找到Tomcat进程"
        exit 1
    fi
    
    # 检查端口监听
    if netstat -tulpn | grep -q ':8080'; then
        log_info "Tomcat 正在监听 8080 端口"
    else
        log_error "Tomcat 未在 8080 端口监听"
        exit 1
    fi
    
    # 测试HTTP访问
    if command -v curl >/dev/null 2>&1; then
        if curl -s http://localhost:8080 >/dev/null; then
            log_info "Tomcat HTTP 服务测试成功"
        else
            log_error "Tomcat HTTP 服务测试失败"
        fi
        
        # 测试测试应用
        if curl -s http://localhost:8080/test/ | grep -q "安装成功"; then
            log_info "测试应用访问成功"
        fi
    fi
    
    log_info "安装完成!"
    log_info "Tomcat 主页: http://$(curl -s ifconfig.me):8080"
    log_info "测试应用: http://$(curl -s ifconfig.me):8080/test/"
    log_info "管理界面: http://$(curl -s ifconfig.me):8080/manager/html"
    log_info "服务管理: systemctl {start|stop|restart|status} tomcat"
    log_info "日志文件: tail -f $INSTALL_DIR/tomcat/logs/catalina.out"
}
​
# 主函数
main() {
    log_info "开始安装 Tomcat..."
    
    # 检查root权限
    if [ "$EUID" -ne 0 ]; then
        log_error "请使用root权限运行此脚本"
        exit 1
    fi
    
    # 选择Tomcat版本
    echo "请选择Tomcat版本:"
    echo "1) Tomcat 8"
    echo "2) Tomcat 9 (推荐)"
    echo "3) Tomcat 10"
    read -p "请输入选择 [1-3]: " version_choice
    
    case $version_choice in
        1) TOMCAT_VERSION="8" ;;
        2) TOMCAT_VERSION="9" ;;
        3) TOMCAT_VERSION="10" ;;
        *) log_info "使用默认版本: Tomcat 9" ;;
    esac
    
    detect_os
    install_java
    create_tomcat_user
    install_tomcat
    configure_tomcat
    create_systemd_service
    configure_firewall
    
    # 询问是否配置SSL
    read -p "是否配置SSL/TLS? (y/N): " ssl_choice
    if [[ $ssl_choice =~ ^[Yy]$ ]]; then
        configure_ssl
    fi
    
    create_test_app
    start_tomcat
    verify_installation
}
​
# 执行主函数
main "$@"

安装结果

bash 复制代码
[root@localhost soft]# sh Tomcat_bash.sh
[INFO] 开始安装 Tomcat...
请选择Tomcat版本:
1) Tomcat 8
2) Tomcat 9 (推荐)
3) Tomcat 10
请输入选择 [1-3]: 2
[INFO] 检测到操作系统: centos 7
[INFO] 检查Java环境...
[INFO] Java 已安装: openjdk version "1.8.0_412"
[INFO] 创建Tomcat用户和组...
[INFO] 用户 tomcat 已存在
[INFO] 安装 Tomcat 9.0.85...
[INFO] 配置Tomcat...
[INFO] 创建systemd服务...
[INFO] 配置防火墙...
Warning: ALREADY_ENABLED: 8080:tcp
success
success
是否配置SSL/TLS? (y/n): n
[INFO] 创建测试应用...
[INFO] 启动Tomcat服务...
[INFO] Tomcat 启动成功
[INFO] 验证Tomcat安装...
[INFO] Tomcat 进程运行正常
[INFO] Tomcat 正在监听 8080 端口
[INFO] Tomcat HTTP 服务测试成功
[INFO] 测试应用访问成功
[INFO] 安装完成!
[INFO] Tomcat 主页: http://192.168.198.101:8080
[INFO] 测试应用: http://192.168.198.101:8080/test/
[INFO] 管理界面: http://192.168.198.101:8080/manager/html
[INFO] 服务管理: systemctl {start|stop|restart|status} tomcat
[INFO] 日志文件: tail -f /opt/tomcat/logs/catalina.out

🚀 快速安装方式

方法1:一键脚本安装

bash 复制代码
# 下载脚本
wget -O install-tomcat.sh https://raw.githubusercontent.com/example/install-tomcat/master/install-tomcat.sh
​
# 添加执行权限
chmod +x install-tomcat.sh
​
# 运行安装
sudo ./install-tomcat.sh

方法2:分步快速安装

bash 复制代码
# 1. 安装JDK
sudo apt update && sudo apt install -y openjdk-8-jdk
​
# 2. 下载Tomcat
cd /tmp
wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.85/bin/apache-tomcat-9.0.85.tar.gz
​
# 3. 安装Tomcat
sudo tar -xzf apache-tomcat-9.0.85.tar.gz -C /opt
sudo mv /opt/apache-tomcat-9.0.85 /opt/tomcat
sudo useradd -r -s /bin/false tomcat
sudo chown -R tomcat:tomcat /opt/tomcat
​
# 4. 启动Tomcat
/opt/tomcat/bin/startup.sh

⚙️ 常用管理命令

bash 复制代码
# 服务管理
sudo systemctl start tomcat      # 启动
sudo systemctl stop tomcat       # 停止
sudo systemctl restart tomcat    # 重启
sudo systemctl status tomcat     # 查看状态
sudo systemctl enable tomcat     # 设置开机自启
​
# 日志查看
sudo tail -f /opt/tomcat/logs/catalina.out        # 主日志
sudo tail -f /opt/tomcat/logs/localhost_access_log # 访问日志
​
# 应用部署
sudo cp myapp.war /opt/tomcat/webapps/           # 部署WAR包
sudo systemctl restart tomcat                    # 重启生效

📁 重要目录和文件

bash 复制代码
/opt/tomcat/                    # Tomcat安装目录
├── bin/                        # 执行脚本
├── conf/                       # 配置文件
│   ├── server.xml             # 主配置文件
│   ├── tomcat-users.xml       # 用户配置
│   └── web.xml                # 全局web配置
├── logs/                       # 日志文件
├── webapps/                    # 应用部署目录
├── work/                       # 工作目录
└── temp/                       # 临时文件

🔧 常用配置修改

修改服务端口

bash 复制代码
sudo vi /opt/tomcat/conf/server.xml
# 修改 Connector port="8080" 为其他端口

配置JVM参数

bash 复制代码
sudo vi /opt/tomcat/bin/setenv.sh
# 添加: export JAVA_OPTS="$JAVA_OPTS -Xms1024m -Xmx2048m"

添加数据库连接池

conf/server.xml<GlobalNamingResources> 部分添加:

bash 复制代码
<Resource name="jdbc/myDB" 
          auth="Container"
          type="javax.sql.DataSource"
          driverClassName="com.mysql.cj.jdbc.Driver"
          url="jdbc:mysql://localhost:3306/mydb"
          username="dbuser"
          password="dbpass"
          maxTotal="100"
          maxIdle="30"
          maxWaitMillis="10000"/>

🔍 安装验证

bash 复制代码
# 检查服务状态
sudo systemctl status tomcat
​
# 检查端口监听
netstat -tulpn | grep 8080
​
# 测试Web访问
curl -I http://localhost:8080
​
# 查看版本信息
/opt/tomcat/bin/version.sh
​
# 检查应用列表
curl -s http://localhost:8080/manager/text/list | head -n 10

安装问题

bash 复制代码
#日志:
Conflicting collector combinations in option list; please refer to the release notes for the combinations allowed
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
#解决: GC子系统最多只能选择一种垃圾收集策略。  注销GC配置 或 只能选择一种方式
​
# GC 配置 
#export JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -XX:+DisableExplicitGC" 
或
export JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC " 
复制代码
这个脚本提供了完整的Tomcat安装方案,包括安全配置、性能优化和服务管理,适合生产环境使用!
相关推荐
夫唯不争,故无尤也3 小时前
Tomcat 内嵌启动时找不到 Web 应用的路径
java·前端·tomcat
gaoshan123456789103 小时前
‌MyBatis-Plus 的 LambdaQueryWrapper 可以实现 OR 条件查询‌
java·tomcat·mybatis
qinxue7223 小时前
Jenkins自动化配置--CICD流水线
运维·自动化·jenkins
wanhengidc4 小时前
什么是站群服务器
运维·服务器·网络·游戏·智能手机
琦琦琦baby5 小时前
VRRP技术重点总结
运维·网络·智能路由器·vrrp
筑梦之路6 小时前
深入linux的审计服务auditd —— 筑梦之路
linux·运维·服务器
陈说技术6 小时前
服务器CPU达到100%解决思路
运维·服务器
hi_link6 小时前
centos系统将/home分区的空间分配给/
linux·运维·centos
应用市场6 小时前
Linux驱动开发原理详解:从入门到实践
linux·运维·驱动开发