《Linux篇》02.超详细SpringBoot项目部署教程(附脚本自动部署)(三)

简介: 《Linux篇》02.超详细SpringBoot项目部署教程(附脚本自动部署)(三)

1.5 安装lrzsz

lrzsz 是用于在Linux系统中文件上传下载的软件。,Linux的远程连接工具有很多,而finalShell只是其中的一种,而还有很多的远程连接工具并没有上传下载的功能,这个时候就需要依赖于lrzsz这个软件了。


对于lrzsz的安装,我们需要通过第三种软件安装方式yum来进行安装。这里,我们先对yum做一个简单介绍。


Yum: (Yellow dog Updater,Modified),是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。


安装lrzsz的步骤如下:


1). 搜索lrzsz安装包


yum list lrzsz


image.png

2). 在线安装lrzsz


yum install lrzsz.x86_64

3). 测试


在命令行中输入 rz , 就会自动打开一个文件选择的窗口,然后选择要上传的文件。


image.png


yum拓展知识:


1). 如果在不更改软件来源的情况下,是需要联网才能使用yum的,那么我们安装的软件是从哪儿下载的呢,这里就涉及到一个概念: yum源。



2). 我们可以通过一个指令,来检查当前的yum源


image.png


从图中,我们可以看到我们安装的 CentOS7 采用的是网易的163yum源。



3). 网络 yum 源配置文件位于 /etc/yum.repos.d/ 目录下,文件扩展名为"*.repo"


image.png


可以看到,该目录下有 7 个 yum 配置文件,通常情况下 CentOS-Base.repo 文件生效。



4). 添加阿里云yum源


A. 先通过 yum install wget ,安装wget命令


B. 备份默认的网易163的yum源,执行指令 :


切换目录: cd /etc/yum.repos.d/


创建备份目录: mkdir bak


移动现有的yum源文件到bak: mv *.repo bak/


C. 下载阿里云的yum源


wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo


D. 执行命令,重新生成cache


yum clean all


yum makecache


E. 再次查看yum源


image.png


之后,我们通过yum指令安装软件,就是从阿里云下载的。


2. 项目部署


之前我们讲解Linux操作系统时,就提到,我们服务端开发工程师学习Linux系统的目的就是将来我们开发的项目绝大部分情况下都需要部署在Linux系统中。那么在本章节,我们将通过两种方式,来演示项目部署,分别是:手动部署项目 和 基于shell脚本自动部署。


2.1 手动部署项目

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


项目是一个很简单的springboot项目(可以自己开发一个,也可以直接导入资料中提供的),结构如下:


image.png


可以在本地的idea中先启动当前的demo工程,然后访问一下,看看工程是否正常访问。


image.png


执行package指令,进行打包操作,将当前的springboot项目,打成一个jar包。


image.png


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


image.png

此时这个jar包就上传到 /usr/local/app 目录了。


image.png


3). 启动SpringBoot程序


由于我们的项目已经打成jar包上传上来到Linux服务器,我们只需要运行这个jar包项目就启动起来了,所以只需要执行如下指令即可:


java -jar helloworld-1.0-SNAPSHOT.jar

image.png

注意: 由于前面安装的Tomcat在启动时,会占用端口号8080,而当前springboot项目我们没有配置端口号,默认也是8080,所以我们要想启动springboot项目,需要把之前运行的Tomcat停止掉。


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


firewall-cmd --zone=public --list-ports

image.png


如果防火墙没有放开8080端口,还需要放开对应的端口号,执行如下指令:


firewall-cmd --zone=public --add-port=8080/tcp --permanent

5). 访问测试


http://192.168.138.130:8080/hello


image.png


6). 后台运行项目


当前这个demo工程我们已经部署成功了,并且我们也可以访问项目了。但是这个工程目前是存在问题的,就是当前我们项目启动的这个窗口被霸屏占用了,如果我们把这个窗口关闭掉(或ctrl+c),当前服务也就访问不到了。


目前程序运行的问题:


A. 线上程序不会采用控制台霸屏的形式运行程序,而是将程序在后台运行


B. 线上程序不会将日志输出到控制台,而是输出到日志文件,方便运维查阅信息


后台运行程序:


