1. 项目概述
在服务器运维和Java应用部署过程中,离线环境下的软件安装是每个工程师都会遇到的挑战。不同于联网环境可以直接使用yum或apt-get等包管理工具,离线安装需要手动处理依赖关系、配置环境变量和设置系统服务。本文将基于阿里云CentOS 7环境,详细演示JDK 8、Tomcat 9和MySQL 8.0的完整离线安装流程,并分享我在实际部署中积累的实战经验。
提示:本文所有操作均在root用户下执行,生产环境建议创建专用用户并配置sudo权限。
2. 准备工作与安装包获取
2.1 软件版本选择考量
选择软件版本时需要考虑以下因素:
- 兼容性:CentOS 7基于glibc 2.17,需选择兼容的软件版本
- 长期支持:JDK 8u、MySQL 8.0都是LTS版本
- 功能需求:Tomcat 9支持Servlet 4.0和JSP 2.3规范
推荐版本组合:
- JDK: 8u381(Oracle官方长期支持版本)
- Tomcat: 9.0.85(稳定版)
- MySQL: 8.0.34(社区版)
2.2 安装包下载与验证
所有安装包应提前在有网络的环境中下载并验证完整性:
bash复制# 校验文件完整性示例
md5sum jdk-8u381-linux-x64.tar.gz
sha256sum mysql-8.0.34-linux-glibc2.12-x86_64.tar.xz
2.3 文件传输与目录规划
建议的服务器目录结构:
code复制/usr/local/src/ # 存放原始安装包
/usr/local/jdk1.8.0_381/ # JDK安装目录
/usr/local/tomcat9/ # Tomcat安装目录
/usr/local/mysql8/ # MySQL安装目录
使用SCP传输文件示例:
bash复制scp jdk-8u381-linux-x64.tar.gz root@服务器IP:/usr/local/src/
3. JDK 8离线安装详解
3.1 解压与目录配置
bash复制tar -zxvf jdk-8u381-linux-x64.tar.gz -C /usr/local/
解压后建议创建软链接方便版本管理:
bash复制ln -s /usr/local/jdk1.8.0_381 /usr/local/java
3.2 环境变量配置优化
在/etc/profile.d/下创建独立配置文件更利于维护:
bash复制cat > /etc/profile.d/java.sh <<'EOF'
export JAVA_HOME=/usr/local/java
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
EOF
source /etc/profile
3.3 验证与故障排查
验证安装:
bash复制java -version
javac -version
常见问题:
- 命令未找到:检查PATH是否包含$JAVA_HOME/bin
- 版本不符:检查环境变量加载顺序
- 权限问题:确保/usr/local目录有执行权限
4. Tomcat 9安装与优化
4.1 解压与目录权限
bash复制tar -zxvf apache-tomcat-9.0.85.tar.gz -C /usr/local/
mv /usr/local/apache-tomcat-9.0.85 /usr/local/tomcat9
设置专用用户运行Tomcat:
bash复制groupadd tomcat
useradd -g tomcat -d /usr/local/tomcat9 -s /bin/false tomcat
chown -R tomcat:tomcat /usr/local/tomcat9
4.2 服务化配置增强版
/etc/systemd/system/tomcat.service配置示例:
ini复制[Unit]
Description=Apache Tomcat 9
After=syslog.target network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment=CATALINA_PID=/usr/local/tomcat9/temp/tomcat.pid
Environment=CATALINA_HOME=/usr/local/tomcat9
Environment=CATALINA_BASE=/usr/local/tomcat9
ExecStart=/usr/local/tomcat9/bin/startup.sh
ExecStop=/usr/local/tomcat9/bin/shutdown.sh
Restart=on-failure
RestartSec=10
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
4.3 性能调优建议
修改conf/server.xml配置连接器:
xml复制<Connector port="8080" protocol="HTTP/1.1"
maxThreads="200"
minSpareThreads="10"
acceptCount="100"
connectionTimeout="20000"
redirectPort="8443" />
5. MySQL 8.0深度安装指南
5.1 解压与目录准备
bash复制tar -xf mysql-8.0.34-linux-glibc2.12-x86_64.tar.xz -C /usr/local/
mv /usr/local/mysql-8.0.34-linux-glibc2.12-x86_64 /usr/local/mysql8
5.2 依赖处理进阶方案
除了libaio,还需检查这些依赖:
bash复制rpm -qa | grep -E 'libaio|numactl'
离线安装依赖包示例:
bash复制rpm -ivh libaio-0.3.109-13.el7.x86_64.rpm
rpm -ivh numactl-libs-2.0.12-5.el7.x86_64.rpm
5.3 数据库初始化最佳实践
使用--initialize-insecure选项(生产环境慎用):
bash复制bin/mysqld --initialize-insecure --user=mysql \
--basedir=/usr/local/mysql8 \
--datadir=/usr/local/mysql8/data
安全建议:
- 初始化后立即修改root密码
- 移除test数据库
- 创建应用专用用户
5.4 强化版my.cnf配置
ini复制[mysqld]
# 目录设置
basedir=/usr/local/mysql8
datadir=/usr/local/mysql8/data
socket=/tmp/mysql.sock
# 安全设置
skip-name-resolve
local-infile=0
symbolic-links=0
# 性能参数
innodb_buffer_pool_size=1G
innodb_log_file_size=256M
max_connections=500
thread_cache_size=32
# 字符集
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
default-character-set=utf8mb4
socket=/tmp/mysql.sock
6. 安全加固与网络配置
6.1 防火墙规则管理
永久开放服务端口:
bash复制firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
6.2 阿里云安全组配置要点
- 登录阿里云控制台 > 云服务器ECS
- 找到实例 > 安全组配置
- 添加入方向规则:
- 授权策略:允许
- 协议类型:自定义TCP
- 端口范围:8080/8080
- 授权对象:0.0.0.0/0(生产环境应限制IP)
6.3 MySQL远程访问安全方案
不建议直接开放root远程访问,应该:
- 创建应用专用用户
- 限制访问IP
- 设置复杂密码
sql复制CREATE USER 'appuser'@'192.168.1.%' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'192.168.1.%';
FLUSH PRIVILEGES;
7. 运维监控与故障排查
7.1 服务状态检查命令
bash复制# JDK验证
java -version
# Tomcat状态
systemctl status tomcat
tail -f /usr/local/tomcat9/logs/catalina.out
# MySQL状态
systemctl status mysql
/usr/local/mysql8/bin/mysqladmin -u root -p ping
7.2 日志文件位置
关键日志路径:
-
Tomcat:
- /usr/local/tomcat9/logs/catalina.out(主日志)
- /usr/local/tomcat9/logs/localhost.yyyy-mm-dd.log(应用日志)
-
MySQL:
- /usr/local/mysql8/data/mysqld.log(错误日志)
- /usr/local/mysql8/data/mysql-slow.log(慢查询日志)
7.3 常见问题解决方案
Tomcat启动慢问题:
bash复制# 在JAVA_OPTS中添加
-Djava.security.egd=file:/dev/./urandom
MySQL连接数不足:
sql复制SET GLOBAL max_connections=1000;
JDK版本冲突:
bash复制update-alternatives --config java
8. 备份与恢复策略
8.1 定期备份方案
MySQL备份脚本示例:
bash复制#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR=/data/backups
/usr/local/mysql8/bin/mysqldump -u root -p --all-databases > $BACKUP_DIR/mysql_full_$DATE.sql
find $BACKUP_DIR -type f -name "*.sql" -mtime +7 -delete
Tomcat应用备份:
bash复制tar -zcvf /backup/tomcat9_$(date +%Y%m%d).tar.gz /usr/local/tomcat9/webapps/
8.2 系统服务恢复步骤
-
停止服务:
bash复制
systemctl stop tomcat systemctl stop mysql -
恢复文件:
bash复制
tar -zxvf tomcat9_backup.tar.gz -C /usr/local/ mysql -u root -p < mysql_backup.sql -
重启服务:
bash复制
systemctl start mysql systemctl start tomcat
9. 性能优化建议
9.1 JVM调优参数
在tomcat/bin/setenv.sh中添加:
bash复制export JAVA_OPTS="-Xms1024m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"
9.2 MySQL性能优化
关键参数调整:
ini复制innodb_buffer_pool_size = 4G # 物理内存的50-70%
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2 # 非关键业务可设为2
sync_binlog = 1000
9.3 系统层面优化
修改/etc/security/limits.conf:
code复制* soft nofile 65536
* hard nofile 65536
mysql soft nofile 65536
mysql hard nofile 65536
10. 升级与维护指南
10.1 软件版本升级流程
- 下载新版本安装包
- 停止相关服务
- 备份配置和数据
- 安装新版本
- 迁移配置
- 启动服务测试
10.2 定期维护任务
建议设置的cron任务:
bash复制# 每天凌晨清理Tomcat日志
0 2 * * * find /usr/local/tomcat9/logs -name "*.log" -mtime +7 -delete
# 每周备份MySQL
0 3 * * 0 /root/scripts/mysql_backup.sh
在实际生产环境中,我建议将所有这些安装步骤编写成自动化脚本,特别是当需要批量部署多台服务器时。可以使用Ansible、Shell脚本等方式实现一键部署,大大提高效率并减少人为错误。对于关键业务系统,还应该考虑配置监控告警,确保服务异常时能及时通知运维人员。