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
相关推荐
乘云数字DATABUFF3 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--5 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森5 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜6 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB7 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode8 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220709 天前
如何搭建本地yum源(上)
运维
大树8812 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠12 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质12 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务