当前位置: 首页 > news >正文

项目部署到服务器教程

适配环境: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 函数修改数据库密码

http://www.jsqmd.com/news/1008830/

相关文章:

  • 2026年电力装备GEO优化公司哪家好?权威评测:告别“流量内卷”,只看“全意图”实效 - GEO优化
  • 2026 讲解器品牌深度解析:易优游 —— 文旅、研学与政企接待的高性价比首选
  • 2026年近期宿州好的DJ潮服批发厂家全面评测:聚焦靓雅服饰的可靠之道 - 品牌鉴赏官2026
  • TB6612驱动模块接线避坑指南:编码电机那6根线到底怎么接?一张图搞定
  • 深入Scrapy+Redis分布式架构:亿级知乎用户数据爬取实战
  • 新手必看:用Hypack 2023搭配R2Sonic多波束,从设备接线到数据采集的完整避坑指南
  • 嵌入式存储接口协议解析:MMC/SD响应机制与Memory Stick控制器实战
  • KKS-HF Patch终极指南:3步解决Koikatsu Sunshine语言障碍与功能限制
  • 2026年更新:湖州不错的物流公司深度解析——湖州杭平物流有限公司 - 品牌鉴赏官2026
  • 2026年公园休闲椅选购指南:行业趋势、主流类型与代表性企业解析 - 优质品牌商家
  • 别再手动敲代码了!用uniAdmin的Schemea2Code,5分钟搞定uni-app后台增删改查页面
  • i.MX23 ECC8硬件加速器实战:与GPMI、APBH DMA协同构建可靠NAND驱动
  • 触觉感知技术在农业采摘机器人中的应用与优化
  • 2026年工业滑环市场观察:耐用的帽式滑环品牌与供应商推荐榜单 - 优质品牌商家
  • MCU系统集成模块(SIM)配置:时钟管理与引脚复用实战解析
  • 3个关键功能解锁Mac睡眠管理新境界:SleeperX深度解析
  • 手把手教你用STM32的SPI驱动HI3593芯片实现Arinc429通信(附完整代码)
  • 跨平台内容采集工具:一键搞定多平台资源保存的终极方案
  • Mac触控板Windows驱动终极指南:如何在Windows 10/11上实现完美触控体验
  • 2026年巴西专线小包物流怎么选?实测6家服务商通关时效与COD回款能力对比 - 优质品牌商家
  • SpringMVC 实现简易加法器
  • 从电子秤到智能设备:用STM32F4和HX711做个带蓝牙APP的迷你压力监测仪(附CubeMX工程)
  • UniApp项目实战:用uQRCode生成带动态Logo和样式切换的会员卡二维码
  • 告别单调播报:用uniapp插件Ba-TTS给你的App加上‘会说话’的震动反馈(附完整代码)
  • Shell函数与自动化:让脚本从“能用“进化到“好用“
  • R语言输出csv文件
  • 2025-2026企业出海ODI备案服务机构选择指南:合规路径与实务案例深度解析 - 优质品牌商家
  • 深度实战:Python爬虫完美解析QQ音乐歌单——接口逆向分析与数据抓取全攻略
  • 从BERT到GPT-4:手把手教你用Hugging Face玩转Prompt Tuning实战(附代码)
  • NXP MC56F81xxxL ADC并行扫描模式详解与电机控制应用