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

手动/自动部署项目

手动部署

部署步骤

第一步: 通过IDEA自带的Maven面板的package指令将SpringBoot项目打成jar包并自动放在target目录下

第二步: 将jar包上传到linux服务器,可以创建一个/usr/local/app目录专门存放

第三步: 执行命令启动jar包java -jar [打包好的jar包名,注意后缀],确保8080和3306端口是开放的

  • .jar.original用来给别的项目用: 是普通jar包,不包含依赖
  • .jar文件专门用来部署: 可以直接用java -jar命令执行,包含了pom中的所有依赖
  • 这种方式是采用控制台霸屏的形式运行程序,一旦终端退出就无法访问

第四步: 在浏览器访问ip地址:端口/路径

使用线上程序的好处

  • 不会采用控制台霸屏的形式运行程序而是将程序在后台运行
  • 不会将日志输出到控制台,而是输出到日志文件,方便运维查阅信息

nohup(no hang up不挂起) Command[Arg ...][&]: 用于不挂断地运行指定命令,退出终端不会影响程序的运行

  • Command: 要执行的命令
  • Arg:一些参数如可以指定输出的日志文件(相对路径和绝对路径都可以)
  • &:让命令在后台运行
# 后台运行java -jar命令,并将日志输出到hello.log文件
nohup java -jar [打包好的jar包名] &> hello.log &
nohup java -jar MyRobot-0.0.1-SNAPSHOT.jar &> MyRobot.log &# 通过杀进程的方式停止SpringBoot程序
ps -ef | grep java -jar #查看进程号
kill -9 进程号

自动部署

部署步骤

编写Shell脚本(拉取代码,编译,打包,启动),为用户授予执行Shell脚本的权限,执行Shell脚本程序

  • 在Linux中安装Git克隆远程仓库的项目代码到本地仓库: git clone 仓库地址(自动生成目录),这样下次拉取最新代码的时候就不用指定仓库的位置了
  • 安装Maven对项目编译,打包
  • 使用java -jar命令启动项目
#!/bin/sh
echo =================================
echo  自动化部署脚本启动
echo =================================echo 停止原来运行中的工程
APP_NAME=工程名tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; thenecho '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} ]; thenecho 'Kill Process!'kill -9 $tpid
elseecho 'Stop Success!'
fiecho 准备从Git仓库拉取最新代码
cd /usr/local/克隆到本地的项目所在的目录echo 开始从Git仓库拉取最新代码
git pull
echo 代码拉取完成echo 开始打包
output=`mvn clean package -Dmaven.test.skip=true`cd targetecho 启动项目
nohup java -jar 工程名-1.0-SNAPSHOT.jar &> 工程名.log &
echo 项目启动完成
#!/bin/sh
echo =================================
echo  自动化部署脚本启动
echo =================================echo 停止原来运行中的工程
APP_NAME=hm-dianpingtpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; thenecho '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} ]; thenecho 'Kill Process!'kill -9 $tpid
elseecho 'Stop Success!'
fiecho 准备从Git仓库拉取最新代码
cd /usr/local/dian_pingecho 开始从Git仓库拉取最新代码
git pull
echo 代码拉取完成echo 开始打包
output=`mvn clean package -Dmaven.test.skip=true`cd targetecho 启动项目
nohup java -jar hm-dianping-1.0-SNAPSHOT.jar &> hm-dianping.log &
echo 项目启动完成

为用户授予执行Shell脚本的权限然后执行Shell脚本启动项目

# 7表示rwx三个权限都有
chmod 777 bootStart.sh
# 执行Shell脚本
./bootStart.sh
# 查看进程
ps -ef | grep hm-dianping
firewall-cmd --zone=public --add-port=12001/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports

相关文章:

  • 亚马逊选品工具分析
  • 哈希经典题目(C++)
  • Qt C++ TCP服务端响应多客户端通讯
  • 深入 C++ 实践:如何在完全不改变已有模块架构的情况下,二次封装接口给外部模块使用
  • 【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 多段线路径压缩(100分)- 三语言AC题解(Python/Java/Cpp)
  • python项目在日志中 打印出详细的请求参数和返回的响应
  • 观成科技:基于深度学习技术的APT加密流量检测与分类检测方案
  • 任务倒计时App
  • 公司面试题总结(二)
  • BC C language
  • 【运维】Ubuntu换硬盘扩容
  • web刷题记录(5)
  • Python网络爬虫4-实战爬取pdf
  • PDF编辑与修正 提高工作效率 Enfocus PitStop Pro 2022 中文
  • Spring应用如何打印access日志和out日志(用于分析请求总共在服务耗费多长时间)
  • ES6指北【2】—— 箭头函数
  • 【知识碎片】第三方登录弹窗效果
  • ESLint简单操作
  • Fabric架构演变之路
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • JS专题之继承
  • js作用域和this的理解
  • mysql_config not found
  • SQLServer之创建显式事务
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • Zepto.js源码学习之二
  • 编写高质量JavaScript代码之并发
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 悄悄地说一个bug
  • 用jQuery怎么做到前后端分离
  • 转载:[译] 内容加速黑科技趣谈
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • #传输# #传输数据判断#
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (黑马点评)二、短信登录功能实现
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)h264中avc和flv数据的解析
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .gitignore文件设置了忽略但不生效
  • .NET C# 操作Neo4j图数据库
  • .NET CORE 第一节 创建基本的 asp.net core
  • .net core 的缓存方案
  • .NET 表达式计算:Expression Evaluator
  • .NET编程C#线程之旅:十种开启线程的方式以及各自使用场景和优缺点
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • .NET微信公众号开发-2.0创建自定义菜单
  • @RequestMapping用法详解