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
相关推荐
霍格沃兹测试学院-小舟畅学2 小时前
Playwright测试超时管理:全局与局部超时设置
运维·服务器·网络
码刘的极客手记2 小时前
vSphere 4.1 三大实用实战:vCenter 告警自动化、SIOC 无 License 启用及 Dropbox 存储运行 VM
运维·服务器·网络·自动化·虚拟机
萧曵 丶2 小时前
Nginx常用配置
运维·nginx
有代理ip2 小时前
后端服务安全加固:Nginx 反向代理配置教程
运维·nginx·安全
heartbeat..2 小时前
JVM 参数配置指南:内存调优、收集器选择与问题排查
java·运维·jvm·性能优化
我也不曾来过12 小时前
进程控制(很详细)
linux·运维·服务器
不会代码的小测试2 小时前
UI自动化-Grid分布式运行
运维·分布式·python·selenium·自动化
2301_772204282 小时前
Linux内核驱动--设备驱动
linux·运维·服务器
China_Yanhy2 小时前
入职 Web3 运维日记 · 第 6 日:触碰红线 —— 私钥托管与 AWS KMS 的博弈
运维·web3·aws