项目部署到服务器教程

项目部署到服务器教程

适配环境:CentOS + Nginx + SpringBoot (Jar) + MySQL 8.0

服务器内网业务路径统一:/home/flowerShop

项目整体架构

  1. 前端:Vue3+Vite 项目shixun-ui,打包产出dist静态文件,Nginx 托管 80 端口

  2. 后端:SpringBoot 打包backend.jar,监听8080端口

  3. 数据库:MySQL8.0,业务库名flower_shop

  4. 反向代理: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:页面提示「用户名或密码错误」

  1. 未执行数据库初始化脚本,缺少用户表与初始数据 → 重新source执行database_init.sql

  2. 后端密码采用 BCrypt 加密,不能使用 MD5 函数修改数据库密码