发布时间:2026/6/18 12:32:10
别再复制粘贴了!手把手教你用腾讯云CentOS7.5部署Spring Boot项目(含MySQL8.0避坑指南)
腾讯云CentOS 7.5实战Spring Boot项目部署与MySQL 8.0深度调优指南开篇为什么你的Spring Boot项目总在部署时崩溃每次看到部署成功的截图就跃跃欲试结果自己操作时却卡在莫名其妙的错误上这可能是大多数Java开发者第一次接触服务器部署时的真实写照。不同于本地开发环境云服务器部署需要面对Linux系统管理、服务配置、网络策略等多维挑战而Spring Boot与MySQL 8.0的组合更是暗藏诸多新手杀手——从GPG密钥失效到密码策略冲突从防火墙配置到内存泄漏每个环节都可能成为项目上线的拦路虎。本文将基于腾讯云CentOS 7.5环境以实战角度演示一个博客系统的完整部署流程。不同于随处可见的复制粘贴式教程我们会重点剖析那些官方文档轻描淡写、但实际必踩的五个典型深坑并给出经过生产环境验证的解决方案。无论你是需要部署毕业设计的学生还是希望提升运维能力的初级开发者这份指南都能让你少走80%的弯路。1. 云服务器初始化避开选购与系统配置的隐藏陷阱1.1 腾讯云学生机选购指南腾讯云学生优惠套餐确实是性价比之选但需要注意三个关键点地域选择建议优先选择距离用户群体最近的地域如华南地区选广州延迟可降低30-50ms镜像版本CentOS 7.5与7.9是最稳定的选择避免使用CentOS 8已停止维护安全组配置初始设置必须放行以下端口端口号协议用途说明22TCPSSH远程连接80TCPHTTP访问443TCPHTTPS安全连接3306TCPMySQL数据库连接8080TCPSpring Boot应用注意购买完成后立即在控制台重置实例密码建议使用16位以上包含大小写字母、数字和特殊字符的组合1.2 SSH连接优化方案使用默认的SSH连接可能会遇到会话超时中断的问题推荐以下配置# 修改SSH配置文件 sudo vim /etc/ssh/sshd_config # 添加以下参数 ClientAliveInterval 60 ClientAliveCountMax 3 TCPKeepAlive yes # 重启SSH服务 sudo systemctl restart sshd同时建议为本机生成SSH密钥对实现免密登录# 本地终端执行非服务器 ssh-keygen -t rsa -b 4096 ssh-copy-id root你的服务器IP2. 环境部署JDK与Tomcat的高效配置方案2.1 JDK 11安装的现代方法传统教程建议手动下载tar包配置其实有更优雅的解决方案# 安装EPEL仓库 sudo yum install -y epel-release # 安装OpenJDK 11 sudo yum install -y java-11-openjdk-devel # 验证安装 java -version如果必须使用Oracle JDK需要注意license问题。以下是合规安装步骤# 下载rpm包需提前在Oracle官网同意协议 wget https://download.oracle.com/java/11/latest/jdk-11_linux-x64_bin.rpm # 安装 sudo rpm -ivh jdk-11_linux-x64_bin.rpm # 设置系统默认JDK sudo alternatives --config java2.2 Tomcat 9优化配置不建议使用yum安装的Tomcat推荐手动安装最新版# 下载解压 wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.68/bin/apache-tomcat-9.0.68.tar.gz tar -xzf apache-tomcat-9.0.68.tar.gz -C /usr/local/ # 创建专用用户 sudo useradd -r -s /bin/false tomcat sudo chown -R tomcat:tomcat /usr/local/apache-tomcat-9.0.68关键配置调整内存设置在/usr/local/apache-tomcat-9.0.68/bin/setenv.sh中添加export CATALINA_OPTS-server -Xms512m -Xmx1024m -XX:MaxMetaspaceSize256m线程池优化修改conf/server.xml的Connector配置Connector port8080 protocolHTTP/1.1 maxThreads200 minSpareThreads20 acceptCount100 connectionTimeout20000 redirectPort8443 /日志切割配置conf/logging.properties使用每日滚动日志3. MySQL 8.0部署与深度调优3.1 解决GPG密钥过期问题MySQL官方源的GPG密钥经常过期这是第一个大坑。正确的安装流程# 移除旧密钥 sudo rpm -e gpg-pubkey --allmatches # 导入新密钥 sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 # 安装MySQL 8.0社区版 sudo yum localinstall -y https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm sudo yum install -y mysql-community-server3.2 密码策略与远程访问配置MySQL 8.0默认启用caching_sha2_password认证插件会导致许多客户端工具连接失败。完整配置流程# 启动服务 sudo systemctl start mysqld # 获取临时密码 sudo grep temporary password /var/log/mysqld.log # 安全初始化 sudo mysql_secure_installation进入MySQL后执行以下关键操作-- 修改密码策略生产环境慎用 SET GLOBAL validate_password.policyLOW; -- 创建专用数据库用户 CREATE USER blog_user% IDENTIFIED BY Complex_Password_123!; GRANT ALL PRIVILEGES ON blog_db.* TO blog_user%; -- 修改root用户认证方式 ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY NewRootPassword123!; -- 刷新权限 FLUSH PRIVILEGES;3.3 性能优化配置编辑/etc/my.cnf添加以下参数[mysqld] # 基础配置 datadir/var/lib/mysql socket/var/lib/mysql/mysql.sock # 内存配置 innodb_buffer_pool_size 256M innodb_log_file_size 128M key_buffer_size 64M # 连接配置 max_connections 100 wait_timeout 600 interactive_timeout 600 # 其他优化 innodb_flush_log_at_trx_commit 2 sync_binlog 10004. Spring Boot应用部署实战4.1 项目打包的进阶技巧避免简单的mvn package推荐使用分层构建build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId configuration layers enabledtrue/enabled /layers /configuration /plugin /plugins /build打包命令mvn clean package -DskipTests4.2 生产级启动方案不要直接使用java -jar推荐使用systemd服务管理创建/etc/systemd/system/blog.service[Unit] DescriptionBlog Application Aftersyslog.target network.target mysqld.service [Service] Usertomcat WorkingDirectory/opt/blog ExecStart/usr/bin/java -Xms256m -Xmx512m -jar /opt/blog/blog-0.0.1-SNAPSHOT.jar SuccessExitStatus143 Restartalways RestartSec30 [Install] WantedBymulti-user.target管理命令# 重载配置 sudo systemctl daemon-reload # 启动服务 sudo systemctl start blog # 查看日志 journalctl -u blog -f4.3 Nginx反向代理配置在/etc/nginx/conf.d/blog.conf中添加server { listen 80; server_name yourdomain.com; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log /var/log/nginx/blog_access.log; error_log /var/log/nginx/blog_error.log; }5. 五大必坑场景与救火方案5.1 案例MySQL连接池耗尽现象应用运行一段时间后出现HikariPool-1 - Connection is not available错误解决方案检查连接泄漏SHOW STATUS LIKE Threads_connected;调整连接池配置spring.datasource.hikari.maximum-pool-size20 spring.datasource.hikari.leak-detection-threshold50005.2 案例OOM内存溢出现象服务突然崩溃日志中出现java.lang.OutOfMemoryError排查步骤生成内存快照jmap -dump:formatb,fileheap.hprof pid使用Eclipse MAT分析内存泄漏点5.3 案例定时任务重复执行现象集群环境下定时任务在多节点重复执行解决方案Scheduled(cron 0 0/5 * * * ?) SchedulerLock(name reportGeneration, lockAtLeastFor 4m, lockAtMostFor 5m) public void generateReport() { // 方法实现 }需要引入net.javacrumbs.shedlock依赖5.4 案例文件上传权限问题现象上传的图片无法访问或服务无法写入目录解决方案# 创建专用存储目录 sudo mkdir -p /data/blog/uploads sudo chown -R tomcat:tomcat /data/blog sudo chmod -R 755 /data/blog在application.properties中配置spring.servlet.multipart.max-file-size10MB spring.servlet.multipart.max-request-size10MB file.upload-dir/data/blog/uploads5.5 案例第三方API证书问题现象调用HTTPS接口时出现PKIX path validation failed错误解决方案Configuration public class SSLConfig { Bean public RestTemplate restTemplate() throws Exception { SSLContext sslContext new SSLContextBuilder() .loadTrustMaterial(null, (certificate, authType) - true).build(); HttpClient client HttpClients.custom() .setSSLContext(sslContext) .build(); return new RestTemplate(new HttpComponentsClientHttpRequestFactory(client)); } }

