一、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