Linux(B站黑马)学习笔记
01Linux初识与安装
02Linux基础命令
03Linux用户和权限
04Linux实用操作
05-1Linux上安装部署各类软件
05-2Linux上部署项目
文章目录
- Linux(B站黑马)学习笔记
- 前言
- 05-2Linux上部署项目
- 部署Springboot项目
- 手工部署
- 通过Shell脚本自动部署项目
- 注:
前言
Linux(B站黑马)学习笔记 05-2Linux上部署项目
05-2Linux上部署项目
部署Springboot项目
案例项目:瑞吉外卖
手工部署
- 在IDEA中将开发的SpringBoot项目并打成jar包
执行maven中的package命令
注意:如果打包前已经有target目录执行打包前建议先执行clean命令,确保我们打包的时候是一个干净的环境
- 将jar包上传到Linux服务器
mkdir /usr/local/app 创建目录,可以将项目jar包放到此目录
输入rz命令,打开文件上传界面
- 在Linux项目中运行该项目jar包
java -jar reggie-0.0.1-SNAPSHOT.jar
注意:Linux要安装JDK才能成功运行,版本要一致。另外Springboot内嵌了Tomcat,Linux安装了Tomcat且开着的话如果与项目内使用同一端口会造成冲突。
- 检查防火墙,确保8080端口对外开放,访问SpringBoot项目
CentOS系统默认开启了防火墙,阻止外部网络流量访问系统内部
所以,如果想要正常使用,需要对8080端口进行放行
放行有2种操作方式:
关闭防火墙
配置防火墙规则,放行端口
# 以下操作2选一即可
# 方式1:关闭防火墙
systemctl stop firewalld # 关闭防火墙
systemctl disable firewalld # 停止防火墙开机自启
# 方式2:放行8080端口的外部访问
firewall-cmd --add-port=8080/tcp --permanent # --add-port=8080/tcp表示放行8080端口的tcp访问,--permanent表示永久生效
firewall-cmd --reload # 重新载入防火墙规则使其生效
方便起见,建议同学们选择方式1,直接关闭防火墙一劳永逸
且防火墙的配置非常复杂
- 测试访问
- 改为后台运行SpringBoot程序,并将日志输出到日志文件
目前程序运行的问题:程序在终端采用霸屏形式运行,关闭终端程序也跟着关闭了
- 线上程序不会采用控制台霸屏的形式运行程序,而是将程序在后台运行
- 线上程序不会将日志输出到控制台,而是输出到日志文件,方便运维查阅信息
nohup java -jar boot工程.jar &>日志文件.log & 后台运行java -jar命令,并将日志输出到日志文件
nohup java -Xms32m -Xmx64m -jar boot工程.jar &>日志文件.log &
nohup
: 表示忽略挂断信号,保持程序在后台运行。java
: 运行Java程序的命令。-Xms32m -Xmx64m
: 设置Java虚拟机的初始堆大小为32MB,最大堆大小为64MB。-jar boot工程.jar
: 指定要运行的Java程序的JAR文件路径。&>日志文件.log
: 将标准输出和标准错误重定向到日志文件.log
文件中。&
: 将程序放入后台运行。
- 停止SpringBoot程序
停止springboot程序需要通过杀进程的方式,找到对应的进程杀掉就行
ps -ef | gref 'java -jar' 查看进程
kill -9 "进程号" 杀死进程
通过Shell脚本自动部署项目
操作步骤:
-
在Linux中安装Git
-
在Linux中安装maven
-
编写Shell脚本(可以实现拉取代码、编译、打包、启动)
-
为用户授予执行+Shell脚本的权限
-
执行shell脚本
在Linux中安装Git、maven请看:【Linux学习】05-1Linux上安装部署各类软件
- 使用Git克隆代码
- 编写Shell脚本
#!/bin/sh
echo ======================================
echo 自动化部署脚本启动
echo ======================================
echo 停止原来运行中的工程
APP_NAME=reggie
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/reggie
echo 开始从Git仓库拉取最新代码
git pull
echo 代码拉取完成
echo 开始打包
output=`mvn clean package -Dmaven.test.skip=true`
cd target
echo 启动项目
nohup java -jar reggie-0.0.1-SNAPSHOT.jar &> reggie.log &
echo 项目启动完成
此脚本其实就是自动执行杀掉运行中的进程,再进入到本地git仓库中从远程下拉代码自动打包执行。
- 在Linux中编辑此脚本
执行 vim bookStart.sh 后手动将脚本内容复制进去。
- 为用户授权
只用文件的所有者和超级用户可以修改文件或目录的权限
要执行Shell脚本需要有对此脚本文件的执行权限,如果没有则不能执行
chmod 777 bookStart.sh # 为所有用户授予读、写、执行权限
- 执行脚本文件
./bookStart.sh # 执行脚本文件
跟踪查看日志文件
tail -f /usr/local/reggie/target/reggie.log # 跟踪查看日志文件
至此,项目成功通过shell脚本实现在Linux自动部署
注:
该内容是根据B站黑马程序员学习时所记,相关资料可在B站查询:黑马程序员新版Linux零基础快速入门到精通,全涵盖linux系统知识、常用软件环境部署、Shell脚本、云平台实践、大数据集群项目实战等