相关新闻

遗传算法实战:Python手写N皇后求解器(含100皇后完整实现)
2026/6/16 18:51:59

遗传算法实战:Python手写N皇后求解器(含100皇后完整实现)

1. 这不是教科书,而是一次真实的GA项目复盘:从Matlab到Python的N皇后实战手记你点开这篇文章,大概率不是为了背诵“遗传算法是模拟生物进化过程的优化方法”这种定义。你真正想搞清楚的是:当一个真实项目摆在面前——比如用遗传算…

阅读更多
LPC122x Cortex-M0微控制器:工业级嵌入式开发实战解析
2026/6/16 4:52:15

LPC122x Cortex-M0微控制器:工业级嵌入式开发实战解析

1. 项目概述:为什么选择LPC122x系列? 在嵌入式开发领域,选型往往是项目成败的第一步。面对市面上琳琅满目的ARM Cortex-M0微控制器,NXP的LPC122x系列总能引起我的注意。这不仅仅是因为它来自一家老牌的半导体厂商,更是…

阅读更多
Windows平台实现苹果级视觉体验:PingFangSC字体完整使用指南
2026/6/15 18:45:44

Windows平台实现苹果级视觉体验:PingFangSC字体完整使用指南

Windows平台实现苹果级视觉体验:PingFangSC字体完整使用指南 【免费下载链接】PingFangSC PingFangSC字体包文件、苹果平方字体文件,包含ttf和woff2格式 项目地址: https://gitcode.com/gh_mirrors/pi/PingFangSC 你是否曾在Windows系统上怀念苹果…

