• 【Linux学习】05-2Linux上部署项目


    Linux(B站黑马)学习笔记

    01Linux初识与安装
    02Linux基础命令
    03Linux用户和权限
    04Linux实用操作
    05-1Linux上安装部署各类软件
    05-2Linux上部署项目



    前言

    Linux(B站黑马)学习笔记 05-2Linux上部署项目


    05-2Linux上部署项目

    部署Springboot项目

    案例项目:瑞吉外卖

    手工部署

    1. 在IDEA中将开发的SpringBoot项目并打成jar包

    执行maven中的package命令

    注意:如果打包前已经有target目录执行打包前建议先执行clean命令,确保我们打包的时候是一个干净的环境

    1. 将jar包上传到Linux服务器
    mkdir /usr/local/app    创建目录,可以将项目jar包放到此目录
    
    • 1

    输入rz命令,打开文件上传界面

    1. 在Linux项目中运行该项目jar包
    java -jar reggie-0.0.1-SNAPSHOT.jar
    
    • 1

    注意:Linux要安装JDK才能成功运行,版本要一致。另外Springboot内嵌了Tomcat,Linux安装了Tomcat且开着的话如果与项目内使用同一端口会造成冲突。

    1. 检查防火墙,确保8080端口对外开放,访问SpringBoot项目

    CentOS系统默认开启了防火墙,阻止外部网络流量访问系统内部

    所以,如果想要正常使用,需要对8080端口进行放行

    放行有2种操作方式:

    1. 关闭防火墙

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    方便起见,建议同学们选择方式1,直接关闭防火墙一劳永逸

    且防火墙的配置非常复杂

    1. 测试访问

    1. 改为后台运行SpringBoot程序,并将日志输出到日志文件

    目前程序运行的问题:程序在终端采用霸屏形式运行,关闭终端程序也跟着关闭了

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

    nohup java -jar boot工程.jar &>日志文件.log &   后台运行java -jar命令,并将日志输出到日志文件
    
    • 1
    nohup java -Xms32m -Xmx64m -jar boot工程.jar &>日志文件.log &
    
    • 1
    • nohup: 表示忽略挂断信号,保持程序在后台运行。
    • java: 运行Java程序的命令。
    • -Xms32m -Xmx64m: 设置Java虚拟机的初始堆大小为32MB,最大堆大小为64MB。
    • -jar boot工程.jar: 指定要运行的Java程序的JAR文件路径。
    • &>日志文件.log: 将标准输出和标准错误重定向到日志文件.log文件中。
    • &: 将程序放入后台运行。

    1. 停止SpringBoot程序

    停止springboot程序需要通过杀进程的方式,找到对应的进程杀掉就行

    ps -ef | gref 'java -jar'    查看进程
    kill -9 "进程号"    杀死进程     
    
    • 1
    • 2

    通过Shell脚本自动部署项目

    操作步骤:

    1. 在Linux中安装Git

    2. 在Linux中安装maven

    3. 编写Shell脚本(可以实现拉取代码、编译、打包、启动)

    4. 为用户授予执行+Shell脚本的权限

    5. 执行shell脚本

    在Linux中安装Git、maven请看:【Linux学习】05-1Linux上安装部署各类软件

    1. 使用Git克隆代码

    1. 编写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 项目启动完成
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    此脚本其实就是自动执行杀掉运行中的进程,再进入到本地git仓库中从远程下拉代码自动打包执行。

    1. 在Linux中编辑此脚本

    执行 vim bookStart.sh 后手动将脚本内容复制进去。

    1. 为用户授权

    只用文件的所有者和超级用户可以修改文件或目录的权限

    要执行Shell脚本需要有对此脚本文件的执行权限,如果没有则不能执行

    chmod 777 bookStart.sh  # 为所有用户授予读、写、执行权限
    
    • 1

    1. 执行脚本文件
    ./bookStart.sh    # 执行脚本文件
    
    • 1

    跟踪查看日志文件

    tail -f /usr/local/reggie/target/reggie.log   # 跟踪查看日志文件
    
    • 1

    至此,项目成功通过shell脚本实现在Linux自动部署


    注:

    该内容是根据B站黑马程序员学习时所记,相关资料可在B站查询:黑马程序员新版Linux零基础快速入门到精通,全涵盖linux系统知识、常用软件环境部署、Shell脚本、云平台实践、大数据集群项目实战等

  • 相关阅读:
    Kafka消息系统
    关联线探究,如何连接流程图的两个节点
    Post与Get请求区别
    【我的第一千篇文章】
    Spring MVC使用JSON的过程与步骤
    BI与数据治理以及数据仓库有什么区别
    【vue快速入门】很适合JAVA后端看
    设计模式:外观模式(C++实现)
    Java 数据类型 -- Java 语言的 8 种基本数据类型、字符串与数组
    强者互帮,弱者互撕!
  • 原文地址:https://blog.csdn.net/weixin_48074431/article/details/133620368