Tomcat安装部署

一、Tomcat 各版本 - JDK 版本

Tomcat 版本 最低要求 JDK 推荐生产使用 JDK(LTS)
Tomcat 7.x JDK 6 JDK 7、JDK 8
Tomcat 8.x JDK 7 JDK 8
Tomcat 8.5.x JDK 8 JDK 8、JDK 11
Tomcat 9.x JDK 8 JDK 8、JDK 11
Tomcat 10.0.x JDK 8 JDK 11、JDK 17
Tomcat 10.1.x JDK 11 JDK 11、JDK 17、JDK 21
Tomcat 11.x JDK 17 JDK 17、JDK 21

二、执行脚本安装对应的版本

bash 复制代码
#!/bin/bash

# 直接执行,自动带Oracle协议Cookie,无需手动勾选
# wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" https://download.oracle.com/otn/java/jdk/11.0.14+9/020b50ac6305401a8396030689754244/jdk-11.0.14_linux-x64_bin.tar.gz

# wget 下载(推荐,大部分Linux系统自带)
# wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.59/bin/apache-tomcat-9.0.59.tar.gz
# 若没有wget,用curl下载
# curl -O https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.59/bin/apache-tomcat-9.0.59.tar.gz

# ====================== 【唯一需要修改的配置区】=====================
DIR=$(cd $(dirname $0); pwd)  # 固定脚本所在目录(原pwd易因执行路径出错)
JDK_FILE="jdk-11.0.14_linux-x64_bin.tar.gz"  # 你的JDK压缩包名(支持8/11/17/21+)
TOMCAT_FILE="apache-tomcat-9.0.59.tar.gz"    # 你的Tomcat压缩包名
JDK_DIR="/usr/local"                         # JDK安装根目录
TOMCAT_DIR="/usr/local"                      # Tomcat安装根目录
TOMCAT_USER="tomcat"                         # Tomcat运行用户
# ===================================================================

# 彩色输出函数
color() {
    RES_COL=60
    MOVE_TO_COL="echo -en \\033[${RES_COL}G"
    SETCOLOR_SUCCESS="echo -en \\033[1;32m"
    SETCOLOR_FAILURE="echo -en \\033[1;31m"
    SETCOLOR_WARNING="echo -en \\033[1;33m"
    SETCOLOR_NORMAL="echo -en \E[0m"
    echo -n "$2" && $MOVE_TO_COL
    echo -n "["
    if [ $1 = "success" -o $1 = "0" ];then
        ${SETCOLOR_SUCCESS}
        echo -n $"  OK  "
    elif [ $1 = "failure" -o $1 = "1" ];then
        ${SETCOLOR_FAILURE}
        echo -n $"FAILED"
    else
        ${SETCOLOR_WARNING}
        echo -n $"WARNING"
    fi
    ${SETCOLOR_NORMAL}
    echo -n "]"
    echo
}

# 安装JDK(核心:全版本适配)
install_jdk() {
    echo -e "\033[1;33m========== 开始安装JDK ==========\033[0m"
    # 校验安装包是否存在
    if [ ! -f "$DIR/$JDK_FILE" ];then
        color 1 "$JDK_FILE 不存在,请将安装包放在脚本同目录!"
        exit 1
    fi
    # 校验是否已安装JDK
    if [ -d $JDK_DIR/jdk ];then
        color 1 "JDK已安装($JDK_DIR/jdk),无需重复安装!"
        return 0  # 已安装则跳过,继续安装Tomcat
    fi
    # 确保安装目录存在
    mkdir -pv $JDK_DIR &> /dev/null || { color 1 "创建$JDK_DIR目录失败!"; exit 1; }

    # 解压JDK并创建软链接(强制解压,覆盖同名临时文件)
    tar zxf $DIR/$JDK_FILE -C $JDK_DIR --overwrite &> /dev/null || { color 1 "JDK解压失败!"; exit 1; }
    cd $JDK_DIR && rm -f jdk && ln -s jdk* jdk &> /dev/null || { color 1 "创建JDK软链接失败!"; exit 1; }

    # 动态生成JDK环境变量(适配JDK8/11+)
    cat > /etc/profile.d/jdk.sh <<EOF
#!/bin/bash
# 自动适配JDK8/11/17/21+,无需手动修改
export JAVA_HOME=${JDK_DIR}/jdk
export PATH=\$JAVA_HOME/bin:\$PATH
EOF

    # 适配JDK8(添加JRE_HOME和CLASSPATH)
    if [ -d "${JDK_DIR}/jdk/jre" ];then
        cat >> /etc/profile.d/jdk.sh <<EOF
export JRE_HOME=\$JAVA_HOME/jre
export CLASSPATH=.:\$JAVA_HOME/lib:\$JRE_HOME/lib
EOF
    fi

    # 生效环境变量并校验安装
    chmod +x /etc/profile.d/jdk.sh
    source /etc/profile.d/jdk.sh &> /dev/null
    java -version &> /dev/null && color 0 "JDK安装完成" || { color 1 "JDK安装失败(java -version执行出错)"; exit 1; }
}