要想让我们部署的项目进行后台运行,这个时候我们需要使用到linux中的一个命令 nohup ,接下来,就来介绍一下nohup命令。


**nohup命令:**英文全称 no hang up(不挂起),用于不挂断地运行指定命令,退出终端不会影响程序的运行


语法格式: nohup Command [ Arg … ] [&]


参数说明:


Command:要执行的命令


Arg:一些参数,可以指定输出文件


&:让命令在后台运行


举例:


nohup java -jar boot工程.jar &> hello.log &


上述指令的含义为: 后台运行 java -jar 命令,并将日志输出到hello.log文件


那么经过上面的介绍,我们可以推测中,我们要想让当前部署的项目后台运行,就可以使用下面的指令:


nohup java -jar helloworld-1.0-SNAPSHOT.jar &> hello.log &


image.png

这样的话,我们的项目就已经启动成功了,我们可以通过ps指令,查看到系统的进程。


image.png


接下来,我们再次访问我们的项目,来看看服务是否可用。


image.png


7). 停止SpringBoot项目

查看进程,然后杀进程


image.png

2.2 基于Shell脚本自动部署

2.2.1 介绍

前面介绍的项目部署是手动部署,也就是部署过程中的每一步操作都需要我们手动操作。接下来,我们需要再讲解一下项目的自动部署,从而来简化项目部署的操作,那么我们先来整体上了解一下项目自动部署的流程及操作步骤。


image.png


操作步骤如下:


1). 在Gitee上创建远程仓库,并将本地的项目代码推送到远程仓库中


2). 在Linux中安装Git,克隆代码


3). 在Linux中安装maven


4). 编写Shell脚本(拉取代码、编译、打包、启动)


5). 为用户授予执行Shell脚本的权限


6). 执行Shell脚本


2.2.2 推送代码到远程

这部分操作,大家只需要参考之前讲解的Git,来完成helloworld工程代码推送即可。


A. 创建远程仓库


image.png


B. 将idea中的代码提交并推送到远程仓库


image.png


2.2.3 Git操作

1). Git软件安装


通过yum命令在线安装git,执行如下指令:


yum list git    列出git安装包
yum install git   在线安装git

通过上述指令,安装好git之后,我们就可以通过 git --version去验证git的环境。


image.png


2). Git克隆代码


cd /usr/local/
git clone https://gitee.com/ChuanZhiBoKe/helloworld.git

image.png


2.2.4 Maven安装

由于我们的工程是maven工程,我们要想进行项目的编译打包,需要用到maven的指令,所以需要安装maven。具体操作步骤如下:


1). 上传资料中提供的maven的安装包


通过rz指令上传课程资料中的maven安装包


image.png


2). 解压maven安装包到/usr/local目录


tar -zxvf apache-maven-3.5.4-bin.tar.gz -C /usr/local


image.png

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 保存并退出

image.png


要想让配置的环境变量生效,还需要执行如下指令:


source /etc/profile


image.png

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>

image.png

并在settings.xml中的标签中,配置阿里云的私服(选做):


<mirror> 
    <id>alimaven</id> 
    <mirrorOf>central</mirrorOf> 
    <name>aliyun maven</name> 
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

image.png


2.2.5 Shell脚本准备

Shell脚本(shell script),是一种Linux系统中的脚本程序。使用Shell脚本编程跟 JavaScript、Java编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。


对于Shell脚本编写不作为本课程重点内容,直接使用课程资料中提供的脚本文件bootStart.sh即可。


在/usr/local/目录下创建一个目录 sh(mkdir sh),并将shell脚本上传到该目录下。或者直接在sh目录下创建一个脚本bootStart.sh,然后将资料中的bootStart.sh文件打开,内容拷贝过来即可。


image.png


脚本解读:


image.png


2.2.6 Linux权限

前面我们已经把Shell脚本准备好了,但是Shell脚本要想正常的执行,还需要给Shell脚本分配执行权限。 由于linux系统是一个多用户的操作系统,并且针对每一个用户,Linux会严格的控制操作权限。接下来,我们就需要介绍一下Linux系统的权限控制。


1). chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令


2). Linux中的权限分为三种 :读®、写(w)、执行(x)


3). Linux文件权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)


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


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


