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

项目部署-(二)Linux下SpringBoot项目自动部署

一、项目部署架构

在这里插入图片描述

二、项目部署环境

192.168.138.100(服务器A):
-Nginx :部署前端项目、配置反向代理
-MySQL:主从复制结构中的主库

192.168.138.101(服务器B):
-JDK:运行Java项目
-Git:版本控制工具
-Maven:项目构建工具
-Jar:SpringBoot项目打成Jar包基于内置Tomcat运行
-MySQL:主从复制结构中的从库

192.168.138.102(服务器C):
-Redis:缓存中间件

三、部署前端项目并配置Nginx 反向代理

192.168.138.100(服务器A):
-Nginx :部署前端项目、配置反向代理
-MySQL:主从复制结构中的主库

步骤一:在服务器A中安装Nginx,将disk(前端打包目录)目录上传到Nginx的html目录

步骤二:修改Nginx配置文件Nginx.conf

location \  {
	root html/dist;
	index index.html;
}
# 反向代理配置

步骤三:配置Nginx环境变量,启动Nginx :

nginx

查看进程:

ps -ef | grep nginx

步骤四:配置Nginx 反向代理
前端请求路径为 API/login,匹配到请求 URL重写到这个地址192.168.138.101,转发到服务器B

# 反向代理配置
location  ^~ /api/ {
	rewrite ^/api/(.*)$ /$1 break;
	proxy_pass  httpL//192.168.138.101:8080
}

四、部署后端项目并解决图片展示问题

我们需要实现项目的自动部署,从而来简化项目部署的操作。我们先来整体上了解一下项目自动部署的流程及操作步骤。

在这里插入图片描述

操作步骤如下:

1). 在Gitee上创建远程仓库,并将本地的项目代码推送到远程仓库中

2). 在Linux中安装Git,克隆代码

3). 在Linux中安装maven

4). 编写Shell脚本(拉取代码、编译、打包、启动)

5). 为用户授予执行Shell脚本的权限

6). 执行Shell脚本

192.168.138.101(服务器B):
-JDK:运行Java项目
-Git:版本控制工具
-Maven:项目构建工具
-Jar:SpringBoot项目打成Jar包基于内置Tomcat运行
-MySQL:主从复制结构中的从库

步骤一:在服务器B中安装JDK、Git、Maven、MySQL,使用git clone命令将git远程仓库的代码克隆下来;

步骤二:上传reggieStart.sh文件到服务器B,通过chmod命令设置执行权限
Shell脚本:拉取GIt代码,并通过maven命令打包;再通过java - jar 命令把SpringBoot项目运行;

步骤三:执行reggieStart.sh脚本文件,自动部署项目
在执行maven指令进行打包时,第一次执行可能会耗时比较长,因为在进行maven工程的打包时,需要到中央仓库下载工程依赖的jar包和插件。
步骤四:解决图片不显示的问题,把路径改成Linux下的路径,把图片放到Linux目录下

#把路径改成Linux下的路径
path: /usr/local/img/

4.1 Git操作

1). Git软件安装

通过yum命令在线安装git,执行如下指令:

yum list git			列出git安装包
yum install git			在线安装git

通过上述指令,安装好git之后,我们就可以通过 git --version去验证git的环境。

git --version

2). Git克隆代码

cd /usr/local/
git clone https://gitee.com/RichardKong/platform.git

4.2 Maven安装

由于我们的工程是maven工程,我们要想进行项目的编译打包,需要用到maven的指令,所以需要安装maven。具体操作步骤如下:

步骤一、上传maven的安装包

通过rz指令上传maven安装包

步骤二、解压maven安装包到/usr/local目录

tar -zxvf apache-maven-3.5.4-bin.tar.gz -C /usr/local

步骤三、在/etc/profile配置文件中配置环境变量

vim /etc/profile

修改配置文件,进入到命令模式,按G切换到最后一行,按a/i/o进入插入模式,然后在最后加入如下内容 :
export MAVEN_HOME=/usr/local/apache-maven-3.5.4
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH

然后按ESC进入到命令模式,输入 :wq 保存并退出

要想让配置的环境变量生效,还需要执行如下指令:

source /etc/profile

步骤四、 修改maven的settings.xml配置文件,配置本地仓库地址

A. 切换目录

cd /usr/local/apache-maven-3.5.4/conf

B. 编辑settings.xml配置文件

vim settings.xml

在其中增加如下配置,配置本地仓库地址:

<localRepository>/usr/local/repo</localRepository>

并在settings.xml中的标签中,配置阿里云的私服:

<mirror> 
    <id>alimaven</id> 
    <mirrorOf>central</mirrorOf> 
    <name>aliyun maven</name> 
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror> 

4.3 Shell脚本准备

Shell脚本(shell script),是一种Linux系统中的脚本程序。使用Shell脚本编程跟 JavaScript、Java编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。

在/usr/local/目录下创建一个目录 sh(mkdir sh),并将shell脚本上传到该目录下。或者直接在sh目录下创建一个脚本bootStart.sh,然后将bootStart.sh文件打开,内容拷贝过来即可。

4.4 Linux权限

前面我们已经把Shell脚本准备好了,但是Shell脚本要想正常的执行,还需要给Shell脚本分配执行权限。 由于linux系统是一个多用户的操作系统,并且针对每一个用户,Linux会严格的控制操作权限。接下来,我们介绍一下Linux系统的权限控制。

1). chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令

2). Linux中的权限分为三种 :读®、写(w)、执行(x)

