一般境况下我们会把开发的项目部署到Linux系统中去,可以找bug,维护成本低等一些好处。部署项目分为手动和通过shell脚本自动部署
手动部署
1、在idea中把SpringBoot项目打包成jar包
在maven中点击package把项目打包。
下图是打包成功后的页面
打包完的项目在target目录下,然后在本地的文件里面找到jar包如下图所示
2、把jar包上传到Linux服务器
在Linux服务器中输入 :mkdir /usr/local/app 创建目录将jar包放在此目录下。(放在那里由本人自己决定,可以不一样)。使用rz jar包名称 rz这个命令是文件上传的命令需要下载软件lrzsz才能够使用。安装lrzsz的步骤如下:
搜索lrzsz安装包 命令为:yum list lrzsz
使用yum命令在线安装,命令:yum install lrzsz.x86_64 安装完成就可以使用rz 进行文件上传了。上传完毕使用命令:ll查看是否上传成功
3、启动项目
使用命令 :java -jar 项目名.jar(前提是Linux安装的有jdk)
为了方便我们操作我们可以设置一下在Windows系统中也能访问项目,我们要查看防火墙看8080端口是否对外开放。输入命令:firewall-cmd --zone=public --list --ports
如果没有对外开放端口号输入命令:firewall-cmd --zone=public --add-port=8080/tcp --permanent
然后输入命令:firewall-cmd --reload让上面那条命令即时生效。可以输入firewall-cmd --zone=public --list --ports再对开放的端口号进行查看。接下来就可以在Windows上访问项目了在浏览器上输入项目的地址,然后Linux端就响应了如下图,但是这样有一个弊端项目启动后这个页面就不能继续输命令了。我们可以设置一下把项目的输出日志在后台显示,这样我就可以继续在这个页面输入其他的命令了。
目前程序存在的问题:当我们把控制台关闭后程序就不能运行了,因此我们需要把程序设置到后台运行这样就解决了霸屏问题,同时还是生成日志文件方便我们查找信息。解决这个问题我们要用到nohup命令。nohup 命令:英文全称 no hang up(不挂起),用于不挂断地运行指定命令,退出终端不会影响程序的运行语法格式:nohup Command [Arg ...][&]
参数说明:
command:要执行的命令
Arg:一些参数,可以指定输出文件
&:让命令在后台运行
举例:
nohup java -jar boot工程.jar &> hello.log &
后台运行iava -jar命令,并将日志输出到hello.log文件
这样程序就被存到后台运行不再霸屏,同时还可以继续输入其他命令。输入:more hello.log查看日志信息
4、停止项目
输入:ps -ef | grep java找到项目的进程id接着输入kill -9 进程id这样就终止程序了。
shell脚本自动部署项目
1、在Linux中安装Git
yum list git 列出git安装包 yum install git 在线下载git
使用git clone 把远程仓库clone到本地
然后切换到仓库所在的目录,输入ll查看查看里面的代码 cd /git(git是我的远程仓库的名字)
2、在Linux中安装maven
要在自己电脑上下载maven的安装包是Linux系统的,可以在官网上下载。使用rz 命令进行文件上传
输入命令:tar -zxvf 安装包的名字。进行解压
解压后进行环境变量的配置
vim /etc/profile 修改配置文件,输入完命令 输入一个i进入插入模式
加入如下内容:
export MAVEN HOME=/usr/local/apache-maven-3.5.4(根据自己的maven版本)
export PATH=$JAVA HOME/bin:$MAVEN HOME/bin:$PATH
然后按esc健输入:wq回车
接着输入source /etc/profile加载资源
mvn -version查看maven版本号
输入mkdir repo 创建一个名为repo的目录作为maven本地仓库
输入vim /usr/local/apache-maven-3.5.4/conf/settings.xml 修改settings.xml内容
把<localRepository>/usr/local/repo</localRepository>添加在画圈的下面(先输入i才能输入内容,修改后按esc健:wq回车
3、编写Shell脚本(拉取代码、编译、打包、启动)
Shell脚本(shellscript),是一种Linux系统中的脚本程序。使用Shel脚本编程跟JavaScript、java编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器。这里用的shell脚本如下bootStart.sh 。创建一个sh的目录 madir sh 进入sh目录输入vim bootStart.sh创建bootStart.sh文件
#!/bin/sh
echo =================================
echo 自动化部署脚本启动
echo =================================
echo 停止原来运行中的工程
APP_NAME=helloworld
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Stop Process...'
kill -15 $tpid
fi
sleep 2
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
echo 'Kill Process!'
kill -9 $tpid
else
echo 'Stop Success!'
fi
echo 准备从Git仓库拉取最新代码
cd /usr/local/git(这里是自己从远程仓库clone的仓库名)
echo 开始从Git仓库拉取最新代码
git pull
echo 代码拉取完成
echo 开始打包
output=`mvn clean package -Dmaven.test.skip=true`
cd target
echo 启动项目
nohup java -jar helloworld-1.0-SNAPSHOT.jar &> helloworld.log &
echo 项目启动完成
4、为用户授予执行Shell脚本的权限
chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令
Linux中的权限分为:读(r)、写(w)、执行(x)三种权限
Linux的文件调用权限分为三级:文件所有者(0wner)、用户组(Group)、其它用户(0ther Users)只有文件的所有者和超级用户可以修改文件或目录的权限要执行Shell脚本需要有对此脚本文件的执行权限,如果没有则不能执行
chmod命令可以使用八进制数指定权限
八进制数 | 权限 | 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位表示其他用户的权限
5、执行Shell脚本
./bootStart.sh启动项目第一次启动可能会很慢因为要下载相应的jar包
这样我们的项目就自动部署完了。
关于shell脚本我们不用担心,但我们在企业开发的时候会有运维人员来编写,自己也可以学。