SpringBoot 3.x 项目部署华为云 L 实例:5步自动化脚本实现 JDK 21 + MySQL 8.1 环境搭建

📅 2026/7/12 12:55:33
SpringBoot 3.x 项目部署华为云 L 实例:5步自动化脚本实现 JDK 21 + MySQL 8.1 环境搭建
SpringBoot 3.x 项目部署华为云 L 实例5步自动化脚本实现 JDK 21 MySQL 8.1 环境搭建在当今快节奏的开发环境中效率就是一切。手动配置服务器环境不仅耗时耗力还容易出错。本文将为你展示如何通过一个精心设计的Shell脚本在华为云L实例上快速搭建SpringBoot 3.x项目所需的完整运行环境包括JDK 21和MySQL 8.1的自动化安装与配置。1. 环境准备与脚本设计思路在开始之前我们需要明确几个关键点华为云L实例特点轻量级云服务器即开即用适合中小型应用部署自动化脚本优势减少人为错误提高部署效率实现环境一致性技术栈选择JDK 21LTS版本 MySQL 8.1最新稳定版脚本设计原则模块化结构便于维护和扩展完善的错误处理和日志记录最小化交互实现真正的自动化安全考虑避免敏感信息泄露2. 完整自动化部署脚本以下是完整的Shell脚本内容我们将分段解释其关键部分#!/bin/bash # 定义颜色代码 RED\033[0;31m GREEN\033[0;32m YELLOW\033[0;33m NC\033[0m # No Color # 日志函数 log() { echo -e ${GREEN}[$(date %Y-%m-%d %H:%M:%S)] $1${NC} } error() { echo -e ${RED}[$(date %Y-%m-%d %H:%M:%S)] ERROR: $1${NC} 2 exit 1 } # 检查是否为root用户 check_root() { if [ $(id -u) -ne 0 ]; then error 此脚本必须以root用户运行 fi } # 安装JDK 21 install_jdk() { log 开始安装JDK 21... # 检查是否已安装 if type -p java /dev/null 21; then JAVA_VERSION$(java -version 21 | awk -F /version/ {print $2}) if [[ $JAVA_VERSION 21* ]]; then log JDK 21已安装版本: $JAVA_VERSION return 0 fi fi # 安装依赖 apt-get update apt-get install -y wget tar # 下载并安装JDK 21 JDK_URLhttps://download.java.net/java/GA/jdk21.0.2/f2283984656d49d69e91c558476027ac/13/GPL/openjdk-21.0.2_linux-x64_bin.tar.gz mkdir -p /opt/jdk wget -qO- $JDK_URL | tar xz -C /opt/jdk # 设置环境变量 JAVA_HOME/opt/jdk/jdk-21.0.2 echo export JAVA_HOME$JAVA_HOME /etc/profile echo export PATH$JAVA_HOME/bin:$PATH /etc/profile source /etc/profile # 验证安装 if ! java -version 21 | grep -q 21; then error JDK 21安装失败 fi log JDK 21安装成功版本: $(java -version 21 | head -n 1) } # 安装MySQL 8.1 install_mysql() { log 开始安装MySQL 8.1... # 检查是否已安装 if systemctl is-active --quiet mysql; then MYSQL_VERSION$(mysql --version | awk {print $3}) if [[ $MYSQL_VERSION 8.1* ]]; then log MySQL 8.1已安装版本: $MYSQL_VERSION return 0 fi fi # 添加MySQL官方仓库 apt-get install -y gnupg wget -qO- https://dev.mysql.com/get/mysql-apt-config_0.8.28-1_all.deb /tmp/mysql-apt-config.deb DEBIAN_FRONTENDnoninteractive dpkg -i /tmp/mysql-apt-config.deb apt-get update # 安装MySQL Server DEBIAN_FRONTENDnoninteractive apt-get install -y mysql-server # 启动并设置开机自启 systemctl start mysql systemctl enable mysql # 安全配置 SECURE_MYSQL$(expect -c set timeout 10 spawn mysql_secure_installation expect \Press y|Y for Yes, any other key for No:\ send \n\r\ expect \New password:\ send \${MYSQL_ROOT_PASSWORD}\r\ expect \Re-enter new password:\ send \${MYSQL_ROOT_PASSWORD}\r\ expect \Remove anonymous users? (Press y|Y for Yes, any other key for No) :\ send \y\r\ expect \Disallow root login remotely? (Press y|Y for Yes, any other key for No) :\ send \n\r\ expect \Remove test database and access to it? (Press y|Y for Yes, any other key for No) :\ send \y\r\ expect \Reload privilege tables now? (Press y|Y for Yes, any other key for No) :\ send \y\r\ expect eof ) echo $SECURE_MYSQL # 验证安装 if ! systemctl is-active --quiet mysql; then error MySQL安装失败 fi log MySQL 8.1安装成功版本: $(mysql --version) } # 配置远程访问 configure_remote_access() { log 配置MySQL远程访问... # 创建配置文件 cat EOF /etc/mysql/conf.d/remote.cnf [mysqld] bind-address 0.0.0.0 EOF # 重启MySQL systemctl restart mysql # 创建远程访问用户 mysql -uroot -p${MYSQL_ROOT_PASSWORD} -EOF CREATE USER ${MYSQL_USER}% IDENTIFIED BY ${MYSQL_PASSWORD}; GRANT ALL PRIVILEGES ON *.* TO ${MYSQL_USER}% WITH GRANT OPTION; FLUSH PRIVILEGES; EOF log MySQL远程访问配置完成 } # 配置防火墙和安全组 configure_firewall() { log 配置防火墙和安全组... # 开放端口 ufw allow 22 ufw allow 3306 ufw allow 8080 ufw --force enable log 防火墙配置完成已开放22(SSH)、3306(MySQL)、8080(SpringBoot)端口 } # 主执行流程 main() { check_root # 设置MySQL密码生产环境应从安全位置获取 MYSQL_ROOT_PASSWORDStrongPassword123! MYSQL_USERspringuser MYSQL_PASSWORDSpringPass123! log 开始自动化部署SpringBoot运行环境 install_jdk install_mysql configure_remote_access configure_firewall log 环境部署完成以下是摘要信息 echo -e ${YELLOW}JDK版本:${NC} $(java -version 21 | head -n 1) echo -e ${YELLOW}MySQL版本:${NC} $(mysql --version) echo -e ${YELLOW}MySQL root密码:${NC} $MYSQL_ROOT_PASSWORD echo -e ${YELLOW}MySQL应用用户:${NC} $MYSQL_USER echo -e ${YELLOW}MySQL应用密码:${NC} $MYSQL_PASSWORD echo -e ${YELLOW}开放端口:${NC} 22(SSH), 3306(MySQL), 8080(SpringBoot) } # 执行主函数 main3. 脚本关键功能解析3.1 JDK 21自动化安装脚本中的install_jdk函数负责JDK 21的安装版本检查首先检查是否已安装所需版本的JDK依赖安装安装wget和tar工具二进制安装直接从Oracle官网下载JDK 21的压缩包环境配置设置JAVA_HOME和PATH环境变量验证检查安装是否成功优势直接从官方源获取确保安全性不依赖系统包管理器版本控制更精确环境变量配置完整避免后续使用问题3.2 MySQL 8.1自动化安装与配置install_mysql函数处理MySQL的安装仓库配置添加MySQL官方APT仓库静默安装使用DEBIAN_FRONTENDnoninteractive避免交互提示安全配置通过expect工具自动化mysql_secure_installation过程服务管理设置开机自启并验证服务状态安全考虑自动设置强密码移除匿名用户保留远程root登录生产环境应限制移除测试数据库3.3 远程访问与防火墙配置configure_remote_access和configure_firewall函数确保服务可访问MySQL远程访问修改bind-address为0.0.0.0创建专用应用用户而非使用root防火墙规则开放SSH、MySQL和SpringBoot常用端口启用UFW防火墙安全最佳实践为应用创建专用数据库用户仅开放必要的端口使用强密码脚本中为示例生产环境应使用更复杂密码4. 脚本使用指南4.1 执行准备购买华为云L实例推荐配置2核4G通过SSH连接到服务器将脚本保存为setup_springboot_env.sh4.2 执行步骤# 赋予执行权限 chmod x setup_springboot_env.sh # 执行脚本 sudo ./setup_springboot_env.sh4.3 自定义配置对于生产环境建议修改以下变量MYSQL_ROOT_PASSWORDYourVeryStrongPassword123! MYSQL_USERyour_app_user MYSQL_PASSWORDYourAppPassword123!安全提示密码应包含大小写字母、数字和特殊字符不同环境使用不同密码考虑使用密钥管理服务而非硬编码密码5. 验证与问题排查5.1 环境验证安装完成后执行以下命令验证# 验证JDK java -version # 验证MySQL systemctl status mysql mysql -uroot -p # 验证端口 ss -tulnp | grep -E 3306|80805.2 常见问题解决问题1MySQL安装失败原因可能缺少依赖或网络问题解决手动运行apt-get update apt-get install -f问题2JDK版本不正确原因系统可能有预装Java解决卸载冲突版本或调整PATH顺序问题3防火墙阻止访问原因华为云安全组未配置解决在华为云控制台配置安全组规则6. 进阶优化建议6.1 安全增强SSH加固禁用root远程登录使用密钥认证替代密码修改默认SSH端口MySQL安全限制root远程访问设置应用用户最小权限启用SSL连接日志审计配置MySQL审计日志设置系统日志集中管理6.2 性能调优MySQL优化配置[mysqld] innodb_buffer_pool_size 1G # 根据内存调整 innodb_log_file_size 256M max_connections 200JVM参数优化在SpringBoot启动脚本中添加JAVA_OPTS-Xms1g -Xmx2g -XX:UseG1GC -XX:MaxGCPauseMillis2006.3 自动化扩展集成CI/CD将脚本集成到部署流水线中配置管理使用Ansible/Terraform管理服务器配置监控告警添加PrometheusGrafana监控7. 实际应用场景7.1 多环境部署通过少量修改脚本可适应不同环境# 根据环境变量切换配置 if [ $ENV prod ]; then MYSQL_ROOT_PASSWORD$(aws secretsmanager get-secret-value --secret-id prod/mysql-root --query SecretString --output text) fi7.2 蓝绿部署结合脚本实现无缝升级在新服务器组上运行脚本部署并测试新版本切换负载均衡指向新服务器退役旧服务器7.3 灾备恢复将脚本纳入灾备方案定期备份数据库灾难发生时在新区域运行脚本恢复备份数据更新DNS记录8. 总结与最佳实践通过本文的自动化脚本我们实现了快速环境搭建5分钟内完成JDKMySQL的安装配置一致性保障避免人工操作差异导致的环境不一致可重复部署支持开发、测试、生产多环境一键部署基础安全内置基本的安全配置持续改进建议将敏感信息移出脚本使用密钥管理服务添加更详细的日志和监控定期更新脚本以适应新版本软件考虑容器化部署作为替代方案# 示例后续部署SpringBoot应用 nohup java -jar your-springboot-app.jar --server.port8080 app.log 21 这个自动化脚本为SpringBoot项目提供了坚实的基础环境让开发者可以专注于业务逻辑而非环境配置。根据实际需求你可以进一步扩展其功能如添加Nginx反向代理、Redis缓存等组件的自动化安装。