一、前言💬

哈喽各位码友!最近在做 EMS 员工管理系统课程项目,从本地打包到阿里云宝塔服务器部署,踩坑踩了整整一下午😭

  1. 前端点击注册永远提示「注册失败」,F12 抓包接口 404 Not Found
  2. Nginx 反向代理路径嵌套冲突,前端/api 和后端/home上下文疯狂打架
  3. 更新 Jar 包重启后端,频繁报错 java: No such file or directory 找不到 JDK
  4. 数据库 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 包

  1. Maven 生命周期先执行clean清理旧构建文件
  2. 再执行package打包,无报错后在target目录拿到包:ems-0.0.1-SNAPSHOT.jar
  3. 关键配置(避坑核心)

yaml

# application.yml
server:
  port: 9763
  servlet:
    context-path: /home  # 后端全局访问前缀,后面Nginx代理完全依赖这个配置

3.2 宝塔上传后端文件

  1. 打开宝塔【文件】,新建目录 /www/wwwroot/backend
  2. FTP 工具 / 宝塔文件上传功能,将 Jar 包上传至 backend 文件夹

3.3 MySQL 数据库导入建表脚本

  1. 宝塔侧边栏【数据库】→ 创建数据库(库名与 yml 配置一致)
  2. 点击数据库操作栏【导入】,上传项目.sql脚本文件
  3. ⚠️踩坑提醒:只导入 SQL 没用!必须重启后端服务,程序才会读取、初始化数据表结构

四、Vue 前端打包 + Nginx 站点反向代理配置🌐

4.1 Vue 打包 dist 静态文件

  1. 项目根目录执行打包命令:npm run build,生成 dist 文件夹
  2. 生产环境请求地址配置

js

运行

// .env.production
VITE_API_BASE_URL = '/api' // 统一所有接口以/api开头,交给Nginx转发后端

4.2 宝塔创建 8081 端口前端站点

  1. 宝塔【网站】→【添加站点】
    • 域名:填写你的阿里云公网 IP(示例:8.133.174.232)
    • 端口:8081
    • 网站根目录:/www/wwwroot/vue8081
  2. 将 dist 内部所有文件上传到vue8081目录下
  3. 点击站点【配置文件】,全量替换下面 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;
    }
}
  1. 保存配置 → 宝塔右上角【重载 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 根治方案

报错原因
  1. 宝塔 JDK 环境变量失效,系统识别不到 java 指令
  2. 手动填写错误的 JDK 绝对路径,目录不存在
修复步骤
  1. 全局检索服务器内真实 JDK 位置

bash

运行

find /www -name java
find /usr -name java
  1. 拿到真实路径后,用全路径启动 Jar 包(示例)

bash

运行

/www/server/jdk/bin/java -jar ems-0.0.1-SNAPSHOT.jar
  1. 一劳永逸:编辑系统环境变量配置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

底层根源

  1. 后端真实接口地址:http://127.0.0.1:9763/home/api/user/register
  2. 初期 Nginx 配置写错,路径重复叠加/home
    • 错误配置示例:proxy_pass http://127.0.0.1:9763/home/api/;
    • 拼接后果:前端/api + Nginx 追加/home/api → 地址变成/home/api/home/user/register,直接 404
  3. 修正后proxy_pass http://127.0.0.1:9763/;,路径完美对齐匹配

两步自检验证

  1. 终端本地 curl 测试后端接口连通性

bash

运行

curl http://127.0.0.1:9763/home/api/user/register

curl 能返回数据 = 后端无故障,只需要修正 Nginx 代理配置 2. 刷新前端页面,填写账号信息点击注册,出现注册成功,请登录即前后端全部打通!

七、更新后端 Jar 包标准重启流程🔄

每次修改代码、重新打包上传新 Jar,固定三步操作,零翻车:

  1. 宝塔文件管理器替换旧 Jar 包
  2. 终端执行杀进程:pkill -f java
  3. 调试用前台启动java -jar xxx.jar;生产环境用 nohup 后台启动 + tail 实时看日志

八、服务器安全必做设置⚠️

  1. 阿里云安全组、宝塔防火墙双向放行 8081、9763、3306 端口
  2. MySQL 数据库设置高强度密码,禁止 root 账号远程直连
  3. 定期执行dnf upgrade更新系统安全补丁
  4. 业务操作尽量不用 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 网络截图到评论区,我逐条帮你定位问题!文章对你有帮助麻烦点赞 + 收藏,下次部署直接打开复制操作❤️

附加运维小技巧💡

  1. 日志文件 server.log 体积过大,一键清空:> server.log
  2. 快速查看后端是否在运行:ps -ef | grep java
  3. 规范操作:本地先完整联调跑通前后端,再上传服务器部署,大幅减少线上踩坑
  4. 长期运行可以搭配宝塔计划任务,定时备份 Jar 包、数据库、日志文件
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