阅读更多
K2.5开源Agent集群:系统智能时代的任务编排范式
2026/6/18 11:58:45

K2.5开源Agent集群:系统智能时代的任务编排范式

1. 项目概述:这不是一次普通模型更新,而是一次Agent协作范式的公开验证 Kimi团队最近发布的K2.5模型,表面看是“又一个大模型迭代”,但实际拆开来看,它根本不是传统意义上单体推理能力的线性增强。我从去年开始深度跟踪…

阅读更多
解锁时序数据分析新思路:Timer时序大模型TimechoAI实操与技术能力详解
2026/6/18 11:58:45

解锁时序数据分析新思路:Timer时序大模型TimechoAI实操与技术能力详解

在工业物联网、电力、轨道交通、气象、量化金融场景中,各类传感器、采集设备持续产生海量连续时序数据。大量企业通过TimechoDB(https://timecho.com)完成海量测点数据持久化存储,但普遍存在数据利用难的问题:传统统计…

阅读更多
WarcraftHelper:解决魔兽争霸3五大经典问题的终极方案
2026/6/18 11:58:45

WarcraftHelper:解决魔兽争霸3五大经典问题的终极方案

WarcraftHelper:解决魔兽争霸3五大经典问题的终极方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典魔兽争霸3在现代系统上的…

阅读更多
小白程序员转型大模型开发:一份从入门到精通的详细攻略(收藏必备)
2026/6/18 11:58:45

小白程序员转型大模型开发:一份从入门到精通的详细攻略(收藏必备)

本文为想要进入大模型领域的程序员提供了一份详尽的转型攻略。首先明确大模型开发、应用、研究和工程等不同方向,随后深入讲解Python编程、深度学习框架、数学基础和机器学习等必备知识。接着,详细介绍了Transformer架构、预训练与微调、大模型优化技术以…

阅读更多
七层 Bot 流量深度甄别:区分真实访客与模拟低频 CC 攻击
2026/6/18 11:58:45

七层 Bot 流量深度甄别:区分真实访客与模拟低频 CC 攻击

七层 Bot 流量深度甄别方法行为特征分析通过分析访问行为的时序特征、点击轨迹和交互模式,识别异常行为。真实用户的行为通常具有随机性和连续性,而模拟流量可能呈现固定间隔或重复性操作。请求头检测检查 HTTP 请求头中的 User-Agent、Accept-Language、…

阅读更多
开源AI安全工具实战:NeMo Guardrails、PyRIT与灰区治理
2026/6/18 10:58:45

开源AI安全工具实战:NeMo Guardrails、PyRIT与灰区治理

1. 项目概述:当AI安全撞上现实预算,开源工具就是你的生存补给包你有没有过这种时刻:凌晨两点,咖啡因和肾上腺素在血管里打架,盯着屏幕上那个刚上线、还没来得及加防护的LLM聊天机器人,心里默念“别出事、别…

阅读更多
别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)
2026/6/17 23:21:18