Linux系统中权限描述如下:


image.png


解析当前脚本的权限情况:


image.png


chmod命令可以使用八进制数来指定权限(0 - 代表无 , 1 - 执行x , 2 - 写w , 4 - 读r):

image.png

举例:


chmod 777 bootStart.sh   为所有用户授予读、写、执行权限
chmod 755 bootStart.sh   为文件拥有者授予读、写、执行权限,同组用户和其他用户授予读、执行权限
chmod 210 bootStart.sh   为文件拥有者授予写权限,同组用户授予执行权限,其他用户没有任何权限

注意:


三个数字分别代表不同用户的权限


第1位表示文件拥有者的权限

第2位表示同组用户的权限

第3位表示其他用户的权限

2.2.7 授权并执行脚本

在测试阶段,我们可以给所有的人都赋予执行该shell脚本的权限。所以可以执行如下指令:


chmod 777 bootStart.sh

注:很明显就是白色变成绿色说明有权限。

image.png


权限解读:


A. 第一个7,代表当前文件所有者root用户,对该文件具有读写执行权限;


B. 第二个7,代表当前文件所有者所属组的用户,对该文件具有读写执行权限;


B. 第三个7,代表其他用户,对该文件具有读写执行权限;


执行该shell脚本:


image.png


注意: 在执行maven指令进行打包时,第一次执行可能会耗时比较长,因为在进行maven工程的打包时,需要到中央仓库下载工程依赖的jar包和插件(可以在settings.xml中配置阿里云私服加速下载)。


启动完成之后, 我们可以查看java进程:


image.png


访问项目:


image.png


2.2.8 设置静态IP

设置静态IP可以看我的博客:超详细设置静态IP教程

相关文章
|
2月前
|
Cloud Native Java C++
Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)
文章介绍如何在Spring Boot 3中利用GraalVM将Java应用程序编译成独立的本机二进制文件,从而提高启动速度、减少内存占用,并实现不依赖JVM运行。
314 1
Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)
|
2天前
|
消息中间件 Java Kafka
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
|
9天前
|
Ubuntu Linux C++
Win10系统上直接使用linux子系统教程(仅需五步!超简单,快速上手)
本文介绍了如何在Windows 10上安装并使用Linux子系统。首先,通过应用商店安装Windows Terminal和Linux系统(如Ubuntu)。接着,在控制面板中启用“适用于Linux的Windows子系统”并重启电脑。最后,在Windows Terminal中选择安装的Linux系统即可开始使用。文中还提供了注意事项和进一步配置的链接。
27 0
|
1月前
|
Linux Python
Linux 中某个目录中的文件数如何查看?这篇教程分分钟教会你!
在 Linux 系统中,了解目录下文件数量是常见的需求。本文介绍了四种方法:使用 `ls` 和 `wc` 组合、`find` 命令、`tree` 命令以及编程实现(如 Python)。每种方法都附有详细说明和示例,适合不同水平的用户学习和使用。掌握这些技巧,可以有效提升系统管理和日常使用的效率。
507 6
|
1月前
|
Linux Python
Linux 中某个目录中的文件数如何查看?这篇教程分分钟教会你!
在 Linux 系统中,了解目录下的文件数量是常见的需求。本文介绍了多种方法,包括使用 `ls` 和 `wc` 命令组合、`find` 命令、`tree` 命令以及编程方式(如 Python)。无论你是新手还是有经验的用户,都能找到适合自己的方法。掌握这些技巧将提高你在 Linux 系统中的操作效率。
49 4
|
1月前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
Java API Apache
Springboot+shiro,完整教程,带你学会shiro
这篇文章提供了一个完整的Apache Shiro与Spring Boot结合使用的教程,包括Shiro的配置、使用以及在非Web和Web环境中进行身份验证和授权的示例。
104 2
Springboot+shiro,完整教程,带你学会shiro
|
2月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
547 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
2月前
|
缓存 NoSQL Java
springboot的缓存和redis缓存,入门级别教程
本文介绍了Spring Boot中的缓存机制,包括使用默认的JVM缓存和集成Redis缓存,以及如何配置和使用缓存来提高应用程序性能。
129 1
springboot的缓存和redis缓存,入门级别教程