文章目录
- 5. 项目部署
- 5.1 手动部署项目
- 5.2 基于Shell脚本自动部署
- 5.2.1 介绍
- 5.2.2 推送代码到远程
- 5.2.3 Git操作
- 5.2.4 Maven安装
- 5.2.5 Shell脚本准备
- 5.2.6 Linux权限
- 5.2.7 授权并执行脚本
- 5.2.8 设置静态IP
5. 项目部署
开发的项目绝大部分情况下都需要部署在Linux系统中。下面通过两种方式,来演示项目部署,分别是:手动部署项目 和 基于shell脚本自动部署。
5.1 手动部署项目
1). 在IDEA中开发SpringBoot项目并打成jar包
执行package指令,进行打包操作,将当前的springboot项目,打成一个jar包。
2). 将jar包上传到Linux服务器
通过 rz 指令,将打好的jar包上传至Linux服务器的 /usr/local/app 目录下。 先执行指令创建app目录。
A. 在/usr/local下创建目录app mkdir /usr/local/app B. 切换到app目录下 cd /usr/local/app C. 执行指令,进行jar包上传 rz
3). 启动SpringBoot程序
运行这个jar包项目执行如下指令即可:
java -jar springboot-web-quickstart-0.0.1-SNAPSHOT.jar
注意: 由于前面安装的Tomcat在启动时,会占用端口号8080,而当前springboot项目我们没有配置端口号,默认也是8080,所以我们要想启动springboot项目,需要把之前运行的Tomcat停止掉。
4). 检查防火墙,确保8080端口对外开放,访问SpringBoot项目
firewall-cmd --zone=public --list-ports
如果防火墙没有放开8080端口,还需要放开对应的端口号,执行如下指令:
firewall-cmd --zone=public --add-port=8080/tcp --permanent
5). 访问测试(因为虚拟机中ip是DHCP随机获取的,故Linux中的ip可能随主机是动态变化的)
http://192.168.27.67:8080/hello
6). 后台运行项目
当前这个demo工程已经部署成功了,并且也可以访问项目了。但是这个工程目前是存在问题的,当前项目启动的这个窗口被霸屏占用了,如果把这个窗口关闭掉(或ctrl+c),当前服务也就访问不到了。
目前程序运行的问题:
A. 线上程序不会采用控制台霸屏的形式运行程序,而是将程序在后台运行
B. 线上程序不会将日志输出到控制台,而是输出到日志文件,方便运维查阅信息
后台运行程序:
要想让部署的项目进行后台运行,需要使用到linux中的一个命令 nohup 。
**nohup命令:**英文全称 no hang up(不挂起),用于不挂断地运行指定命令,退出终端不会影响程序的运行
语法格式: nohup Command [ Arg … ] [&]
参数说明:
Command:要执行的命令
Arg:一些参数,可以指定输出文件
&:让命令在后台运行
举例:
nohup java -jar boot工程.jar &> hello.log &
上述指令的含义为: 后台运行 java -jar 命令,并将日志输出到hello.log文件
让当前部署的项目后台运行,使用下面的指令:
nohup java -jar 项目jar包名 &> test.log &
7). 停止SpringBoot项目
kill -9 7973 #通过kill Java的运行进程 -9强制,-15正常
5.2 基于Shell脚本自动部署
5.2.1 介绍
通过自动部署来简化项目部署的操作,流程及操作步骤如下图所示。
操作步骤如下:
1). 在Gitee上创建远程仓库,并将本地的项目代码推送到远程仓库中
2). 在Linux中安装Git,克隆代码
3). 在Linux中安装maven
4). 编写Shell脚本(拉取代码、编译、打包、启动)
5). 为用户授予执行Shell脚本的权限
6). 执行Shell脚本
5.2.2 推送代码到远程
A. 创建远程仓库
B. 将idea中的代码提交并推送到远程仓库
5.2.3 Git操作
1). Git软件安装
通过yum命令在线安装git,执行如下指令:
yum list git #列出git安装包 yum install git.x86_64 #在线安装git
通过上述指令,安装好git之后,可以通过 git --version去验证git的环境。
2). Git克隆代码
cd /usr/local/ git clone https://gitee.com/yishooo/linuxdemo.git
3). Git保存用户名密码
git配置文件有三个位置:
- /etc/gitconfig 系统配置文件,对应git config --system
- ~/.gitconfig 用户全局配置文件,对应git config --global
- 项目目录中.git/config 仅该项目配置文件,对应git config --local
使用git拉取时需输入用户名和密码,为防止每次都输入,可通过配置保存用户名和密码。
cd .git vi config
添加如下内容:
[credential] helper = store
结果如下所示:
5.2.4 Maven安装
由于是maven工程,要想进行项目的编译打包,需要用到maven的指令,所以需要安装maven。具体操作步骤如下:
1). 上传下载的maven的安装包
通过rz指令上传maven安装包
2). 解压maven安装包到/usr/local目录
tar -zxvf apache-maven-3.5.4-bin.tar.gz -C /usr/local #创建maven本地仓库文件夹 mkdir /usr/local/repo
3). 在/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
4). 修改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>
5.2.5 Shell脚本准备
Shell脚本(shell script),是一种Linux系统中的脚本程序。使用Shell脚本编程跟 JavaScript、Java编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
在/usr/local/目录下创建一个目录 sh(mkdir sh),在sh目录下创建一个脚本bootStart.sh,内容如下:
#!/bin/sh echo ================================= echo 自动化部署脚本启动 echo ================================= echo 停止原来运行中的工程 APP_NAME=linuxdemo #运行项目的名称 tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'` #查询系统中正在运行的linuxdemo的进程,排除grep和kill本身,取每行第2个字段(即进程id) if [ ${tpid} ]; then echo 'Stop Process...' kill -15 $tpid #如果tpid不为空则正常kill进程 fi sleep 2 tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'` #睡眠2秒重新查询程序进程id是否还在 if [ ${tpid} ]; then echo 'Kill Process!' kill -9 $tpid #还在进行强制kill进程 else echo 'Stop Success!' fi echo 准备从Git仓库拉取最新代码 cd /usr/local/app/linuxdemo echo 开始从Git仓库拉取最新代码 git pull echo 代码拉取完成 echo 开始打包 output=`mvn clean package -Dmaven.test.skip=true` #用mvn先清除之前的target项目,再打包跳过测试部分 cd target echo 启动项目 nohup java -jar linuxdemo-0.0.1-SNAPSHOT.jar &> linuxdemo.log & echo 项目启动完成
5.2.6 Linux权限
Shell脚本要想正常的执行,还需要给Shell脚本分配执行权限。 由于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 3 写 + 执行 -wx 4 只读 r– 2 只写 -w- 1 只执行 –x 0 无 — 举例:
chmod 777 bootStart.sh 为所有用户授予读、写、执行权限 chmod 755 bootStart.sh 为文件拥有者授予读、写、执行权限,同组用户和其他用户授予读、执行权限 chmod 210 bootStart.sh 为文件拥有者授予写权限,同组用户授予执行权限,其他用户没有任何权限
注意:
三个数字分别代表不同用户的权限
- 第1位表示文件拥有者的权限
- 第2位表示同组用户的权限
- 第3位表示其他用户的权限
5.2.7 授权并执行脚本
在测试阶段,可以给所有的人都赋予执行该shell脚本的权限。所以可以执行如下指令:
chmod 777 bootStart.sh
执行该shell脚本:
注意: 在执行maven指令进行打包时,第一次执行可能会耗时比较长,因为在进行maven工程的打包时,需要到中央仓库下载工程依赖的jar包和插件(可以在settings.xml中配置阿里云私服加速下载)。
启动完成之后, 可以查看java进程:
5.2.8 设置静态IP
默认IP地址是动态获取的,IP地址可能会发生变动
1). 设置静态IP
设置静态ip,需要修改 /etc/sysconfig/network-scripts/ifcfg-ens33 配置文件,内容如下:
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static # 设置ip的获取方式为静态 IPADDR="192.168.93.152" # 设置的静态IP地址 NETMASK="255.255.255.0" # 子网掩码 GATEWAY="192.168.93.2" # 网关地址 DNS1="192.168.93.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模式配置的网关保持一致。
2). 重启网络服务
ip地址修改完毕之后,需要重启网络服务,执行如下指令:
systemctl restart network
注意:重启完网络服务后ip地址已经发生了改变,需要创建一个新连接才能连接到Linux。