目录

1. 文件上传操作

1.1 编辑FileService

1.2 文件上传代码测试

2. 文件删除操作

2.1 业务接口说明

2.2 编辑FileController

2.3 编辑FileService

3. 反向代理

3.1 业务需求

3.2 反向代理介绍

3.2.1 知识铺垫

3.2.2 反向代理特点

3.2 正向代理介绍

3.2.1 正向代理介绍

3.2.2 正向代理特点

3.3 nginx

3.3.1 Nginx介绍

3.3.2 Nginx特点

3.3.3 Nginx下载

3.3.4 Nginx 安装和使用

3.3.5 关于nginx 80端占用问题说明

3.3.6 关于nginx 启动项说明

3.4 Nginx反向代理机制

3.5 Nginx实现图片代理

3.6 图片回显流程图

3.7 修改hosts文件

3.7.1 检查是否只读

3.7.2 检查权限

3.7.3 修改hosts文件

4 项目发布准备

4.1 项目发布

4.2 前端发布准备

4.3 前端项目发布

4.3.1 业务说明

4.3.2 前端项目发布

4.3.3 前端代码测试

4.4 后端项目发布

4.4.1 动态获取端口号

4.4.2 项目发布

4.4.3 nginx完成后端发布

4.4.4 后端项目测试

1. 知识内容扩展( 集群部署)

1.1 集群部署流程图

1.2 部署集群

1.2.1 启动多个进程

1.2.2 部署集群

1.3 nginx负载均衡策略

1.3.1 轮询策略

1.3.2 权重策略

1.3.3 IP_HASH策略

1.3.4 nginx常见属性

1.3.5 项目如何实现在线部署


1. 文件上传操作

1.1 编辑FileService

package com.jt.service;import com.jt.vo.ImageVO;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;@Service
public class FileServiceImpl implements FileService{//定义文件的根目录private String rootDir = "D:/project3/images";//定义图片服务器网址private String rootURl = "http://image.jt.com";/*** 思路:*  1.校验文件是否为图片  校验图片类型*  2.防止文件为恶意程序  木马.exe.jpg*  3.分目录存储         按照时间维度划分*  4.防止文件重名       UUID*/@Overridepublic ImageVO upload(MultipartFile file) {//1.获取图片名称,全部转化为小写  abc.jpgString fileName = file.getOriginalFilename().toLowerCase();if(!fileName.matches("^.+\\.(jpg|png|gif)$")){return null;}//2.通过校验宽度和高度判断是否为图片 bufferedImage图片包装对象try {BufferedImage bufferedImage = ImageIO.read(file.getInputStream());int width = bufferedImage.getWidth();int height = bufferedImage.getHeight();if(width == 0 || height == 0){return null;}//3.实现分目录的存储String datePath = new SimpleDateFormat("/yyyy/MM/dd/").format(new Date());//D:/project3/images/2025/11/11/String fileDir = rootDir + datePath;File dirFile = new File(fileDir);if(!dirFile.exists()){dirFile.mkdirs();}//4.动态生成UUIDString UUID = java.util.UUID.randomUUID().toString();int index = fileName.lastIndexOf(".");String fileType = fileName.substring(index);fileName = UUID+fileType;//5.实现文件上传  准备文件的全路径String path = fileDir + fileName;file.transferTo(new File(path));//6.准备ImageVO数据返回 /2021/11/11/uuid.jpg//封装VO对象对象String virtualPath = datePath + fileName;//String urlPath = "https://img14.360buyimg.com/n0/jfs/t1/172855/37/23003/136174/61b053d3Eb780b286/448d26aa148e6ea7.jpg";//按照要求封装图片网络地址//http://image.jt.com/2021/11/11/uuid.jpgString urlPath =  rootURl + virtualPath;System.out.println(urlPath);ImageVO imageVO = new ImageVO(virtualPath,urlPath, fileName);return imageVO;} catch (IOException e) {//一般条件下为了不影响代码结构,将检查异常,转化为运行时异常e.printStackTrace();throw new RuntimeException(e);}}
}

1.2 文件上传代码测试

1.浏览器地址测试

2. 本地磁盘地址测试

2. 文件删除操作

2.1 业务接口说明

参数名称    参数说明    备注
virtualPath    文件上传的虚拟的路径    删除时需要磁盘路径一起删除

请求参数
参数名称  参数说明 
virtualPath  备注
返回值结果
参数名称 参数说明  备注
status   状态信息  200表示服务器请求成功 201表示服务器异常
msg  服务器返回的提示信息  可以为null
data  服务器返回的业务数据   可以为null

