SpringBoot+Vue 前后端分离阿里云宝塔完整部署踩坑实录✨(注册 404 / 反向代理 / JDK 找不到全解决)
一、前言💬
哈喽各位码友!最近在做 EMS 员工管理系统课程项目,从本地打包到阿里云宝塔服务器部署,踩坑踩了整整一下午😭
- 前端点击注册永远提示「注册失败」,F12 抓包接口 404 Not Found
- Nginx 反向代理路径嵌套冲突,前端
/api和后端/home上下文疯狂打架 - 更新 Jar 包重启后端,频繁报错
java: No such file or directory找不到 JDK - 数据库 SQL 脚本导入后不生效,必须重启后端才能加载数据表
全程边调试边截图,整理一套可直接复刻的完整流程,所有坑点附带解决方案!部署遇到任何问题评论区甩截图,我看到立刻回复📩
二、整体环境一览📋
表格
| 模块 | 技术版本 | 服务器环境 |
|---|---|---|
| 后端 | SpringBoot2.7.6 + MyBatis-Plus + Redis | 阿里云 CentOS7 + 宝塔 Linux 面板 |
| 前端 | Vue2 打包 dist 静态资源 | Nginx 反向代理托管 |
| 运行环境 | JDK1.8 | 宝塔自带 JDK |
| 数据库 | MySQL8.0 | 宝塔面板可视化建库导 SQL |
| 开放端口 | 8081 (前端站点)、9763 (后端服务)、3306 (数据库) | 阿里云安全组 + 宝塔防火墙双放行 |
三、后端 SpringBoot 打包 + 服务器上传📦
3.1 IDEA 打包 Jar 包
- Maven 生命周期先执行
clean清理旧构建文件 - 再执行
package打包,无报错后在target目录拿到包:ems-0.0.1-SNAPSHOT.jar - 关键配置(避坑核心)
yaml
# application.yml
server:
port: 9763
servlet:
context-path: /home # 后端全局访问前缀,后面Nginx代理完全依赖这个配置
3.2 宝塔上传后端文件
- 打开宝塔【文件】,新建目录
/www/wwwroot/backend - FTP 工具 / 宝塔文件上传功能,将 Jar 包上传至 backend 文件夹
3.3 MySQL 数据库导入建表脚本
- 宝塔侧边栏【数据库】→ 创建数据库(库名与 yml 配置一致)
- 点击数据库操作栏【导入】,上传项目
.sql脚本文件 - ⚠️踩坑提醒:只导入 SQL 没用!必须重启后端服务,程序才会读取、初始化数据表结构
四、Vue 前端打包 + Nginx 站点反向代理配置🌐
4.1 Vue 打包 dist 静态文件
- 项目根目录执行打包命令:
npm run build,生成 dist 文件夹 - 生产环境请求地址配置
js
运行
// .env.production
VITE_API_BASE_URL = '/api' // 统一所有接口以/api开头,交给Nginx转发后端
4.2 宝塔创建 8081 端口前端站点
- 宝塔【网站】→【添加站点】
- 域名:填写你的阿里云公网 IP(示例:8.133.174.232)
- 端口:
8081 - 网站根目录:
/www/wwwroot/vue8081
- 将 dist 内部所有文件上传到
vue8081目录下 - 点击站点【配置文件】,全量替换下面 Nginx 代码(终极兼容 /home 上下文)
nginx
server {
listen 8081;
server_name 8.133.174.232;
root /www/wwwroot/vue8081;
index index.html;
// Vue history路由模式必备,防止刷新页面404
location / {
try_files $uri $uri/ /index.html;
}
// 反向代理核心规则
location /api/ {
proxy_pass http://127.0.0.1:9763/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
- 保存配置 → 宝塔右上角【重载 Nginx】生效
五、后端启动、实时日志查看(解决 JDK 找不到报错)🚀
5.1 宝塔终端切入后端目录
打开宝塔【终端】工具,切换到 Jar 所在文件夹
bash
运行
cd /www/wwwroot/backend
5.2 关闭正在运行的旧后端进程
bash
运行
# 一键杀死全部Java进程
pkill -f java
5.3 两种启动模式(按需选用)
模式 1:前台启动(调试首选✅ 终端实时打印完整启动日志)
运行后终端会完整输出 SpringBoot Banner、端口、上线提示,和截图展示效果一模一样
bash
运行
java -jar ems-0.0.1-SNAPSHOT.jar
缺点:关闭终端页面服务就停止,适合刚更新 Jar、排查报错场景
模式 2:后台常驻启动(正式上线用,7×24 小时挂机)
bash
运行
# 后台运行,日志存入server.log文件
nohup java -jar ems-0.0.1-SNAPSHOT.jar > server.log 2>&1 &
# 实时滚动查看启动日志
tail -f server.log
小知识:按下Ctrl+C只会退出日志查看窗口,后端程序依旧在服务器后台稳定运行!
❗高频报错:java: No such file or directory 根治方案
报错原因
- 宝塔 JDK 环境变量失效,系统识别不到 java 指令
- 手动填写错误的 JDK 绝对路径,目录不存在
修复步骤
- 全局检索服务器内真实 JDK 位置
bash
运行
find /www -name java
find /usr -name java
- 拿到真实路径后,用全路径启动 Jar 包(示例)
bash
运行
/www/server/jdk/bin/java -jar ems-0.0.1-SNAPSHOT.jar
- 一劳永逸:编辑系统环境变量配置
vi /etc/profile,写入 JDK 全局环境变量
5.4 后端启动成功判定标识
终端出现下面两行内容,代表 9763 端口监听、服务完全启动:
plaintext
Tomcat started on port(s): 9763 (http) with context path '/home'
Started EmsApplication in 12.8 seconds
《能源系统》API服务成功上线!!
六、头号大坑:前端注册按钮失败、接口 404 完整排错🔍
故障现象
点击注册 → 页面红字提示「注册失败」,F12 网络面板看到 POST 请求状态 404 请求地址示例:http://ip:8081/api/home/user/register
底层根源
- 后端真实接口地址:
http://127.0.0.1:9763/home/api/user/register - 初期 Nginx 配置写错,路径重复叠加
/home- 错误配置示例:
proxy_pass http://127.0.0.1:9763/home/api/; - 拼接后果:前端
/api+ Nginx 追加/home/api→ 地址变成/home/api/home/user/register,直接 404
- 错误配置示例:
- 修正后
proxy_pass http://127.0.0.1:9763/;,路径完美对齐匹配
两步自检验证
- 终端本地 curl 测试后端接口连通性
bash
运行
curl http://127.0.0.1:9763/home/api/user/register
curl 能返回数据 = 后端无故障,只需要修正 Nginx 代理配置 2. 刷新前端页面,填写账号信息点击注册,出现注册成功,请登录即前后端全部打通!
七、更新后端 Jar 包标准重启流程🔄
每次修改代码、重新打包上传新 Jar,固定三步操作,零翻车:
- 宝塔文件管理器替换旧 Jar 包
- 终端执行杀进程:
pkill -f java - 调试用前台启动
java -jar xxx.jar;生产环境用 nohup 后台启动 + tail 实时看日志
八、服务器安全必做设置⚠️
- 阿里云安全组、宝塔防火墙双向放行 8081、9763、3306 端口
- MySQL 数据库设置高强度密码,禁止 root 账号远程直连
- 定期执行
dnf upgrade更新系统安全补丁 - 业务操作尽量不用 root 最高权限,可新建普通运维用户
九、读者互动问答区🙋
Q1:我的后端没有配置 context-path:/home,Nginx 怎么改?
A:把 yml 里 context-path 改成/,Nginx 代理写成:
nginx
location /api/ {
proxy_pass http://127.0.0.1:9763/api/;
}
Q2:前台启动一关网页服务就停了怎么办?
A:切换模式 2 nohup 后台启动,进程脱离终端窗口,服务器不关机就持续运行
Q3:注册成功登录报 500 服务器错误?
A:依次排查三点:Redis 服务是否启动、MySQL 数据表是否完整导入、yml 数据库账号密码是否填写正确
大家部署碰到任何报错,直接贴终端日志 / F12 网络截图到评论区,我逐条帮你定位问题!文章对你有帮助麻烦点赞 + 收藏,下次部署直接打开复制操作❤️
附加运维小技巧💡
- 日志文件 server.log 体积过大,一键清空:
> server.log - 快速查看后端是否在运行:
ps -ef | grep java - 规范操作:本地先完整联调跑通前后端,再上传服务器部署,大幅减少线上踩坑
- 长期运行可以搭配宝塔计划任务,定时备份 Jar 包、数据库、日志文件
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)