Spring Boot + 前端 完整上线踩坑记录(CentOS7 + Java17 + Redis + MySQL)
结合你全程操作,补充服务器初始创建、WinSCP使用、前端部署完整流程,所有敏感信息统一打码,适配 CSDN 发布,整合为一篇完整文章。
从服务器初始化到前后端全套部署:Spring Boot + 前端 完整上线踩坑记录(CentOS7 + Java17 + Redis + MySQL)
本文从零开始,记录阿里云 CentOS 7 服务器初始化、工具使用、环境搭建、后端打包部署、前端部署全流程,包含版本不兼容、端口占用、依赖缺失等各类问题及解决方案,新手可直接照着操作。
一、整体架构与环境说明
- 后端项目:
career-assistant-server,技术栈:Spring Boot 3.2.5 + Java 17 + MySQL + Redis - 前端项目:Vue3/Vite 项目
- 服务器:阿里云 CentOS 7 系统
- 核心流程:服务器购买初始化 → WinSCP 工具使用 → 服务端环境搭建 → 后端打包部署 → 前端部署上线
二、第一步:阿里云服务器初始配置
2.1 服务器购买与系统选择
- 登录阿里云控制台,选择云服务器 ECS,根据需求选购配置。
- 操作系统选择:
CentOS 7.x 64位(本文全程基于该系统操作)。 - 实例创建完成后,进入实例详情页,记录两个关键信息:
- 公网IP:
***.***.***.***(对外访问地址,后文统一打码) - 登录账号:默认
root,也可自行创建普通用户admin
- 公网IP:
- 重置服务器登录密码,牢记账号密码,用于后续远程连接。
2.2 安全组放行端口(前置必做)
安全组相当于服务器的防火墙,不放行端口则外网无法访问服务。
- 进入 ECS 实例 → 安全组 → 配置规则。
- 添加入方向规则,本文需要放行端口:
22:远程连接端口(SSH 连接、WinSCP 上传文件必备,默认已开启)9000:后端服务端口80/443:前端网页访问端口(HTTP/HTTPS)
- 授权策略:允许,授权对象:
0.0.0.0/0(临时全网开放,生产环境建议限制本机IP)。
三、第二步:WinSCP 工具使用(文件上传/下载必备)
3.1 工具介绍
WinSCP 是 Windows 端图形化 SFTP 工具,用来本地 ↔ 服务器互传文件、在线编辑配置文件,操作简单,替代命令行上传。
3.2 连接服务器
- 下载安装 WinSCP,打开软件,新建会话:
- 协议:
SFTP - 主机名:服务器公网IP
***.***.***.*** - 端口号:
22 - 用户名:
admin/root - 密码:服务器登录密码
- 协议:
- 点击「登录」,连接成功后界面分为两部分:
- 左侧:本地电脑文件目录
- 右侧:远程服务器文件目录
3.3 基础操作
- 新建文件夹:右键空白处 → 新建 → 目录,本文后端统一存放目录:
/home/admin/app。 - 上传文件:左侧选中本地文件/文件夹,直接拖拽到右侧服务器目录,弹出提示选择「覆盖」即可。
- 下载文件:右侧服务器文件拖拽到左侧本地目录,常用于下载配置文件修改。
- 编辑文件:右键服务器配置文件 → 编辑,修改后保存自动同步到服务器。
小技巧:Redis、Nginx 等配置文件,优先用 WinSCP 下载到本地修改,再上传覆盖,比命令行编辑更直观。
四、第三步:服务器后端环境搭建
4.1 离线安装 Java 17(CentOS 7 专用)
问题描述
Spring Boot 3.x 强制要求 Java 17 及以上,CentOS 7 官方 YUM 源无 Java17 安装包,执行 yum install java-17-openjdk-devel 会提示 No package available。
解决步骤(离线安装 OpenJDK 17)
- 登录服务器终端(阿里云网页终端 / Xshell),清理系统原有旧 Java 环境(可选)
yum remove -y java*
rm -rf /usr/local/jdk*
- 下载 OpenJDK 17 安装包
cd /root
wget https://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/GPL/openjdk-17.0.2_linux-x64_bin.tar.gz
- 解压到系统目录
tar -zxf openjdk-17.0.2_linux-x64_bin.tar.gz -C /usr/local/
- 配置全局环境变量
echo 'export JAVA_HOME=/usr/local/jdk-17.0.2' > /etc/profile.d/jdk17.sh
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile.d/jdk17.sh
source /etc/profile
- 验证是否安装成功
java -version
javac -version
正常输出示例:
openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment (build 17.0.2+8-86)
OpenJDK 64-Bit Server VM (build 17.0.2+8-LTS-86, mixed mode, sharing)
4.2 Redis 安装与配置
1. 在线安装 Redis
yum install -y redis
systemctl enable redis # 设置开机自启
systemctl start redis # 启动服务
2. 修改 Redis 核心配置
配置文件路径:/etc/redis.conf
使用 WinSCP 将文件下载到本地修改,再上传覆盖,关键配置修改如下:
# 允许所有网段连接
bind 0.0.0.0
# 关闭保护模式
protected-mode no
# 后台运行
daemonize yes
# 设置 Redis 访问密码(已脱敏)
requirepass ******
- 重启 Redis 使配置生效
systemctl restart redis
- 简单验证 Redis
redis-cli
AUTH ******
set test_key hello
get test_key
五、第四步:后端项目打包 + 服务器部署
5.1 本地项目打包(解决普通 Jar 无法运行问题)
问题现象
直接默认打包生成的 Jar 包体积很小,上传服务器运行报错:NoClassDefFoundError。
原因:普通 Jar 仅包含自身代码,不包含项目依赖包。
解决方案:配置 Spring Boot 打包插件
在项目 pom.xml 的 <build> 节点内添加打包插件,生成可执行胖 Jar(Fat Jar):
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>3.2.5</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
执行打包命令:
mvn clean package
打包成功后,target 目录会生成 70MB+ Jar 包,内置所有依赖,可直接使用 java -jar 运行。
5.2 上传 Jar 包到服务器
- 打开 WinSCP,本地找到
target目录下的career-assistant-server-1.0.0.jar。 - 拖拽上传至服务器目录:
/home/admin/app。
5.3 启动项目 & 踩坑处理
1. 赋予 Jar 执行权限
cd /home/admin/app
chmod +x career-assistant-server-1.0.0.jar
踩坑 1:端口占用 8080
报错信息:
Web server failed to start. Port 8080 was already in use.
原因:项目默认 8080 端口被占用,线上配置文件未生效。
解决方案:启动命令手动指定运行端口、指定环境配置,后台运行:
# 先查询并杀死残留 Java 进程
ps -ef | grep java
kill -9 进程ID
# 后台启动项目(指定环境 + 指定端口,日志输出到文件)
nohup java -jar career-assistant-server-1.0.0.jar --spring.profiles.active=prod --server.port=9000 > app.log 2>&1 &
踩坑 2:JDK 版本不匹配
报错:类加载异常、java: command not found
原因:服务器默认 JDK 8,Spring Boot 3.x 不兼容,前文已通过安装 Java 17 解决。
5.4 查看启动日志
tail -f app.log
出现以下日志代表项目正常启动:
Tomcat initialized with port 9000 (http)
Started XXXApplication in X seconds
5.5 后端服务验证
浏览器访问:http://***.***.***.***:9000
页面出现 Whitelabel Error Page(Spring Boot 默认 404 页面),并非部署失败:
- ✅ 服务已正常启动,Tomcat 监听 9000 端口
- ✅ 外网可以正常访问服务器端口
- ❗ 仅根路径
/未配置接口控制器,所以返回 404
正确验证:访问项目实际业务接口,例如:
http://***.***.***.***:9000/api/xxx
只要有接口响应(正常数据/参数报错/未登录提示),后端部署完成。
六、第五步:前端 Vue 项目部署(Nginx 方式)
前端采用 Vue3/Vite 开发,使用 Nginx 部署静态资源,是主流部署方案。
6.1 前端本地打包
- 进入前端项目根目录,执行打包命令(Vite 项目):
npm run build
- 打包完成后,项目会生成
dist文件夹,该文件夹内就是所有前端静态资源(html、js、css、图片)。
6.2 服务器安装 Nginx
# 在线安装 Nginx
yum install -y nginx
# 设置开机自启、启动服务
systemctl enable nginx
systemctl start nginx
# 查看 Nginx 运行状态
systemctl status nginx
6.3 上传前端静态资源
- 使用 WinSCP,在服务器新建前端目录,示例:
/home/admin/web。 - 将本地打包好的
dist文件夹整体拖拽上传到/home/admin/web目录下。
6.4 修改 Nginx 配置文件
- Nginx 默认配置文件路径:
/etc/nginx/nginx.conf,使用 WinSCP 下载到本地编辑。 - 核心配置(静态资源 + 后端接口代理,解决跨域):
server {
listen 80;
server_name ***.***.***.***; # 服务器公网IP
# 前端静态资源目录
root /home/admin/web/dist;
index index.html;
# 解决 Vue 路由 history 模式刷新 404
location / {
try_files $uri $uri/ /index.html;
}
# 接口代理:转发请求到后端 9000 端口,解决跨域问题
location /api/ {
proxy_pass http://xxxxxx:9000/api/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
- 编辑完成后,将
nginx.conf上传覆盖服务器原文件。
6.5 重启 Nginx 生效
# 检查配置文件语法是否有误
nginx -t
# 重启 Nginx
systemctl restart nginx
6.6 前端访问验证
浏览器直接访问服务器公网IP:
http://***.***.***.***
正常打开前端页面,且页面可以正常调用后端接口,代表前后端全套部署完成。
七、服务器常用运维命令汇总
7.1 后端相关
# 查看 Java 进程
ps -ef | grep java
# 实时查看后端日志
tail -f /home/admin/app/app.log
# 停止后端项目
kill -9 进程ID
# 重启后端项目
nohup java -jar career-assistant-server-1.0.0.jar --spring.profiles.active=prod --server.port=9000 > app.log 2>&1 &
7.2 Nginx 前端相关
# 启动 Nginx
systemctl start nginx
# 停止 Nginx
systemctl stop nginx
# 重启 Nginx
systemctl restart nginx
# 检查 Nginx 配置
nginx -t
7.3 Redis 相关
systemctl start redis
systemctl stop redis
systemctl restart redis
八、全套部署总结 & 避坑要点
-
服务器前置操作
购买 ECS 后第一时间配置安全组放行端口,22、80、9000 等必需端口不要遗漏。 -
WinSCP 使用技巧
优先用图形化工具上传文件、修改配置,新手不用强行记忆命令行编辑命令。 -
版本强制匹配
Spring Boot 3.x 必须搭配 Java 17+,CentOS 7 建议离线安装 JDK,放弃系统自带 JDK8。 -
后端打包要求
必须配置spring-boot-maven-plugin生成 Jar,否则必然报类缺失异常。 -
端口统一规范
后端端口、Nginx 代理端口、安全组放行端口三者保持一致。 -
前端部署重点
Vue history 路由必须配置try_files解决刷新 404;通过 Nginx 反向代理接口,彻底解决跨域问题。 -
敏感信息防护
公网IP、服务器密码、Redis/数据库密码、密钥等,发布博客、文档时务必打码,保障服务器安全。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)