前端请求参数说明:

2.2 编辑FileController

 /*** 完成图片的删除操作* URL: http://localhost:8091/file/deleteFile* 参数: virtualPath* 返回值: SysResult对象*/@DeleteMapping("/deleteFile")public SysResult deleteFile(String virtualPath){fileService.deleteFile(virtualPath);return SysResult.success();}

2.3 编辑FileService

 //删除文件  需要文件全路径@Overridepublic void deleteFile(String virtualPath) {String localPath = rootDir + virtualPath;File file = new File(localPath);if(file.exists()){ //如果文件存在,则删除file.delete();}}

3. 反向代理

3.1 业务需求

需求说明: 当用户完成图片上传之后 会根据网络地址访问图片,但是查找的图片一定存在于磁盘中.
URL地址: http://image.jt.com/2021/12/16/f9981c76-e6a7-49fa-88d9-3be0851dbf50.jpg
磁盘地址: D:/project3/images/2021/12/16/f9981c76-e6a7-49fa-88d9-3be0851dbf50.jpg

技术难点:
1.当用户访问URL网络地址时,应该按照磁盘地址进行查找!
如何将网络地址转化为磁盘地址?

3.2 反向代理介绍

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。

3.2.1 知识铺垫

如果网站将真实地址直接告知用户.导致整个服务器不安全. 所以需要采用代理的技术规避该问题.

3.2.2 反向代理特点

  1. 反向代理服务器介于用户和目标服务器之间
  2. 用户从反向代理服务器获取资源, 用户以为反向代理服务器就是目标服务器.
  3. 用户不清楚真实的服务器到底是谁, 保护了真实服务器的信息. 也称之为 "服务器端代理"

3.2 正向代理介绍

3.2.1 正向代理介绍

正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。

3.2.2 正向代理特点

  1. 正向代理服务器介于客户端和原始服务器之间.
  2. 用户访问正向代理服务器,并且指定目标服务器地址.
  3. 服务器端不清楚到底是谁访问的,以为是正向代理服务器访问的. 保护了用户信息. 也称之为客户端代理.

3.3 nginx

3.3.1 Nginx介绍

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

3.3.2 Nginx特点

  1. nginx是一块开源免费的 轻量级的反向代理服务器/web服务器.
  2. nginx并发能力强 理论值: 5万次/秒 实际值: 3万次/秒
    tomcat: 150-220 —>1000个/秒 内存占用200M
  3. nginx占用内存少 不超过2M

3.3.3 Nginx下载

URL地址: http://nginx.org/en/download.html

3.3.4 Nginx 安装和使用

说明:
1.nginx启动会占用80端口!!
2.nginx启动路径不要有中文/空格/特殊字符 底层开发语言:C语言

访问测试:

3.3.5 关于nginx 80端占用问题说明

  1. 检查端口号占用
  2. 打开任务管理器
  3. 关于80端口 被PID=4占用说明

3.3.6 关于nginx 启动项说明

说明: nginx的启动每次都会启动2个进程项.
主进程: 主要提供反向代理服务. 占用内存大的
守护进程: 防止主进程意外关闭. 占用内存小的

3.3.7 nginx 命令(熟练掌握)
说明: nginx的命令需要在根目录中运行 nginx.exe 所在的路径就是根目录
命令:
1. 启动nginx start nginx
2. 重启nginx nginx -s reload
3. 关闭nginx nginx -s stop