3). Linux文件权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)

4). 只有文件的所有者和超级用户可以修改文件或目录的权限

5). 要执行Shell脚本需要有对此脚本文件的执行权限(x),如果没有则不能执行

Linux系统中权限描述如下:

在这里插入图片描述

解析当前脚本的权限情况:

在这里插入图片描述

chmod命令可以使用八进制数来指定权限(0 - 代表无 , 1 - 执行x , 2 - 写w , 4 - 读r):

权限rwx
7读 + 写 + 执行rwx
6读 + 写rw-
5读 + 执行r-x
4只读r–
3写 + 执行-wx
2只写-w-
1只执行–x
0

举例:

chmod 777 bootStart.sh   为所有用户授予读、写、执行权限
chmod 755 bootStart.sh   为文件拥有者授予读、写、执行权限,同组用户和其他用户授予读、执行权限
chmod 210 bootStart.sh   为文件拥有者授予写权限,同组用户授予执行权限,其他用户没有任何权限

注意:

三个数字分别代表不同用户的权限

  • 第1位表示文件拥有者的权限
  • 第2位表示同组用户的权限
  • 第3位表示其他用户的权限

4.5 授权并执行脚本

在测试阶段,我们可以给所有的人都赋予执行该shell脚本的权限。所以可以执行如下指令:

chmod 777 bootStart.sh

权限解读:

A. 第一个7,代表当前文件所有者root用户,对该文件具有读写执行权限;

B. 第二个7,代表当前文件所有者所属组的用户,对该文件具有读写执行权限;

B. 第三个7,代表其他用户,对该文件具有读写执行权限;

执行该shell脚本:

 ./bootStart.sh

注意: 在执行maven指令进行打包时,第一次执行可能会耗时比较长,因为在进行maven工程的打包时,需要到中央仓库下载工程依赖的jar包和插件(可以在settings.xml中配置阿里云私服加速下载)。

启动完成之后, 我们可以查看java进程:

 ps -ef|grep java

访问项目:

192.168.138.130:8080

4.6 设置静态IP

我们目前安装的Linux操作系统,安装完毕之后并没有配置IP地址,默认IP地址是动态获取的,那如果我们使用该Linux服务器部署项目,IP动态获取的话,也就意味着,IP地址可能会发生变动,那我们访问项目的话就会非常繁琐,所以作为服务器,我们一般还需要把IP地址设置为静态的。

步骤一、设置静态IP

设置静态ip,我们就需要修改 /etc/sysconfig/network-scripts/ifcfg-ens33 配置文件,内容如下:

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR="192.168.138.100"        # 设置的静态IP地址
NETMASK="255.255.255.0"         # 子网掩码
GATEWAY="192.168.138.2"         # 网关地址
DNS1="192.168.138.2"            # DNS服务器
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=afd0baa3-8bf4-4e26-8d20-5bc426b75fd6
DEVICE=ens33
ONBOOT=yes
ZONE=public

在这里插入图片描述

上述我们所设置的网段为138,并不是随意指定的,需要和我们虚拟机中的虚拟网络编辑器中的NAT模式配置的网关保持一致。

步骤二、重启网络服务

ip地址修改完毕之后,需要重启网络服务,执行如下指令:

systemctl restart network

注意:重启完网络服务后ip地址已经发生了改变,此时FinalShell已经连接不上Linux系统,需要创建一个新连接才能连接到Linux。

再次连接上Linux之后,我们再次查看IP地址,就可以看到我们所设置的静态IP:

ip addr 

相关文章:

  • MySQL流程控制
  • 如何管理“灰色时间”导致的成本漏洞
  • SOLID原则详解:提升软件设计质量的关键
  • 【DDR 内存学习专栏 1.3.1 -- DDR 的 Bank 及 burst 访问】
  • 空间信息可视化——WebGIS前端实例(一)
  • 基于Nacos+动态线程池的分布式系统弹性设计:投行交易与风控场景实战
  • 安当TDE透明加密技术:企业机密文件和数据库加密解决方案
  • 大数据学习栈记——Redis安装及其使用
  • MVCC是什么?MVCC的作用是什么?MVCC实现方式有哪些?
  • 批量将多个文件转成压缩包,支持批量设置压缩密码
  • CSI-external-provisioner
  • 从零开始学A2A一:A2A 协议概述与核心概念
  • 人工智能驱动的科研新范式及学科应用研究
  • 【Java学习笔记】Java初级阶段代码规范
  • 基于项目管理的轻量级目标检测自动标注系统【基于 YOLOV8】
  • 打造可控可测的星座网络:IPLOOK低轨通信仿真平台搭建实践
  • 小葱桌面电视版下载_小葱桌面app免费下载最新版
  • 关于 软件开发模型 的分类、核心特点及详细对比分析,涵盖传统模型、迭代模型、敏捷模型等主流类型
  • 2025年常见渗透测试面试题-红队面试宝典下(题目+回答)
  • 谷歌浏览器的开发者模式如何开启及安装教程
  • A股三大股指涨跌互现,电力股走强,地产股冲高回落
  • 专访|攸佳宁:手机只是矛盾导火索,重要的是看见孩子的内心
  • 马上评丨马拉松“方便门”被处罚,是一针清醒剂
  • 著名茶叶专家谢丰镐逝世,享年95岁
  • 中国工程院院士、歼八Ⅱ飞机系统工程副总设计师温俊峰逝世
  • 厦门国贸去年营收约3544亿元,净利润同比减少67.3%