别再只用BERT了!用Transformers库的AutoModel,5分钟搞定文本相似度计算(附代码对比)

超越BERT:用Transformers库高效实现文本相似度计算的三种实战方案在自然语言处理领域,文本相似度计算是信息检索、问答系统和推荐系统等应用的核心技术。传统方法如TF-IDF或Word2Vec已逐渐被基于Transformer的预训练模型所取代。Hugging Face的Transform…

阅读更多
Prompt Engineering:重构人机协作的工程化方法论
2026/6/18 4:35:02

Prompt Engineering:重构人机协作的工程化方法论

1. 项目概述:这不是“写提示词”,而是重构人机协作的底层逻辑“Prompt Engineering”这个词,这两年被讲得太多,也太轻飘。很多人把它理解成“给AI发指令的技巧”,甚至简化为“多加几个形容词”“换种说法再试一次”。我…

阅读更多
Anthropic提示层归零:模型即协议的工程实践
2026/6/17 10:35:40

Anthropic提示层归零:模型即协议的工程实践

1. 项目概述:这不是一次普通更新,而是一次架构级“蒸发”“Anthropic Just Shipped the Layer That’s Already Going to Zero”——这个标题一出来,我正在调试一个Claude调用链的终端前停了三秒。不是因为震惊,而是因为熟悉&…

阅读更多
零碳供电所照明控制系统技术解析:标准要求与产品落地
2026/6/18 0:58:44

零碳供电所照明控制系统技术解析:标准要求与产品落地

一、零碳供电所对照明控制系统的硬性要求 《零碳供电所创建与评价规范》(T/ZDL 02-2022)是全国首个零碳供电所评价的团体标准,于2022年10月1日起实施-10-2。该标准将建筑、交通、办公、能源、建设与管理等多个维度零碳评价指标融为一体&#…

阅读更多
学生党AI学习指南:GPT、Gemini、WPS AI三工具协同实战
2026/6/18 0:58:44

学生党AI学习指南:GPT、Gemini、WPS AI三工具协同实战

1. 这不是工具清单,是学生党用时间砸出来的“AI生存指南”最近在图书馆自习区,我常看见对面座位的同学盯着屏幕发呆——不是在刷短视频,而是在和某个AI对话框反复拉扯:输入问题、删掉重写、再改提示词、等结果、皱眉、刷新……半小…

阅读更多
Gemini 3.1 Pro+DeepSider:新人零门槛AI工作流实战指南
2026/6/18 0:58:44

Gemini 3.1 Pro+DeepSider:新人零门槛AI工作流实战指南

1. 为什么Gemini 3.1 Pro值得新人认真对待——不是又一个“聊天玩具”最近在几个技术社群和内容创作小组里,总能看到有人发截图:“Gemini 3.1 Pro刚跑完一份20页PDF的逻辑图谱,还顺手把矛盾点标红了”;也有人贴出对比:…

阅读更多
GIT修改用户名
2026/6/17 19:45:33

GIT修改用户名

在GIT中修改用户名可按以下步骤操作: 查看当前git的用户名,使用命令git config --list或git config user.name。修改git用户名,使用命令git config --global user.name "xxx(新的用户名)",将其中…

阅读更多
Win11Debloat:让你的Windows系统重获新生的终极优化工具
2026/6/16 16:55:24

Win11Debloat:让你的Windows系统重获新生的终极优化工具

Win11Debloat:让你的Windows系统重获新生的终极优化工具 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …

阅读更多
技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践
2026/6/17 4:21:30

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一个…

阅读更多