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

【退役之再次线上部署】Spring Boot + VUE + Nginx + MySQL

这篇博客写在凌晨 4 点 20 分,这个时候我刚线上部署完成 web 项目,自己写的全栈项目
这个点儿,也睡不着了,索性就写篇博客记录一下

一、踩坑实录

这个是 最重要的,所以写在前面

Nginx 配置文件

location

location /admin {
            
     root   /home/project/backstage/dist; 
     index  index.html index.htm;
 }

这里最坑的是 root 指令,root 就是代替host的,
在这里插入图片描述
如你所见,它最终访问的路径就是 /home/project/backstage/dist/admin ,然后 index 指令会在此目录下搜索 index.html,所以如果存在index.html,那么最终访问到的就是 /home/project/backstage/dist/admin/index.html

(我刚开始想当然的认为,/admin 路径 会转发到 /home/project/backstage/dist,这里害得我把nginx 配置文件学了遍,最后在一个 nginx 部署实战课视频里面,才知道有这么一遭,所以真不能想当然。)

接口调用关系的设计

  1. 我开发使用的操作系统是 windows,部署到服务器的时候,后端还行,只需要修改上传图片的存储路径;但是前端用到的请求路径就多了,需要做较多修改。
  2. 最终我采用的方案是:
    • 后端接口前统一加上/api,比如 /api/product
    • 前端门户系统,使用80端口
    • 前端后台系统,使用81端口
    • 之所以采用两个接口,是因为门户系统和后台系统结构极为相似,比如 index.html 都需要加载 /assets 下的文件,如果使用同一个接口,那么这里就非常不好处理,我尝试过用正则表达式捕获组解决这个问题,但水平有限,无效。
    • 事实证明,把它们分开是明智的,因为后面就比较顺利了。

前端代码的请求地址方面耦合得比较严重,后续要想办法解耦

二、总结经验

  1. 使用 linux 系统进行开发,这样就不需要再部署的时候,修改路径了。
  2. 编写代码时,要注意对文件路径和请求路径解耦
  3. 可以考虑使用docker来解决部署上线的问题,因为这样部署太麻烦了,需要很多次修改。

三、整体思路

最后说一下web 项目整体部署思路吧

1. 在本地开发后,先在本地部署测试,之后再线上部署,这样更容易查找问题

2. 安装MySQL,把本地的MySQL的结构和数据复刻到云服务器(这很简单,直接导出sql就可以)

3. 部署后端(java -jar *.jar --server_name=8080)

4. 编译前端文件(yarn build)上传到云服务器

5. 安装 nginx,根据自己需要,修改配置文件,主要是设置server,还有一个client_max_body_size 设置文件上传大小限制的。

困了,写得有点乱,休息睡觉,狗命要紧,以后有机会再梳理和扩展一下此博客
这是我退伍之后又一次开发了全栈项目,之前的一次全栈经历还是上学的时候嘞,有点纪念意义,故作此篇。


四、问题解决

关于数据请求 url 耦合的问题

解决办法: 使用 nginx 代理实现解耦。比如 前端80 端口要请求后端 8080 端口的数据,则使用 nginx 的 server 监听 80 端口,将请求代理到后端

server {
	listen 80;
	server_name xxxxxx;
	location /api {
		proxy_pass http://localhost:8080
	}
}
...

那么80端口(门户系统)中向后端的请求,只需要 使用/api 开头就可以被代理到后端,当然,后端的 controller 也需要使用 /api 作为开头,才能匹配。

关于开发系统和部署系统不一致的问题

其实解决了数据请求 url 耦合的问题,这个问题就迎刃而解了,本地部署和云端部署唯一的区别,就是 nginx 配置文件不一样(因为项目文件存放的路径不一样,windows 和 linux 的文件路径规则写法也不一样)。

五、所以现在的开发环境和部署的问题就解决了,暂时用不到 docker 部署,本着用不到就不用的原则,本着减少变动的原则,暂时就不用 docker 部署了


http://www.kler.cn/a/307450.html

相关文章:

  • Gurobi学术版+Anaconda安装步骤
  • kafka消费数据太慢了,给优化下
  • 【MySQL从入门到放弃】InnoDB磁盘结构(一)
  • Elasticsearch(ES)简介
  • 《AI 使生活更美好》
  • 【MySQL】数据库知识突破:数据类型全解析与详解
  • C++ | Leetcode C++题解之第412题Fizz Buzz
  • PointNet++改进策略 :模块改进 | EdgeConv | DGCNN, 动态图卷积在3d任务上应用
  • vue中v-bind和v-model的区别和应用
  • 车载软件架构 --- SOA设计与应用(中)
  • Spring Boot- 配置中心问题
  • 【Hot100】LeetCode—51. N 皇后
  • F12抓包11:UI自动化 - Recoder(记录器)
  • 【裸机装机系列】3.kali(ubuntu)-更新sources.list并重启
  • 华为OD机试真题-单词接龙-E卷(含题目描述+解题思路+代码解析)
  • 【CMake】使用CMake在Visual Studio 构建多cpp文件项目
  • pytest 接口测试
  • C++——写一函数求sinh(x)的值,求sinh(x)的近似公式为sinh(x)=(e^x+e^(-x))/2。
  • Java项目: 基于SpringBoot+mybatis+maven校园资料分享平台(含源码+数据库+答辩PPT+毕业论文)
  • 时空大数据平台:激活新质生产力的智慧引擎
  • GitLab CI_CD 从入门到实战笔记
  • 响应式CSS 媒体查询——WEB开发系列39
  • 【系统架构设计师-2015年真题】案例分析-答案及详解
  • vulkano (rust) 画一个三角形 (vulkan 渲染窗口初始化 (Linux) 下篇)
  • [000-002-01].第03节:Linux系统下Oracle的安装与使用
  • 【C++11 —— 线程库】