3.4 Nginx反向代理机制

 http {#每个反向代理服务,就是一个serverserver {#nginx默认监听端口号 默认都是80listen       80;#nginx要拦截的域名server_name  localhost;#拦截所有的请求location / {# root 代表代理的是一个目录 root   html;# 配置默认访问的首页index  index.html index.htm;}}    }

3.5 Nginx实现图片代理

URL地址: http://image.jt.com/2021/12/16/f9981c76-e6a7-49fa-88d9-3be0851dbf50.jpg
磁盘地址: D:/project3/images/2021/12/16/f9981c76-e6a7-49fa-88d9-3be0851dbf50.jpg
代理机制:
域名: http://image.jt.com:80
代理为:
D:/project3/images

配置图片代理:

#配置图片代理server {listen 80;server_name  image.jt.com;location / {root D:/project3/images;}}

编辑完成之后,重启nginx

3.6 图片回显流程图

3.7 修改hosts文件

文件位置: C:\Windows\System32\drivers\etc

3.7.1 检查是否只读

如果该文件为只读 应该去除只读选项

3.7.2 检查权限

3.7.3 修改hosts文件

hosts文件路径:C:\Windows\System32\drivers\etc

127.0.0.1       localhost
127.0.0.1       image.jt.com
127.0.0.1       manage.jt.com
127.0.0.1       web.jt.com

4 项目发布准备

4.1 项目发布

1.检查所有的sql中的表名是否存在大小写问题. 检查注解 检查Sql
2.根据码云 检查POM.xml文件内容
3.将项目打包 install 命令
4.前端项目打包

检查是否生成dist目录

4.2 前端发布准备

  1. 修改main.js的路径
  2. 编辑AddItem.vue文件

    3.将前端项目进行编译
    如果将上述的操作修改完成,之后需要将程序编译。如图所示

4.3 前端项目发布

4.3.1 业务说明

将编译之后的dist目录 复制到nginx的根目录中。

4.3.2 前端项目发布

需求: 用户通过http://web.jt.com 访问 dist/index.html

#配置前端代理server {listen 80;server_name  web.jt.com;location / {root dist;index index.html;}}

重启nginx

4.3.3 前端代码测试

4.4 后端项目发布

4.4.1 动态获取端口号

package com.jt.controller;import com.jt.vo.SysResult;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@CrossOrigin
public class PortController {//动态获取端口号@Value("${server.port}")private Integer port;@GetMapping("/getPort")public String getPort(){return "当前端口号:"+port;}
}

4.4.2 项目发布

命令: java -jar 8091.jar
问题说明: 如果启动失败 检查pom.xml文件 

4.4.3 nginx完成后端发布

#配置后端代理server {listen 80;server_name  manage.jt.com;location / {#proxy_pass 映射的是请求的地址proxy_pass http://localhost:8091;}}

4.4.4 后端项目测试

通过:http://manage.jt.com/itemCat/findItemCatList/3 测试后端域名是否可用

1. 知识内容扩展( 集群部署)

1.1 集群部署流程图

1.2 部署集群

说明: 分别准备3台tomcat服务器 端口号分别为8091/8092/8093

1.2.1 启动多个进程

说明: 勾选其中的选项 ,可以平行运行多个进程

启动3台服务器 完成测试。

1.2.2 部署集群

#配置后端代理server {listen 80;server_name  manage.jt.com;location / {#proxy_pass 映射的是请求的地址#proxy_pass http://localhost:8091;#访问集群proxy_pass http://tomcats;#连接服务器集群}}#配置tomcat服务器集群 1.轮询策略upstream tomcats {server  127.0.0.1:8091;server  127.0.0.1:8092;server  127.0.0.1:8093;}

1.3 nginx负载均衡策略

1.3.1 轮询策略

说明: 按照配置文件的顺序 依次访问

#配置tomcat服务器集群 1.轮询策略upstream tomcats {server  127.0.0.1:8091;server  127.0.0.1:8092;server  127.0.0.1:8093;}

1.3.2 权重策略

说明: 可以根据服务器性能,灵活的设置配比

#配置tomcat服务器集群 1.轮询策略  2.权重策略upstream tomcats {server  127.0.0.1:8091 weight=6;server  127.0.0.1:8092 weight=3;server  127.0.0.1:8093 weight=1;}

1.3.3 IP_HASH策略

说明: 如果需要让用户与服务器进行绑定. 则使用IPHASH

#配置tomcat服务器集群 1.轮询策略  2.权重策略 3.iphash策略upstream tomcats {ip_hash;server  127.0.0.1:8091 weight=6;server  127.0.0.1:8092 weight=3;server  127.0.0.1:8093 weight=1;}

1.3.4 nginx常见属性

1.down属性 如果down属性标识了服务器,则nginx不会再次访问该服务器
2.backup属性 设置备用机, 正常情况下,备用机不会被访问,但是当主机遇忙时/或者宕机时,备用机才会被访问.

#配置tomcat服务器集群 1.轮询策略  2.权重策略 3.iphash策略upstream tomcats {#ip_hash;server  127.0.0.1:8091 weight=6 down;server  127.0.0.1:8092 weight=3 down;server  127.0.0.1:8093 weight=1 backup;}

1.3.5 项目如何实现在线部署

说明:
1.首先需要制定上线计划 分批次上线部署.
2.首先可以先将一部分服务器down掉,之后替换新的jar包,重启服务器,测试通过之后,nginx正式接通.
3.重复执行多次,直至项目部署完成为止.
nginx启动的速度很快,所以几乎对用户没有影响.

Windos 前后端项目的部署相关推荐

  1. 前后端项目手动部署至服务器

    1. 在服务器上配置环境 需要安装JDK.Mysql.Nginx 可以手动安装以上环境,也可以先安装docker后再拉镜像安装以上环境 2.安装完mysql后,在navicat中连接远程数据库 若连接 ...

  2. Springboot+vue前后端项目的部署和搭建

    项目导入 为了方便,我直接在桌面上通过git bash克隆项目: git clone https://github.com/wuyouzhuguli/FEBS-Vue.git 克隆后,桌面上多出一个F ...

  3. 若依框架前后端项目分离部署(验证码不显示原因解决步骤)

    标题若依框架项目部署分为前端项目部署和后端项目部署. 一.后端项目部署(比较省略) 1.jar部署方式 将jar包放到文件的service目录下,使用命令行执行执行脚本. 2.war部署方式 ruoy ...

  4. Jenkins + 云效 前后端项目自动化部署

    环境安装 创建目录 后续下载的内容 放在里边方便管理 cd /mkdir dockercd dockermkdir maven mkdir jenkinsmkdir javamkdir registr ...

  5. docker 一键部署前后端项目 ruoyi

    使用 docker 一键部署前后端项目 这里我以开源项目ruoyi 的 vue 前后端为例,想要通过 docker 一键跑起来,需要对项目做部分调整. 修改 springboot yml 的配置 ap ...

  6. web前后端分离开发部署模式

    web前后端分离开发部署模式 在开始讨论这个话题之前我们先来认识一下传统的开发模式. 一.传统开发模式 相信很多做过Web开发童鞋应该都会经历这样一种开发模式,利用后端语言提供的模版引擎编写HTML/ ...

  7. 前后端分离Nginx部署解决方案

    前后端分离Nginx部署解决方案 转自:https://www.yuque.com/dukang-hfttn/mo27v1/po8zc3 一.获取前端代码编译发布步骤 获取FE前端源码 安装Nodej ...

  8. RDC如何构建一个基于NodeJS的前后端项目

    摘要: 最近在将公司的持续集成架构做一个系统的调整,调整过程中受到了RDC团队大量的帮助,所以利用国庆时间写了几篇RDC的分享,希望能让更多的人了解和用好RDC这个产品. 我会把我最近3个月的使用体会 ...

  9. Nginx实现通过不同的url前缀访问不同的前后端项目

    ,所以目前就可以通过给网页访问链接增加不同的url前缀,来让Nginx去实现同一端口下访问不同的前后端项目.具体配置如下: (我这里是前端两个项目各自对应后端的两个服务) server {#这里默认监 ...

最新文章

  1. 【Red Hat 】vim编辑器的常用命令以及使用技巧
  2. Python uuid 介绍
  3. 分布式事务:两段式提交(最终一致性)
  4. UIProgressView-初识IOS
  5. 数据处理-Batch Normalization
  6. python输出命令_Python 输出命令行进度条
  7. 萌新的Python练习菜鸟100例(十)暂停一秒输出,并格式化输出当前时间
  8. MATLAB gui 欢迎界面 插入图片
  9. [c#基础]关于const和readonly常见的笔试题剖析
  10. NTP、PTP时间同步服务器(时钟系统)
  11. matlab构造arma模型,ARMA模型构建及MATLAB实现
  12. 软件需求分析学习日记(一)需求工程概述
  13. 发布本人整理的面试问题大全,为准备找工作的同行们尽一份力 希望大家多补充或回答
  14. telegram 常见问题
  15. 容联云 实现验证码发送
  16. 区块链游戏,不懂你别玩!
  17. 不可不学的摄影技巧之三(摄影小窍门)
  18. 【手把手教你】使用Logistic回归、LDA和QDA模型预测指数涨跌
  19. android ops,安卓OPS电脑解决方案,促进城市智能化
  20. 电路(第五版)---绪论

热门文章

  1. zed相机拆机_TX1入门教程硬件篇-外接双目相机ZED
  2. Clickhouse其它类型表引擎(Live View、Null、URL)
  3. 一分钟告诉你通话记录能查到多久前的!
  4. Javascript-API-BOM、动画函数、网页轮播图、节流阀、筋斗云、固定侧边栏返回顶部案例
  5. java 载入类的三种方法
  6. 校企同游快乐工作——湖南工程职院美和易思教师开展素质拓展活动
  7. 粉笔公考——错题集——行测
  8. 40岁男人娶20岁女孩
  9. C#笔试面试宝典值得收藏1
  10. Python列表练习——用户管理