# 安装Tomcat(优化服务配置、权限)
install_tomcat() {
    echo -e "\033[1;33m========== 开始安装Tomcat ==========\033[0m"
    # 校验安装包是否存在
    if [ ! -f "$DIR/$TOMCAT_FILE" ];then
        color 1 "$TOMCAT_FILE 不存在,请将安装包放在脚本同目录!"
        exit 1
    fi
    # 校验是否已安装Tomcat
    if [ -d $TOMCAT_DIR/tomcat ];then
        color 1 "Tomcat已安装($TOMCAT_DIR/tomcat),无需重复安装!"
        exit 1
    fi
    # 确保安装目录存在
    mkdir -pv $TOMCAT_DIR &> /dev/null || { color 1 "创建$TOMCAT_DIR目录失败!"; exit 1; }

    # 解压Tomcat并创建软链接
    tar zxf $DIR/$TOMCAT_FILE -C $TOMCAT_DIR --overwrite &> /dev/null || { color 1 "Tomcat解压失败!"; exit 1; }
    cd $TOMCAT_DIR && rm -f tomcat && ln -s apache-tomcat-*/ tomcat &> /dev/null || { color 1 "创建Tomcat软链接失败!"; exit 1; }

    # 生成Tomcat环境变量
    cat > /etc/profile.d/tomcat.sh <<EOF
#!/bin/bash
export TOMCAT_HOME=${TOMCAT_DIR}/tomcat
export PATH=\$TOMCAT_HOME/bin:\$PATH
EOF
    chmod +x /etc/profile.d/tomcat.sh

    # 创建Tomcat运行用户(无登录权限,系统用户)
    id $TOMCAT_USER &> /dev/null || useradd -r -s /sbin/nologin -M $TOMCAT_USER
    # 递归设置Tomcat目录权限(仅给运行用户读写,增强安全)
    chown -R $TOMCAT_USER:$TOMCAT_USER $TOMCAT_DIR/tomcat/
    chmod -R 755 $TOMCAT_DIR/tomcat/bin/  # 保证脚本可执行

    # 生成Tomcat专属配置文件(指定JAVA_HOME,避免环境变量冲突)
    cat > $TOMCAT_DIR/tomcat/conf/tomcat.conf <<EOF
JAVA_HOME=${JDK_DIR}/jdk
TOMCAT_HOME=${TOMCAT_DIR}/tomcat
EOF

    # 生成systemd服务文件(优化生产级配置:文件句柄、重启策略、依赖)
    cat > /usr/lib/systemd/system/tomcat.service <<EOF
[Unit]
Description=Apache Tomcat Service
Documentation=https://tomcat.apache.org/
After=syslog.target network.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
User=${TOMCAT_USER}
Group=${TOMCAT_USER}
EnvironmentFile=${TOMCAT_DIR}/tomcat/conf/tomcat.conf
ExecStart=${TOMCAT_DIR}/tomcat/bin/startup.sh
ExecStop=${TOMCAT_DIR}/tomcat/bin/shutdown.sh
ExecReload=/bin/kill -s HUP \$MAINPID
# 生产级配置:最大文件句柄、重启策略、临时目录
LimitNOFILE=65535
Restart=on-failure
RestartSec=5
PrivateTmp=true
TimeoutStartSec=30
TimeoutStopSec=30

[Install]
WantedBy=multi-user.target
EOF

    # 重载服务、开机自启并校验状态
    systemctl daemon-reload
    systemctl enable --now tomcat &> /dev/null
    sleep 2  # 给Tomcat启动时间
    if systemctl is-active --quiet tomcat;then
        color 0 "Tomcat安装完成,服务已启动(状态:active)"
        echo -e "\033[1;32mTomcat访问地址:http://$(hostname -I | awk '{print $1}'):8080\033[0m"
    else
        color 1 "Tomcat服务启动失败!"
        echo -e "\033[1;31m请执行 journalctl -u tomcat -f 查看报错日志\033[0m"
        exit 1
    fi
}

# 主执行流程
main() {
    # 校验是否为root用户执行(安装系统服务/修改全局目录需要root)
    if [ $UID -ne 0 ];then
        echo -e "\033[1;31m错误:请使用root用户执行此脚本!(sudo bash $0)\033[0m"
        exit 1
    fi
    # 安装依赖(避免部分最小化系统缺少tar/gzip)
    yum install -y tar gzip &> /dev/null || apt install -y tar gzip &> /dev/null
	
    # 依次安装JDK和Tomcat
    install_jdk
    install_tomcat
    echo -e "\033[1;32m========== JDK+Tomcat 全部安装完成!==========\033[0m"
}

# 执行主函数
main
相关推荐
子琦啊10 分钟前
【算法复习】字符串 | 两个底层直觉,吃透高频题
linux·运维·算法
AOwhisky1 小时前
Kubernetes 学习笔记:集群管理、命名空间与 Pod 基础
linux·运维·笔记·学习·云原生·kubernetes
小龙在慢慢变强..2 小时前
目录结构(FHS 标准)
linux·运维·服务器
刘延林.2 小时前
win11系统下通过 WSL2 安装Ubuntu 24.04 使用RTX 5080 GPU
linux·运维·ubuntu
星恒讯工业路由器2 小时前
星恒讯工业生产自动化解决方案
运维·物联网·自动化·智能路由器·信息与通信
a8a3022 小时前
Laravel9.x新特性全解析
运维·spring boot·nginx
beyond阿亮2 小时前
IEC104 Client Simulator - IEC104 主站/客户端模拟器 仿真器免费使用教程
运维·服务器·网络
Agent产品评测局3 小时前
生产排期与MES/ERP系统打通,实操方法详解:2026企业级智能体与超自动化集成实战指南
运维·人工智能·ai·chatgpt·自动化
CodeOfCC3 小时前
Linux 嵌入式arm64安装openclaw
linux·运维·服务器