适配环境:CentOS + Nginx + SpringBoot (Jar) + MySQL 8.0
服务器内网业务路径统一:/home/flowerShop
项目整体架构
前端:Vue3+Vite 项目
shixun-ui,打包产出dist静态文件,Nginx 托管 80 端口后端:SpringBoot 打包
backend.jar,监听8080端口数据库:MySQL8.0,业务库名
flower_shop反向代理:Nginx 将
/api所有请求转发到后端 8080
1.后端部署
1.1 jar包
进入后端项目文件夹,使用cmd命令:
mvn clean package -DskipTests
然后上传服务器。
scp backend.jar 账户名@服务器公网ip:/home/
1.2 停止旧后端服务
kill -9 $(ps -ef | grep backend.jar | grep -v grep | awk '{print $2}')1.3 启动服务
方法一:
java -jar backend.jar --server.port=8080 > log.out 2>&1 & disown # 碎碎念:这一行指令我还不知道有什么用
方法二:
后台运行,日志存入 log.out,忽略终端挂断信号
nohup java -jar backend.jar --server.port=8080 > log.out 2>&1 &
1.4 检查服务是否启动
实时查看启动日志,排查异常
tail -f log.out
如果日志结尾有xxxApplication.java的字样应该就启动成功了。
看一下端口是不是正常监听:
ss -lnp | grep 8080 或者 netstat -lnp | grep 8080
检测一下连通性:
curl http://127.0.0.1:8080/api/auth/login
2.前端部署
包括前端打包+Nginx反向代理部署
2.1 修改.env
之前你肯定一直在本地跑的服务,所以要记得修改一下这里:
旧: VITE_BASE_URL='http://localhost:8080' 新: VITE_BASE_URL=''
2.2 打包
npm run build
打完包应该会有一个dist,上传到服务器就可以,这里面都是一些静态资源。
2.3 Nginx站点配置
使用vi指令新建一个配置文件:
vi /etc/nginx/conf.d/flowerShop.conf
server { listen 80; server_name 服务器公网IP; root /home/flowerShop/frontend/dist; index index.html; # Vue路由模式,解决刷新404 location / { try_files $uri $uri/ /index.html; } # 反向代理/api全部请求到后端8080 location /api/ { 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; } }按照自己的环境配置就好。
2.4 Nginx重载生效
校验配置语法:
nginx -t
重启Nginx
systemctl restart nginx // 设置开机自启动 systemctl enable nginx
2.5 (补)权限修复
非必做:你的服务器可能有多个用户,希望其他用户也能够修改你的文件:
# 整体赋权 chmod -R 755 /home/flowerShop chown -R root:root /home/flowerShop
2.6 端口放行
安装防火墙:
yum install firewalld -y systemctl enable firewalld # 开机自启动 firewall-cmd -status # 查看状态
放行我们需要在外网访问到的端口:
#永久放行SSH、网页80、后端8080端口 firewall-cmd --add-port=22/tcp --permanent firewall-cmd --add-port=80/tcp --permanent firewall-cmd --add-port=8080/tcp --permanent # 重载规则生效 firewall-cmd --reload
3.数据库部署
3.1 启动数据库
systemctl start mysqld
3.2 重置root密码(非必要)
systemctl stop mysqld # 停止数据库 mysqld_safe --skip-grant-tables & # 跳过权限校验临时启动 mysql -u root # 免密登录mysql
进入数据库之后:
use mysql; flush privileges; ALTER USER 'root'@'localhost' IDENTIFIED mysql_native_password BY '123456'; exit;
关闭临时进程,重启正式MySQL
pkill mysqld systemctl start mysqld
验证登录
mysql -u root -p
3.3 执行数据库初始化脚本
在数据库里面执行:
source /home/flowerShop/database_init.sql;
4.问题
问题 1:Nginx 500 / 页面打不开,日志 Permission denied
原因:项目存放在/root,Nginx 无访问权限
解决:整体迁移项目到/home/flowerShop,执行赋权命令
问题 2:MySQL 登录报错ERROR 1045 (28000): Access denied
原因:root 密码错误
解决:跳过权限模式重置 MySQL root 密码为123456
问题 3:后端报错Public Key Retrieval is not allowed
原因:MySQL8.0 与新版 JDBC 加密校验策略问题
解决:连接 URL 追加参数&allowPublicKeyRetrieval=true,重启后端
问题 4:Request method 'GET' not supported
原因:登录接口限定 POST 请求,手动浏览器直接访问接口地址触发;页面表单提交不会出现该异常,无需处理
问题 5:页面提示「用户名或密码错误」
未执行数据库初始化脚本,缺少用户表与初始数据 → 重新
source执行database_init.sql后端密码采用 BCrypt 加密,不能使用 MD5 函数修改数据库密码