04-项目部署到Linux
三、项目部署
之前我们讲解Linux操作系统时,就提到,我们服务端开发工程师学习Linux系统的目的就是将来我们开发的项目绝大部分情况下都需要部署在Linux系统中。那么在本章节,我们将通过两种方式,来演示项目部署,分别是:手动部署项目 和 基于shell脚本自动部署。
3.1、手动部署项目
3.1.1、在IDEA中开发SpringBoot项目并打包成jar包
-
创建一个简单的项目,结构如下所示
-
项目运行结果
-
执行package指令,进行打包操作,将当前的SpringBoot项目,打包成jar包
-
操作步骤
-
Step1
-
<build> <!--指定jar的名字--> <finalName>helloworld</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
-
-
Step2
-
# 清理、打包 跳过测试 mvn clean package -Dmaven.test.skip=true
-
-
Step3
-
# 运行 java -jar xxx.jar
-
-
Step4
-
-
3.1.2、将jar包上传到Linux并运行
- 将打好的jar包上传至Linux服务器的 /usr/local/app 目录下
mkdir /usr/local/app
cd /usr/local/app
- 启动SpringBoot项目
- 由于我们的项目已经打成jar包上传上来到Linux服务器,我们只需要运行这个jar包项目就启动起来了,所以只需要执行如下指令即可:
java -jar helloworld.jar
- 运行结果
- PS
- 由于前面安装的Tomcat在启动时,会占用端口号8080,而当前springboot项目我们没有配置端口号,默认也是8080,所以我们要想启动springboot项目,需要把之前运行的Tomcat停止掉
- 开放端口,确保端口对外开放,可以访问SpringBoot项目
firewall-cmd --zone=public --list-ports
- 如果防火墙没有开放对应的端口,还需要先开放端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
- 访问测试
- 成功运行项目后的问题
- 当前我们项目启动的这个窗口被霸屏占用了,如果我们把这个窗口关闭掉(或ctrl+c),当前服务也就访问不到了
3.1.3、手动部署项目优化
- 解决上述霸屏问题的解决方法就是让部署的项目在后台运行
- 这个时候我们需要使用到linux中的一个命令 nohup ,接下来,就来介绍一下nohup命令
- nohup命令:英文全称 no hang up(不挂断),用于不挂断地运行指定命令,退出终端不会影响程序的运行
- 语法格式:
nohup Command [ Arg … ][&]
- 参数说明:
Command
:要执行的命令Arg
:一些参数,可以指定输出文件&
:让命令在后台运行
- 举例:
nohup java -jar boot工程.jar &> hello.log &
- 上述指令的含义为: 后台运行 java -jar 命令,并将日志输出到hello.log文件
- 综上所得,要想让当前项目在后台运行,就可以使用以下命令
nohup java -jar helloworld-1.0-SNAPSHOT.jar &> hello.log &
- 这样的话,我们的项目就已经启动成功了,我们可以通过ps指令,查看到系统的进程
- 接下来,我们再次访问我们的项目,来看看服务是否可用
- 这时候可以查看以下hello.log文件是否正常输出日志
- 这时候可以查看以下hello.log文件是否正常输出日志
- 停止项目
- 直接杀死进程:
kill -9 pid
- 直接杀死进程:
3.2、基于Shell脚本自动部署
3.2.1、介绍
- 前面介绍的项目部署是手动部署,也就是部署过程中的每一步操作都需要我们手动操作。接下来,我们需要再讲解一下项目的自动部署,从而来简化项目部署的操作,那么我们先来整体上了解一下项目自动部署的流程及操作步骤
- 具体操作步骤如下
- ①、在Gitee上创建远程仓库,并将本地的项目代码推送到远程仓库中
- ②、在Linux中安装Git,克隆代码
- ③、在Linux中安装maven
- ④、编写Shell脚本(拉取代码、编译、打包、启动)
- ⑤、为用户授予执行Shell脚本的权限
- ⑥、执行Shell脚本
- 具体操作步骤如下
3.2.2、推送代码到远程仓库
1)创建远程仓库
自行创建
2)推送代码到远程仓库
自行推送一个简单示例项目即可
3.2.3、Git操作
1)Git软件安装
- 通过yum命令在线安装git,执行如下指令
yum list git
:列出git安装包yum install git
:在线安装git
- 通过上述指令,安装好git之后,我们就可以通过
git --version
去验证git的环境
2)Git克隆代码
- 先切换到指定的目录,如
/usr/local
,执行如下指令git clone 要克隆的远程仓库地址
(然后输入个人的Git账号密码)
3.2.4、Maven安装
1)官网下载Maven的压缩包
- 如
apache-maven-3.5.4-bin.tar.gz
,自行选择对应版本号在官网下载即可
2)解压Maven压缩包
- 自行解压到指定目录即可
tar -zxvf apache-maven-3.5.4-bin.tar.gz -C 指定目录
3)配置环境变量
-
在
/etc/profile
配置文件中配置环境变量-
vim /etc/profile
-
增加如下内容
-
MAVEN_HOME=/usr/local/apache-maven-3.5.4/ PATH=$JAVA_HOME\bin:$PATH:$MAVEN_HOME\bin export JAVA_HOME PATH MAVEN_HOME
-
PS:这里面的JAVA_HOME是之前配置的,忽略即可
-
-
要让配置的环境变量生效,还需要执行如下指令
source /etc/profile
4)修改maven的settings.xml配置文件
-
配置本地仓库地址
-
切换目录
cd /usr/local/apache-maven-3.5.4/conf
-
编辑setting.xml配置文件
vim setting.conf
-
在其中增加如下配置,添加本地仓库地址
<localRepository>/usr/local/maven-reposity</localRepository>
-
同时在
<mirrors>
标签中,配置阿里云的私服-
<mirror> <id>alimaven</id> <mirrorOf>central</mirrorOf> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </mirror>
-
-
3.2.5、Shell脚本准备
Shell脚本(shell script),是一种Linux系统中的脚本程序。使用Shell脚本编程跟 JavaScript、Java编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了
- 本次测试不作为学习内容,直接使用现成的demo即可
- 脚本解读
3.2.6、Linux权限
-
根据上面步骤执行完后,Shell脚本要想正常的执行,还需要给Shell脚本分配执行权限。 由于linux系统是一个多用户的操作系统,并且针对每一个用户,Linux会严格的控制操作权限。接下来,我们就需要介绍一下Linux系统的权限控制
- 1). chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令
- 2). Linux中的权限分为三种 :读(r)、写(w)、执行(x)
- 3). Linux文件权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)
- 4). 只有文件的所有者和超级用户可以修改文件或目录的权限
- 5). 要执行Shell脚本需要有对此脚本文件的执行权限(x),如果没有则不能执行
-
解析当前脚本的权限情况
-
chmod命令可以使用八进制来指定权限(0 - 代表无, 1 - 表示执行x,2 - 写w, 4 - 读r
-
权限 rwx 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位表示其他用户的权限
- 三个数字分别代表不同用户的权限
3.2.7、授权并执行脚本
- 在测试阶段,我们可以给所有的人都赋予执行该shell脚本的权限。所以可以执行如下指令
chmod 777 bootStart.sh
- 权限解读:
- A. 第一个7,代表当前文件所有者root用户,对该文件具有读写执行权限
- B. 第二个7,代表当前文件所有者所属组的用户,对该文件具有读写执行权限
- C. 第三个7,代表其他用户,对该文件具有读写执行权限
- 执行该shell版本
- 注意: 在执行maven指令进行打包时,第一次执行可能会耗时比较长,因为在进行maven工程的打包时,需要到中央仓库下载工程依赖的jar包和插件(可以在settings.xml中配置阿里云私服加速下载)。
- 启动完成之后,我们可以查看java进程
- 访问项目