SpringBootWeb 篇-深入了解 SpringBoot + Vue 的前后端分离项目部署上线与 Nginx 配置文件结构
🔥博客主页: 【小扳_-CSDN博客】
❤感谢大家点赞👍收藏⭐评论✍
文章目录
1.0 云服务器的准备
2.0 Xshell 和 Xftp 软件
2.1 Xshell 介绍
2.2 Xftp 介绍
3.0 在云服务器进行环境配置
3.1 安装 JDK
3.2 安装 MySQL
3.3 安装 Nginx
4.0 SpringBoot 后端代码进行打包上传服务器
5.0 Vue 前端代码进行打包上传服务器
6.0 nginx 配置文件结构
6.1 先了解以下配置文件的结构
6.2 nginx 主要配置
6.2.1 静态 HTTP 服务器配置
6.2.2 反向代理服务器配置
6.2.3 负载均衡配置
6.2.4 虚拟主机配置
1.0 云服务器的准备
使用云服务是为了可以得到一个 Linux 环境,比如说常用到的 Ubuntu 的配套程序。
使用云服务器不仅环境搭建简单,避免折腾,同时还有一个最大的好处,部署在云服务器上的项目可以直接被外网访问到,也就能让我们自己写的程序可以给别人直接使用。
可以直接在腾讯云、阿里云、华为云等服务器厂商直接购买一个云服务器。购买一个云服务器并不难,如果你会使用京东、淘宝等购物软件下单买帅帅的衣服,买美美的包包的话,那么购买一个服务器简单得就像呼吸一样。
其中购买云服务器的时候注意一下,建议选 Ubuntu ,因为下面介绍都是以 Ubuntu 为例子进行讲解。
购买完之后,建议修改一下密码,查看当前云服务器的登录名,还有就是公网 IP 。
用阿里云举个例子:
首先会得到一个详情信息的服务器。
1)重置密码
2)登录名
如果没有修改过登录名,默认就是 root 。
3)公网 IP
从购买到一个云服务器之后,获取到以上三个重要信息,在以下步骤就会使用到这三个信息。
2.0 Xshell 和 Xftp 软件
Xshell 和 Xftp 是两款由 NetSarang 公司开发的软件,主要用于网络访问和文件传输。
下载官网:家庭/学校免费 - NetSarang Website (xshell.com)
直接下载即可,免费使用。
2.1 Xshell 介绍
它的主要用于在 windows 平台上远程连接管理 Linux 系统,用户可以通过 Xshell 连接到远程服务器,执行命令、管理系统、进行系统监控等操作。
Xshell 连接云服务器的步骤:
1)点击新建:
2)先起一个好听的名字,再将公网 IP 填写到主机(H),再按确认
3)双击新建好的会话,之后就会自动弹出来 SSH 用户名卡片的填写,这里用到了连接云服务器的登录名信息。
4)继续双击会话,之后会弹出用户身份验证,这里用到了连接云服务器的密码信息。
5)最后出现了绿点和一串复杂的字符串
出现这些内容则说明已经与云服务器连接起来了。
其中这一串复杂的字符串就是你购买的云服务器的实例 ID
2.2 Xftp 介绍
这是一个文件传输工具,可以将文件从本地上传到云服务器中,也可以从云服务器中下载文件到本地。Xshell 提供了拖放功能、文件同步、文件传输队列等使用功能,提升文件传输效率。
Xftp 连接云服务器的步骤:
1)点击新建
2)先起一个巨好听的名字哟,再将公网 IP 输入到主机(H),选择用 Password 的方式连接云服务器。
3)选中点击会话,再按连接
4)输入连接云服务器的用户名信息
5)输入连接云服务器的密码
6)如果从来没用使用过该云服务器的话,在 /root 目录下是不会出现以下文件的,这是一个正常的情况,以上文件都是我自己手动创建的
最后 Xshell 和 Xftp 都成功连接上同一个云服务器了。
3.0 在云服务器进行环境配置
将项目放到云服务器上运行,那么离不开项目所依赖的环境,比如说 JDK、MySQL、Nginx 等环境的安装。
3.1 安装 JDK
1)切换 root 用户的指令:
命令之前就不需要加 sudo 了。
sudo su
2)更新软件包的指令:
sudo apt-get update
执行结果:
3)安装 openjdk 的指令:
#查找 jdk 包 apt list | grep "jdk"#安装 jdk apt install openjdk-17-jdk
执行结果:
安装过程中,需要输入确认 y 进行下一步。
4)验证 jdk 是否安装成功
#查看jdk版本 java -version
执行结果:
出现相对应的 jdk 的版本和安装日期的提示,则说明安装成功。
5)卸载 jdk
如果需要重新下载 jdk 的话,先卸载原先的 jdk 以及相关的 jdk 包。
3.2 安装 MySQL
1)安装 MySQL
#查找安装包 apt list | grep "mysql-server"#安装 mysql apt install mysql-server
执行结果:
安装过程中,需要输入确认 y 进行下一步。
2)查看 MySQL 状态
#查看是否安装成功 systemctl status mysql
执行结果:
3)MySQL 安装安全设置
默认的 MySQL 设置时不安全的,MySQL 安装提供了一个安全脚本,用于解决不太安全的默认选项,执行以下指令,设置密码:
mysql_secure_installation
在安装过程中,会出现确认信息
4)设置密码
首先连接 mysql 服务器:
mysql
使用 alter user 命令修改密码:
红色框中是自己需要设置的密码。
5)设置完成之后,再使用 mysql 时,需要加上 -p
mysql -p
执行结果:
这里需要注意,在输入密码的时候,光标是不会动的,而且看不到有字符的输入。
这样就成功进入到 mysql 了。
如果需要退出 mysql 的指令:
exit
6)卸载 Mysql
#停止 mysql systemctl stop mysql#卸载 mysql apt-get remove --purge mysql-server mysql-client mysql-common#删除 mysql 配置文件和数据 rm -rf /etc/mysql /var/lib/mysql#清理残留文件和目录 apt-get autoremove apt-get autoclean#验证卸载结果 mysql --version
3.3 安装 Nginx
Nginx 是一款功能强大、灵活且高效的 Web 服务器和反向代理解决方案,广泛应用于各类网站和服务,是全球最流行的 Web 服务器之一。
1)安装 nginx 命令:
apt install nginx
2)启动 nginx 命令:
nginx
3)检查 nginx 是否运行:
ps aux | grep nginx
4)停止 nginx
nginx -s stop
4.0 SpringBoot 后端代码进行打包上传服务器
将 SpringBoot 项目进行打包:
1)点击 clean 之后:
2)点击 package 之后:
项目打包之后,就放到红色框的路径下。
3)接着将 jar 包拖到你喜欢的位置,一般放在 root 目录下,需要注意的是,查看 jar 包的大小是否符合,如果不符合,就是打包出错了,需要重新打包。
4)启动后端服务
nohup java -jar 此处写你项目的jar包名称 &
nohup:后台运行程序,用于系统后台不断地运行命令,退出终端不会影响程序的运行。
语法格式:
nohup Command [Arg] [&]
参数说明:
Command:要执行的命令。
Arg:一些参数,可以指定输出文件。
&:让命令在后台执行,终端退出后命令仍旧执行。
5)开放端口号
如果外网需要访问该服务,需要先服务器防火墙开发对应的端口号。
手动添加或者设置访问云服务器的规则。
5.0 Vue 前端代码进行打包上传服务器
1)前端项目打包指令:
npm run build
执行完毕之后,会出现 dist 文件
dist 文件中的内容就是需要上传到云服务器中。
同样的,将这些内容复制粘贴到云服务器中,放置的路径需要记住,比如:/var/BookView
2)对 nginx 配置文件进行配置
先找到 nginx.conf 配置文件。
配置 server 块:
参数讲解:
listen:监听的端口号
server_name:表示的是监听从那个 IP 来的请求
静态文件服务:/var/BookView 该目录就是前端项目包所放置的位置
反向代理:proxy_pass 处理发送的请求
最后,重启一下 nginx ,这样项目就部署完毕了,就可以在任何一个有网的地方,都可以访问到你部署的项目了,输入你的公网 IP 加上 nginx 配置的服务端口号。
6.0 nginx 配置文件结构
6.1 先了解以下配置文件的结构
Nginx 文件结构:
全局块:配置影响 nginx 全局的指令。一般有运行 nginx 服务器的用户组,nginx 进程 pid 存放路径,日志存放路径,配置文件引入,允许生成 worker process 数等。
events 块:配置影响 nginx 服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
http 块:可以嵌套多个 server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type 定义,日志自定义,是否使用 sendfile 传输文件,连接超时时间,单连接请求数等。
server 块:配置虚拟主机的相关参数,一个 http 中可以有多个 server。
location 块:配置请求的路由,以及各种页面的处理情况。
... # 全局块。配置影响nginx全局的指令。events { # events块。配置影响nginx服务器或与用户的网络连接。... }http # http块。可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。 {... # http全局块server # server块。配置虚拟主机的相关参数,一个http中可以有多个server。 { ... # server全局块location [PATTERN] # location块。配置请求的路由,以及各种页面的处理情况。{...}location [PATTERN] {...}}server{...}... # http全局块 }
6.2 nginx 主要配置
6.2.1 静态 HTTP 服务器配置
首先,Nginx 是一个HTTP 服务器,可以将服务器上的静态文件(如 HTML、图片)通过 HTTP 协议展现给客户端。
配置:
server {listen 80; # 端口server_name localhost 192.168.1.100; # 域名 location / { # 代表这是项目根目录root /usr/share/nginx/www; # 虚拟目录} }
通过访问路径带有 / 则在页面就是将 root 代理的项目展示给客户端,也就是静态代理。
6.2.2 反向代理服务器配置
什么是反向代理?
客户端本来可以直接通过 HTTP 协议访问某网站应用服务器,如果网站管理员在中间加上一个Nginx,客户端请求 Nginx,Nginx 请求应用服务器,然后将结果返回给客户端,此时 Nginx 就是反向代理服务器。
反向代理配置:
server {listen 80;location /api/ {proxy_pass http://192.168.0.112:8080/; # 应用服务器HTTP地址} }
在代理过程中,遇到 /api 路径就会自动代理转发请求到 proxy_pass 应用服务器中,这就是反向代理。在 api 之后加上 "/" 和在引用服务器 HTTP 地址之后加上 "/" 代表会自动将 api 转换为 ""。
既然服务器可以直接 HTTP 访问,为什么要在中间加上一个反向代理,不是多此一举吗?反向代理有什么作用?继续往下看,下面的负载均衡、虚拟主机,都基于反向代理实现,当然反向代理的功能也不仅仅是这些。
6.2.3 负载均衡配置
当网站访问量非常大,也摊上事儿了。因为网站越来越慢,一台服务器已经不够用了。于是将相同的应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。同时带来的好处是,其中一台服务器万一挂了,只要还有其他服务器正常运行,就不会影响用户使用。Nginx 可以通过反向代理来实现负载均衡。
负载均衡配置:
upstream myapp {server 192.168.0.111:8080; # 应用服务器1server 192.168.0.112:8080; # 应用服务器2 } server {listen 80;location / {proxy_pass http://myweb;} }
6.2.4 虚拟主机配置
有的网站访问量大,需要负载均衡。然而并不是所有网站都如此出色,有的网站,由于访问量太小,需要节省成本,将多个网站部署在同一台服务器上。
例如将 www.aaa.com 和 www.bbb.com 两个网站部署在同一台服务器上,两个域名解析到同一个 IP 地址,但是用户通过两个域名却可以打开两个完全不同的网站,互相不影响,就像访问两个服务器一样,所以叫两个虚拟主机。
虚拟主机配置:
server {listen 80 default_server;server_name _;return 444; # 过滤其他域名的请求,返回444状态码 } server {listen 80;server_name www.aaa.com; # www.aaa.com域名location / {proxy_pass http://localhost:8080; # 对应端口号8080} } server {listen 80;server_name www.bbb.com; # www.bbb.com域名location / {proxy_pass http://localhost:8081; # 对应端口号8081} }
在服务器 8080 和 8081 分别开了一个应用,客户端通过不同的域名访问,根据 server_name 可以反向代理到对应的应用服务器。
虚拟主机的原理是通过 HTTP 请求头中的 Host 是否匹配 server_name 来实现的。
相关文章:

SpringBootWeb 篇-深入了解 SpringBoot + Vue 的前后端分离项目部署上线与 Nginx 配置文件结构
🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 云服务器的准备 2.0 Xshell 和 Xftp 软件 2.1 Xshell 介绍 2.2 Xftp 介绍 3.0 在云服务器进行环境配置 3.1 安装 JDK 3.2 安装 MySQL 3.3 安装 Nginx 4.0 SpringB…...

优化程序中的数据:从代数到向量解
前言 在前文笔者简单介绍了把数据迭代抽象为线性代数,并介绍了空间体、维度等概念。 数据复用 数据复用是一种提高程序执行效率与数据局部性的方法,分为自复用与组复用, 自复用:如果多个迭代访问同一个内存位置,那…...

【Web】2024“国城杯”网络安全挑战大赛决赛题解(全)
最近在忙联通的安全准入测试,很少有时间看CTF了,今晚抽点时间回顾下上周线下的题(期末还没开始复习😢) 感觉做渗透测试一半的时间在和甲方掰扯&水垃圾洞,没啥惊喜感,还是CTF有意思 目录 Mountain ez_zhuawa 图…...

基于ceres优化的3d激光雷达开源算法
以下是一些基于CERES优化的开源激光雷达SLAM或相关算法: (1) LOAM (Lidar Odometry And Mapping) 简介: LOAM是一种经典的激光雷达里程计和建图算法,它通过提取特征点(角点和平面点),利用ICP(Iterative Cl…...

【FAQ】HarmonyOS SDK 闭源开放能力 — Vision Kit(2)
1.问题描述: 人脸活体检测返回上一页App由沉浸式变为非沉浸式多了上下安全区域。 解决方案: 检测结束后需要自己去设置沉浸式配置。 2.问题描述: Vision Kit文字识别是本地识别,还是上传至服务器,由服务器来识别文…...

【LeetCode】726、原子的数量
【LeetCode】726、原子的数量 文章目录 一、递归: 嵌套类问题1.1 递归: 嵌套类问题 二、多语言解法 一、递归: 嵌套类问题 1.1 递归: 嵌套类问题 遇到 ( 括号, 则递归计算子问题 遇到大写字母, 或遇到 ( 括号, 则清算历史, 并开始新的记录 记录由两部分组成: 大写字母开头的 …...

VMware虚拟机三种网络工作模式
vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。 打开vmware虚拟机,我们可以在选项栏的“编辑”下的“虚拟网络编辑器”中看到VMnet0(桥接模式)、VMnet1(仅主机模式)、VMnet8(NAT模式),那…...

14-zookeeper环境搭建
0、环境 java:1.8zookeeper:3.5.6 1、下载 zookeeper下载点击这里。 2、安装 下载完成后解压,放到你想放的目录里。先看一下zookeeper的目录结构,如下图: 进入conf目录,复制zoo_sample.cfg࿰…...

[搜广推]王树森推荐系统笔记——矩阵补充最近邻查找
视频合集链接 矩阵补充(工业界不常用) 模型结构 embedding可以把 用户ID 或者 物品ID 映射成向量输入用户ID 和 物品ID,输出向量的内积(一个实数),内积越大说明用户对这个物品越感兴趣模型中的两个embed…...

Unity3D * 粒子特效 * Particle System
(基于阿发教程做的重点笔记) 粒子 用于模拟一些流动的,没有形状的物质,例如 液体,烟雾,火焰,爆炸,魔法等效果 去除粒子外框 particle system 粒子发生器,有1个主模块和22个子模块࿰…...

【基础篇】1. JasperSoft Studio编辑器与报表属性介绍
编辑器介绍 Jaspersoft Studio有一个多选项卡编辑器,其中包括三个标签:设计,源代码和预览。 Design:报表设计页面,可以图形化拖拉组件设计报表,打开报表文件的主页面Source:源代码页码ÿ…...

数据结构:算法篇:快速排序;直接插入排序
目录 快速排序 直接插入排序 改良版冒泡排序 快速排序 理解: ①从待排序元素中选定一个基准元素; ②以基准元素将数据分为两部分:(可以将:大于基准元素放左,小于基准元素放右) ③对左半部分…...

WebAPI编程(第一天,第二天)
WebAPI编程(第一天,第二天) day01 - Web APIs 1.1. Web API介绍 1.1.1 API的概念1.1.2 Web API的概念1.1.3 API 和 Web API 总结 1.2. DOM 介绍 1.2.1 什么是DOM1.2.2. DOM树 1.3. 获取元素 1.3.1. 根据ID获取1.3.2. 根据标签名获取元素1.3.…...

查看MySQL存储引擎方法,表操作
修改数据库表存储引擎 show create table dept; show table status from itpux where name s2\G; select * from information_schema.TABLES where table_schemaitpux and table_names3; 查询整个mysql里面存储引擎是innodb/myisam的表 建表时候要写好存储引擎 -- 创建表 -- 表…...

【Python教程】Python3基础篇之Number(数字)
博主介绍:✌全网粉丝21W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。 感兴趣的可…...

基于openEuler22.09部署OpenStack Yoga云平台(一)
OpenStack Yoga部署 安装OpenStack 一、基础准备 基于OpenStack经典的三节点环境进行部署,三个节点分别是控制节点(controller)、计算节点(compute)、存储节点(storage),其中存储…...

I.MX6U 启动方式详解
一、启动方式选择 BOOT 的处理过程是发生在 I.MX6U 芯片上电以后,芯片会根据 BOOT_MODE[1:0]的设置 来选择 BOOT 方式。 BOOT_MODE[1:0]的值是可以改变的,有两种方式,一种是改写 eFUSE(熔 丝),一种是修改相应的 GPIO 高低电平。第一种修改 eFUSE 的方式只能修改一次,后面就…...

施耐德变频器ATV320系列技术优势:创新与安全并重
在工业自动化领域,追求高效、安全与智能已成为不可阻挡的趋势。施耐德变频器ATV320系列凭借其强大的设计标准和全球认证,成为能够帮助企业降低安装成本,提高设备性能的创新解决方案。 【全球认证,品质保障】ATV320 系列秉持施耐德…...

系统思考—全局思维
昨天接到一个企业需求,某互联网公司VP希望N-1的核心团队一起学习系统思考,特别是在新业务快速发展的阶段。公司增长势头不错,但如何解决跨部门的协作问题,成为了瓶颈。全局思维就是关键。产品、技术、市场、运营、客服……如何打破…...

Windows如何切换用户访问局域网共享文件夹,如何切换网上邻居的账户
Windows如何切换用户访问局域网共享文件夹,如何切换网上邻居的账户 查看共享连接 使用net use命令可以查看当前已经建立的共享连接。net use删除共享连接 使用net use * /del 或net use * /delete命令可以删除所有当前的共享连接。net use * /delnet use * /delete如果只想删除…...

如何在谷歌浏览器中启用语音搜索
想象一下,你正在拥挤的地铁上,双手都拿着沉重的购物袋,突然你想搜索附近的咖啡馆。此时如果你能通过语音而不是打字来进行搜索,那将多么的便利!在谷歌浏览器中,启用语音搜索功能就是这么简单而高效…...

HarmonyOS NEXT 技术实践-基于基础视觉服务实现骨骼点识别
本示例展示了如何在HarmonyOS Next中实现基于基础视觉服务的骨骼点识别功能。骨骼点识别是计算机视觉中的一项重要技术,广泛应用于运动分析、健身监控和增强现实等领域。通过使用HarmonyOS Next提供的视觉API,开发者能够轻松地对人物图像进行骨骼点检测&…...

Debian系统宝塔面板安装LiteSpeed Memcached(LSMCD)
参考链接 1. 官网指引: https://www.litespeedtech.com/support/wiki/doku.php/litespeed_wiki:lsmcd:installation 2. 安装OpenLiteSpeed官方LSMCD对象缓存替换Memcached详细图文教程 - 搬主题 实操记录: 首先LSMCD 默认的端口是11211,…...

tcp 的三次握手与四次挥手
问1: 请你说一下tcp的三次握手一次握手两次握手三次握手问: 为什么不四(更多)次握手? 问 2: 请说一下 tcp 的 4 次挥手一次挥手两次挥手问题:能不能等到数据传输完成再返回 ack? 三次挥手四次挥手问: 为什么要等两个最大报文存在时间? bg: tcp 是可靠的连接,如何保证 建立连…...

QT--信号与槽机制
什么是信号与槽? 在 Qt 中,信号与槽是一种用于对象间通信的机制。它使得一个对象可以通知其他对象某个事件的发生,而不需要直接知道这些对象的具体实现。这种机制非常适合事件驱动的编程模型,如用户界面交互。 1. 信号ÿ…...

vue3项目history路由模式部署上线405、刷新404问题(包括部分页面刷新404问题)
一、找不到js模块 解决方法:配置Nginx配置文件: // root /your/program/path/dist root /www/wwwroot/my_manage_backend_v1/dist;二、刷新页面导致404问题(Not found) 经过一系列配置后发现进入页面一切正常,包括路由前进和回退࿰…...

电阻容差是啥意思
定义 电阻器在生产过程中,由于工艺等因素的限制,其实际阻值不可能与标称阻值完全一致,总会存在一定的误差。例如,一个标称阻值为100Ω、容差为5%的电阻,其实际阻值可能在95Ω至105Ω之间。 产生原因 材料特性差异&a…...

Rust: offset祼指针操作
offset是偏移元素个数,不是字节数! fn main(){let student_a Student{id:20240001,name:"张三娃".into(),class_id:3,age:14,grade:1};let student_b Student{id:20240002,name:"李四牛".into(),class_id:3,age:15,grade:1};let …...

SD本地部署和云端部署的区别以及优劣
相信有相当多多小伙伴应该是看了一些技术或者设计的博主的教程后开始尝试使用SD的,在大多数的SD教程中,绝大多数都是推荐本地化的部署流程,毕竟本地部署后的SD自由度会显得高一些,大部分的操作也都完全可以实现,只不过…...

4、数据结构与算法解析(C语言版)--栈
栈的数据存储遵循“后进先出的规则”,这在计算机里面是非常有用的,比如word等编辑软件的"撤销"功能,就是使用栈进行实现的。 1、创建项目 main.h #ifndef _MAIN_H #define _MAIN_H#include <stdio.h> #include <stdlib.…...