linux-02-软件安装-centos7配置jdk、tomcat、lrzsz、项目部署(Git、Maven)

news2025/4/17 15:44:21

文章目录

  • Linux-Day02
    • 课程内容
    • 1. 软件安装
      • 1.1 软件安装方式
      • 1.2 安装JDK
        • shell脚本里写 cd命令不生效
      • 1.3 安装Tomcat
        • 1.3.1 Tomcat安装
        • 好多方便的自定义命令:
        • 1.3.2 Tomcat进程查看
        • 1.3.3 防火墙操作
        • 1.3.4 停止Tomcat
      • 1.4 安装MySQL
        • 1.4.1 MySQL安装
        • 1.4.2 MySQL启动
        • 1.4.3 MySQL登录
          • 1.4.3.1 查阅临时密码
          • 1.4.3.2 登录MySQL
      • 1.5 安装lrzsz
    • 2. 项目部署
      • 2.1 手动部署项目
      • 2.2 基于Shell脚本自动部署
        • 2.2.1 介绍
        • 2.2.2 推送代码到远程
        • 2.2.3 Git操作
        • 2.2.4 Maven安装
  • TODO
        • 2.2.5 Shell脚本准备
        • 2.2.6 Linux权限
        • 2.2.7 授权并执行脚本
        • 2.2.8 设置静态IP

Linux-Day02

课程内容

  • 软件安装

  • 项目部署

1. 软件安装

1.1 软件安装方式

在Linux系统中,安装软件的方式主要有四种,这四种安装方式的特点如下:

安装方式特点
二进制发布包安装软件已经针对具体平台编译打包发布,只要解压,修改配置即可
rpm安装软件已经按照redhat的包管理规范进行打包,使用rpm命令进行安装,不能自行解决库依赖问题
yum安装一种在线软件安装方式,本质上还是rpm安装,自动下载安装包并安装,安装过程中自动解决库依赖问题(安装过程需要联网)
源码编译安装软件以源码工程的形式发布,需要自己编译打包

1.2 安装JDK

上述我们介绍了Linux系统软件安装的四种形式,接下来我们就通过第一种(二进制发布包)形式来安装JDK。 JDK对应的二进制发布包,在课程资料中已经提供,如下:在这里插入图片描述

JDK具体安装步骤如下:

1). 上传安装包

使用FinalShell自带的上传工具将jdk的二进制发布包上传到Linux

先在root用户目录下创建2个文件夹,proLearn, 除了anaconda-ks.cfg文件之外的所有文件全部移动到proLearn目录下。然后创建software目录,专门放我们的安装包:

在这里插入图片描述

在这里插入图片描述
到software查看上传的文件
在这里插入图片描述

2). 解压安装包

执行如下指令,将上传上来的压缩包进行解压,并通过 -C参数 指定解压文件存放目录为 /usr/local。

tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local

在这里插入图片描述

3). 配置环境变量

使用vim命令修改/etc/profile文件,在文件末尾加入如下配置

JAVA_HOME=/usr/local/jdk1.8.0_171
PATH=$JAVA_HOME/bin:$PATH

在这里插入图片描述

具体操作指令如下:

1). 编辑/etc/profile文件,进入命令模式
	vim /etc/profile

2). 在命令模式中,输入指令 G , 切换到文件最后 ★
	G

3). 在命令模式中输入 i/a/o 进入插入模式,然后切换到文件最后一行
	i

4). 将上述的配置拷贝到文件中
	JAVA_HOME=/usr/local/jdk1.8.0_171
	PATH=$JAVA_HOME/bin:$PATH
	
5). 从插入模式,切换到指令模式
	ESC
	
6). 按:进入底行模式,然后输入wq,回车保存
	:wq

4). 重新加载profile文件

为了使更改的配置立即生效,需要重新加载profile文件,执行命令:

source /etc/profile

5). 检查安装是否成功

java -version

在这里插入图片描述

shell脚本里写 cd命令不生效

写了一个shell: toTrash
内容如下

cd /root/.local/share/Trash/files

但是执行不生效
百度发现必须得 source toTrash 才行
于是在 ~/.bashrc 里面加上一句

alias toTrash='source toTrash'

即可,间接使得cd命令生效了 然后成功简化命令,或者说创建了自定义命令

1.3 安装Tomcat

1.3.1 Tomcat安装

Tomcat的安装和上述JDK的安装采用相同的方式,都是使用二进制发布包的形式进行安装,在我们的资料目录下,也已经准备了Tomcat的安装包:

在这里插入图片描述

具体安装步骤如下:

1). 上传安装包

使用FinalShell自带的上传工具将Tomcat的二进制发布包上传到Linux(与前面上传JDK安装包步骤一致)。

在这里插入图片描述

2). 解压安装包

将上传上来的安装包解压到指定目录/usr/local下,执行命令为

tar -zxvf apache-tomcat-7.0.57.tar.gz -C /usr/local

在这里插入图片描述

比jdk简单,都不用配置环境变量,解压就安装好了

3). 启动Tomcat

进入Tomcat的bin目录启动服务。执行命令为:

cd /usr/local/apache-tomcat-7.0.57/

cd bin

sh startup.sh或者./startup.sh

在这里插入图片描述
在这里插入图片描述

好多方便的自定义命令:

在这里插入图片描述
在这里插入图片描述

# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias la='ls -lah'
alias lt='ls -t'
alias lr='ls -r'
alias l='ls -CF'
alias clc='clear'
alias cls='clear'
alias note='cat /root/.mycommand/note.txt | less'
alias toTrash='source toTrash'
alias toJdk='source toJdk'
alias toTomcat='source toTomcat'
alias toCmd='source toCmd'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

export PATH="$PATH:~/.mycommand"

下面所有的cd命令得配合 上面的 alias 使用

  • lsJdk

    ls "/usr/local/jdk1.8.0_171/"
    
  • lsTomcat

    ls /usr/local/apache-tomcat-7.0.57
    
  • lsTrash

    ls /root/.local/share/Trash/files
    
  • toCmd

    cd ~/.mycommand
    
  • toJdk

    cd /usr/local/jdk1.8.0_171/
    
  • toTomcat

    cd /usr/local/apache-tomcat-7.0.57
    
  • toTrash

    cd /root/.local/share/Trash/files
    
  • shutdownTomcat

    /usr/local/apache-tomcat-7.0.57/bin/shutdown.sh
    
  • startTomcat

    /usr/local/apache-tomcat-7.0.57/bin/startup.sh
    
  • vb

    vim ~/.bashrc
    
  • mrm

    if test $# -eq 0
            then
            echo "rm命令至少需要一个参数-文件名或文件夹名!"
    else
            while [ $# != 0 ]
            do
                    mv $1 /root/.local/share/Trash/files 
                    if [ $? != 0 ]
                            then
                            echo
                            echo "$1删除失败!"
                            echo "参考:"
                            echo "    1.请确保文件存在!"
                            echo "    2.权限问题请改用srm命令!"
                            exit 1
                    fi
                    echo "$1已放入回收站!"
                    shift
            done
    fi
    
    
  • my

cat ~/.mycommand/my.txt

my > my.txt

/root/.mycommand/my.txt

回收站目录:
/root/.local/share/Trash/files

jdk安装目录:
/usr/local/jdk1.8.0_171/

tomcat安装目录:
/usr/local/apache-tomcat-7.0.57


1). 分页查询Tomcat的日志信息
more /usr/local/apache-tomcat-7.0.57/logs/catalina.out

2). 查询Tomcat日志文件尾部的50行记录
tail -50 /usr/local/apache-tomcat-7.0.57/logs/catalina.out

3). 动态查看Tomcat日志信息,调试用
tail -f /usr/local/apache-tomcat-7.0.57/logs/catalina.out

4). 查看tomcat系统进程
ps -ef|grep tomcat

kill也可以关闭tomcat
kill命令是Linux提供的用于结束进程的命令,-9表示强制结束 52016是上面ps命令查找的进程id
kill -9 52016


开放指定端口: 其中8080是想要开放的端口号 (需要重新加载生效)
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=3306/tcp --permanent

关闭指定端口: 其中8080是想要关闭的端口号 (需要重新加载生效)
firewall-cmd --zone=public --remove-port=8080/tcp --permanent

立即生效(重新加载)
firewall-cmd --reload

查看开放端口
firewall-cmd --zone=public --list-ports

查询当前系统中安装的所有软件 (类似windows控制面板->卸载程序)
rpm -qa

查询当前系统中安装的名称带mysql的软件
rpm -qa | grep mysql


卸载软件
rpm -e --nodeps  软件名称
卸载 mariadb
rpm -e --nodeps  mariadb-libs-5.5.68-1.el7.x86_64


mysql安装目录:
/usr/local/mysql


升级现有软件及系统内核
yum update


查看mysql服务状态
systemctl status mysqld

启动mysql服务
systemctl start mysqld

停止mysql服务
systemctl stop mysqld

可以设置开机时启动mysql服务,避免每次开机启动mysql。执行如下指令:
systemctl enable mysqld


查看已经启动的服务:
netstat -tunlp

我们可以通过如下两种方式,来判定mysql是否启动:
查看mysql的服务信息:
netstat -tunlp | grep mysql
查看mysql进程:
ps -ef | grep mysql
mysql日志:
/var/log/mysqld.log


登录mysql: 输入下面指令后直接回车,会提示你输入密码,再输入密码回车即可
mysql -uroot -p

修改密码:
设置密码长度最低位数:
set global validate_password_length=4;
设置密码安全等级低,便于密码可以修改成root、1234 这种
set global validate_password_policy=LOW;
设置密码为1234
set password = password('1234');

开启外部访问权限: root/1234 分别是被授权用户的用户名和密码
grant all on *.* to 'root'@'%' identified by '1234';
flush privileges;

1.3.2 Tomcat进程查看

上述我们将Tomcat启动完成之后,并不能知道Tomcat是否正常运行,那么我们验证Tomcat启动是否成功,有多种方式,我们这里主要介绍常见的两种方式:

1). 查看启动日志

Tomcat的启动日志输出在Tomcat的安装目录下的logs目录中,Tomcat的启动及运行日志文件名为 catalina.out,所以我们查看Tomcat启动日志,主要可以通过两条指令,如下:

1). 分页查询Tomcat的日志信息
more /usr/local/apache-tomcat-7.0.57/logs/catalina.out

2). 查询日志文件尾部的50行记录
tail -50 /usr/local/apache-tomcat-7.0.57/logs/catalina.out

3). 动态查看Tomcat日志信息,调试用
tail -f /usr/local/apache-tomcat-7.0.57/logs/catalina.out

只要Tomcat在启动的过程中,日志输出没有报错,基本可以判定Tomcat启动成功了。

在这里插入图片描述

2). 查询系统进程

我们也可以通过Linux系统的查看系统进程的指令,来判定Tomcat进程是否存在,从而判定Tomcat是否启动。执行如下指令:

ps -ef|grep tomcat

在这里插入图片描述
在这里插入图片描述

说明:

  • ps命令是linux下非常强大的进程查看命令,通过ps -ef可以查看当前运行的所有进程的详细信息

  • “|” 在Linux中称为管道符,可以将前一个命令的结果输出给后一个命令作为输入

  • 使用ps命令查看进程时,经常配合管道符和查找命令 grep 一起使用,来查看特定进程

1.3.3 防火墙操作

前面我们已经通过日志的方式及查看系统进程的方式,验证了Tomcat服务已经正常启动,接下来我们就可以尝试访问一下。访问地址:http://192.168.138.130:8080,我们发现是访问不到的。

在这里插入图片描述

那为什么tomcat启动成功了,但就是访问不到呢?原因就在于Linux系统的防火墙,系统安装完毕后,系统启动时,防火墙自动启动,防火墙拦截了所有端口的访问。接下来我们就需要学习一下,如何操作防火墙,具体指令如下:

操作指令备注
查看防火墙状态systemctl status firewalld / firewall-cmd --state
暂时关闭防火墙systemctl stop firewalld
永久关闭防火墙(禁用开机自启)systemctl disable firewalld下次启动,才生效
暂时开启防火墙systemctl start firewalld
永久开启防火墙(启用开机自启)systemctl enable firewalld下次启动,才生效
开放指定端口firewall-cmd --zone=public --add-port=8080/tcp --permanent需要重新加载生效
关闭指定端口firewall-cmd --zone=public --remove-port=8080/tcp --permanent需要重新加载生效
立即生效(重新加载)firewall-cmd --reload
查看开放端口firewall-cmd --zone=public --list-ports

注意:

​ A. systemctl是管理Linux中服务的命令,可以对服务进行启动、停止、重启、查看状态等操作

​ B. firewall-cmd是Linux中专门用于控制防火墙的命令

​ C. 为了保证系统安全,服务器的防火墙不建议关闭

那么我们要想访问到Tomcat,就可以采取两种类型的操作:

A. 关闭防火墙

执行指令 :

systemctl stop firewalld

关闭之后,再次访问Tomcat,就可以访问到了。

在这里插入图片描述

注意: 上面我们也提到了,直接关闭系统的防火墙,是不建议的,因为这样会造成系统不安全。

B. 开放Tomcat的端口号8080

执行指令:

①. 先开启系统防火墙
systemctl start firewalld

②. 再开放8080端口号
firewall-cmd --zone=public --add-port=8080/tcp --permanent

③. 重新加载防火墙
firewall-cmd --reload

执行上述的操作之后,就开放了当前系统中的8080端口号,再次访问Tomcat。可以访问到

  • 小结
    在这里插入图片描述

1.3.4 停止Tomcat

在Linux系统中,停止Tomcat服务的方式主要有两种:

1). 运行Tomcat提供的脚本文件

在Tomcat安装目录下有一个bin目录,这个目录中存放的是tomcat的运行脚本文件,其中有一个脚本就是用于停止tomcat服务的。

在这里插入图片描述

我们可以切换到bin目录,并执行如下指令,来停止Tomcat服务:

sh shutdown.sh
./shutdown.sh

2). 结束Tomcat进程

我们可以先通过 ps -ef|grep tomcat 指令查看tomcat进程的信息,从进程信息中获取tomcat服务的进程号。然后通过kill -9 的形式,来杀死系统进程。

在这里插入图片描述

通过上述的指令,我们可以获取到tomcat的进程号为 52016。接下来,我们就可以通过指令 ,来杀死tomcat的进程 :

kill -9 52016

执行完上述指令之后,我们再访问Linux系统中的Tomcat,就访问不到了。

注意:

​ kill命令是Linux提供的用于结束进程的命令,-9表示强制结束

注意 :

​ 虽然上述讲解的两种方式,都可以停止Tomcat服务,但是推荐使用第一种方式(./shutdown.sh)执行脚本来关闭tomcat服务,如果通过第一种方式停止不了tomcat了,这个时候,我们可以考虑使用第二种方式,强制杀死进程。

1.4 安装MySQL

1.4.1 MySQL安装

对于MySQL数据库的安装,我们将要使用前面讲解的第二种安装方式rpm进行安装。那么首先我们先了解一下什么是rpm?

RPM:全称为 Red-Hat Package Manager,RPM软件包管理器,是红帽Linux用于管理和安装软件的工具。

我们要通过rpm,进行MySQL数据库的安装,主要的步骤如下:

1). 检测当前系统是否安装过MySQL相关数据库

需要通过rpm相关指令,来查询当前系统中是否存在已安装的mysql软件包,执行指令如下:
(rpm就类似windows控制面板->卸载程序)

rpm -qa							查询当前系统中安装的所有软件
rpm -qa | grep mysql			查询当前系统中安装的名称带mysql的软件
rpm -qa | grep mariadb			查询当前系统中安装的名称带mariadb的软件

通过rpm -qa 查询到系统通过rpm安装的所有软件,太多了,不方便查看,所以我们可以通过管道符 | 配合着grep进行过滤查询。

在这里插入图片描述

通过查询,我们发现在当前系统中存在mariadb数据库,是CentOS7中自带的,而这个数据库和MySQL数据库是冲突的,所以要想保证MySQL成功安装,需要卸载mariadb数据库。

2). 卸载现有的MySQL数据库

在rpm中,卸载软件的语法为:

rpm -e --nodeps  软件名称

那么,我们就可以通过指令,卸载 mariadb,具体指令为:

rpm -e --nodeps  mariadb-libs-5.5.68-1.el7.x86_64

在这里插入图片描述

我们看到执行完毕之后, 再次查询 mariadb,就查不到了,因为已经被成功卸载了。

3). 将资料中提供的MySQL安装包上传到Linux并解压

A. 上传MySQL安装包

在课程资料中,提供的有MySQL的安装包 ,我们需要将该安装包上传到Linux系统的/root/software目录下面。

在这里插入图片描述
在这里插入图片描述

B. 解压到/usr/local/mysql (没有目录就先创建目录)

执行如下指令:

tar -zxvf : 这个指令参数应该非常熟悉了

mkdir /usr/local/mysql
tar -zxvf mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar.gz -C /usr/local/mysql

在这里插入图片描述

注意现在只是解压了,还并没有安装。 .rpm相当于windows的.exe

4). 安装顺序安装rpm安装包

由于rpm不会自动处理依赖,所以得按照下面调整好的顺序来安装

rpm -ivh mysql-community-common-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm
yum install net-tools
rpm -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm

说明:

  • 因为rpm安装方式,是不会自动处理依赖关系的,需要我们自己处理,所以对于上面的rpm包的安装顺序不能随意修改
  • 安装过程中提示缺少net-tools依赖,使用yum安装(yum是一种在线安装方式,需要保证联网)
  • 可以通过指令(yum update)升级现有软件及系统内核

在这里插入图片描述

1.4.2 MySQL启动

MySQL安装完成之后,会自动注册为系统的服务,服务名为mysqld。那么,我们就可以通过systemctl指令来查看mysql的状态、启动mysql、停止mysql。

systemctl status mysqld		查看mysql服务状态
systemctl start mysqld		启动mysql服务
systemctl stop mysqld		停止mysql服务

在这里插入图片描述

说明:

​ 可以设置开机时启动mysql服务,避免每次开机启动mysql。执行如下指令:

​ systemctl enable mysqld

我们可以通过如下两种方式,来判定mysql是否启动:

netstat -tunlp					查看已经启动的服务
netstat -tunlp | grep mysql		查看mysql的服务信息

ps –ef | grep mysql				查看mysql进程

在这里插入图片描述

备注:

A. netstat命令用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。

​ 参数说明:

​ -l或–listening:显示监控中的服务器的Socket;
​ -n或–numeric:直接使用ip地址,而不通过域名服务器;
​ -p或–programs:显示正在使用Socket的程序识别码和程序名称;
​ -t或–tcp:显示TCP传输协议的连线状况;
​ -u或–udp:显示UDP传输协议的连线状况;

B. ps命令用于查看Linux中的进程数据。

1.4.3 MySQL登录

1.4.3.1 查阅临时密码

MySQL启动起来之后,我们就可以测试一下登录操作,但是我们要想登录MySQL,需要一个访问密码,而刚才在安装MySQL的过程中,并没有看到让我们设置访问密码,那这个访问密码是多少呢? 那实际上,对于rpm安装的mysql,在mysql第一次启动时,会自动帮我们生成root用户的访问密码,并且输出在mysql的日志文件 /var/log/mysqld.log中,我们可以查看这份日志文件,从而获取到访问密码。

可以执行如下指令:

1). cat /var/log/mysqld.log

在这里插入图片描述

这种方式,可以看到所有的日志数据,文件比较大时,很不方便查看数据。我们可以通过管道符 | 配合grep来对数据进行过滤。

2). cat /var/log/mysqld.log | grep password

我们可以通过上述指令,查询日志文件内容中包含password的行信息。

在这里插入图片描述

1.4.3.2 登录MySQL

获取到root用户的临时密码之后,我们就可以登录mysql数据库,修改root的密码,为root设置一个新的密码。并且我们还需要开启root用户远程访问该数据库的权限,这样的话,我们就可以在windows上来访问这台MySQL数据库。

执行如下指令:

①. 登录mysql(复制日志中的临时密码登录)
	mysql -uroot -p    (输入这么多后直接回车 会让你输入密码的)		

②. 修改密码
    set global validate_password_length=4;			设置密码长度最低位数
    set global validate_password_policy=LOW;		设置密码安全等级低,便于密码可以修改成root
    set password = password('1234');				设置密码为1234
    
③. 开启访问权限  (允许 root用户且密码1234 登录)
    grant all on *.* to 'root'@'%' identified by '1234';
    flush privileges;

在这里插入图片描述
在这里插入图片描述

操作完上述的指令之后,数据库root用户的密码以及远程访问我们就配置好了,接下来,可以执行exit退出mysql,再次通过新的密码进行登录。

改完密码后就可以: mysql -uroot -p1234 登录了

在这里插入图片描述

当然我们也可以使用安装在windows系统中的sqlyog或者Navicat来远程连接linux上的MySQL。

在这里插入图片描述

注意: 要想在windows上能够访问MySQL,还需要开放防火墙的3306端口,执行如下指令:

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload

在这里插入图片描述

cmd试了登录,登录不了,可能就是不如oracle的sqlplus工具吧

1.5 安装lrzsz

lrzsz 是用于在Linux系统中文件上传下载的软件。大家可能会存在疑问,我们用finalShell图形化界面就可以很方便的完成上传下载,为什么还要使用这个软件来完成上传下载呢?实际上是这样的,Linux的远程连接工具有很多,而finalShell只是其中的一种,而还有很多的远程连接工具并没有上传下载的功能,这个时候就需要依赖于lrzsz这个软件了。

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

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

安装lrzsz的步骤如下:

1). 搜索lrzsz安装包

yum list lrzsz

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yWwVlqbn-1682402628575)(assets/image-20210815014811466.png)]

2). 在线安装lrzsz

yum install lrzsz.x86_64

在这里插入图片描述

3). 测试

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

在这里插入图片描述
多好啊,按一下rz,就能可视化地上传文件了。

yum拓展知识:

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

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

在这里插入图片描述

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

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

在这里插入图片描述

​ 可以看到,该目录下有 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源

在这里插入图片描述

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

2. 项目部署

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

2.1 手动部署项目

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

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

HelloController.java

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/hello")
public class HelloController {
    @GetMapping
    public String hello(){
        System.out.println("hello world...");
        return "hello world...";
    }
}

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>
<a href="http://localhost:80/hello">hello</a>
</h1>
</body>
</html>

application.yml

server:
  port: 80
logging:
  level:
    cn.whu: debug

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

3). 启动SpringBoot程序

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

java -jar helloworld-1.0-SNAPSHOT.jar

在这里插入图片描述

注意: 如果yml文件里配置的端口号是8080,由于前面安装的Tomcat在启动时,会占用端口号8080,而当前springboot项目我们没有配置端口号,默认也是8080,所以我们要想启动springboot项目,需要把之前运行的Tomcat停止掉。
我这里配置的是80,就没有这个问题了

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

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

在这里插入图片描述

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

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

5). 访问测试

http://192.168.141.130

注意ip地址换成自己的

在这里插入图片描述

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-0.0.1-SNAPSHOT.jar &> hello.log &

注意项目名称HelloWorld-0.0.1-SNAPSHOT.jar 换成自己的

在这里插入图片描述

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

ps -ef | grep java

在这里插入图片描述

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

在这里插入图片描述

  • 日志查看输出+动态查看日志
tail -f hello.log

在这里插入图片描述

关闭终端后,仍然可以访问,就一直常驻后台了。
手动配置算是完成啦

7). 停止SpringBoot项目

在这里插入图片描述

2.2 基于Shell脚本自动部署

2.2.1 介绍

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

在这里插入图片描述
直接从Git仓库拉取,方便多了呀

操作步骤如下:

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

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

3). 在Linux中安装maven

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

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

6). 执行Shell脚本

2.2.2 推送代码到远程

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

A. 创建远程仓库

注意新仓库啥文件都不要有,这样能省去很多麻烦

在这里插入图片描述

B. IDEA项目连接远程仓库

  • 创建本地仓库
    在这里插入图片描述
    在这里插入图片描述

  • 复制远程仓库路径:
    在这里插入图片描述

https://gitee.com/hzawhu/linux-helloworld.git
  • 关联远程仓库
    在这里插入图片描述
    在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

其实刚刚只是提交到本地仓库,接下来才是push到远程仓库

在这里插入图片描述

到远程仓库看看

在这里插入图片描述

OK啦~

2.2.3 Git操作

1). Git软件安装

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

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

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

在这里插入图片描述

2). Git克隆代码

mkdir /usr/local/app/helloworld
cd /usr/local/app/helloworld
git clone https://gitee.com/hzawhu/linux-helloworld.git

在这里插入图片描述

2.2.4 Maven安装

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

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

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

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

source /etc/profile

在这里插入图片描述

TODO

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>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mcB33Tcf-1682402628580)(assets/image-20210815152936129.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> 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4giSvvWd-1682402628580)(assets/image-20210815170915170.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文件打开,内容拷贝过来即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wtTKItn3-1682402628580)(assets/image-20210815153759071.png)]

脚本解读:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PmNh0mEP-1682402628581)(assets/image-20210815154943654.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系统中权限描述如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e6YVpB2b-1682402628581)(assets/image-20210815162945754.png)]

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

image-20210815162135509

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

权限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位表示其他用户的权限

2.2.7 授权并执行脚本

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

chmod 777 bootStart.sh

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aS5z4xLu-1682402628581)(assets/image-20210815163957647.png)]

权限解读:

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

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

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

执行该shell脚本:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xTqeyYOd-1682402628581)(assets/image-20210815170334935.png)]

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KkGQoro6-1682402628581)(assets/image-20210815170418707.png)]

访问项目:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JQf4Nsx6-1682402628581)(assets/image-20210815132748655.png)]

2.2.8 设置静态IP

我们目前安装的Linux操作系统,安装完毕之后并没有配置IP地址,默认IP地址是动态获取的,那如果我们使用该Linux服务器部署项目,IP动态获取的话,也就意味着,IP地址可能会发生变动,那我们访问项目的话就会非常繁琐,所以作为服务器,我们一般还需要把IP地址设置为静态的。

1). 设置静态IP

设置静态ip,我们就需要修改 /etc/sysconfig/network-scripts/ifcfg-ens33 配置文件,内容如下:

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR="192.168.138.100"        # 设置的静态IP地址
NETMASK="255.255.255.0"         # 子网掩码
GATEWAY="192.168.138.2"         # 网关地址
DNS1="192.168.138.2"            # DNS服务器
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=afd0baa3-8bf4-4e26-8d20-5bc426b75fd6
DEVICE=ens33
ONBOOT=yes
ZONE=public

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E2x8P6UQ-1682402628581)(assets/image-20210815171934667.png)]

上述我们所设置的网段为138,并不是随意指定的,需要和我们虚拟机中的虚拟网络编辑器中的NAT模式配置的网关保持一致。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U6h51FJ0-1682402628582)(assets/image-20210815172303896.png)]

2). 重启网络服务

ip地址修改完毕之后,需要重启网络服务,执行如下指令:

systemctl restart network

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NbmHX9Ld-1682402628582)(assets/image-20210815172448448.png)]

注意:重启完网络服务后ip地址已经发生了改变,此时FinalShell已经连接不上Linux系统,需要创建一个新连接才能连接到Linux。

再次连接上Linux之后,我们再次查看IP地址,就可以看到我们所设置的静态IP:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eyQGEe4e-1682402628582)(assets/image-20210815172832108.png)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/464075.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PYQT5学习笔记04——QObject对象和属性名称设置API以及对应案例

一、QObject对象和属性名称设置API 简单介绍一下PyQt5最上层父类QObject的一些属性方法&#xff0c;并给出具体的使用过程示例。 1、setObjectName(“唯一名称”)和objectName() setObjectName方法的作用是给Qt对象设置一个名称&#xff0c;一般这个名称是唯一的&#xff0c;这…

Excel技能之实用技巧,高手私藏

今天来讲一下Excel技巧&#xff0c;工作常用&#xff0c;高手私藏。能帮到你是我最大的荣幸。 与其加班熬夜赶进度&#xff0c;不如下班学习提效率。能力有成长&#xff0c;效率提上去&#xff0c;自然不用加班。 消化吸收&#xff0c;工作中立马使用&#xff0c;感觉真不错。…

【Java】Eclipse如何创建java项目并运行

前面Eclipse、JDK的安装与JDK环境变量配置好了之后&#xff0c;开始进行基本的使用 一、创建java项目并运行 1、先打开Eclipse IDE 2、创建项目 点击左上角的File—>New—>Project&#xff0c;这样就可以新建一个Java的项目了。也就是说&#xff0c;在Eclipse中&#…

设置ubuntu开机启动脚本

一、新建xx-setpower.service文件 sudo gedit /etc/systemd/system/xx-setpower.service [Unit] DescriptionXX SetPower Service Afternetwork.target Wantsnetwork.target[Service] Typesimple PIDFile/run/take_up_boot.pid ExecStart/usr/bin/take_up_boot.sh Restarton-…

二进制码与格雷码的相互转换原理与Verilog实现

二进制码与格雷码的相互转换原理与Verilog实现 一、写在前面二、二进制码与格雷码的相互转换2.1 二进制码转格雷码原理2.2 异或运算的特性2.3 格雷码转二进制码原理 三、二进制码与格雷码相互转换的Verilog实现四、仿真验证五、写在后面 一、写在前面 二进制码是一种基于二进制…

RibbitMQ之RabbitMQ的介绍与安装

RabbitMQ的介绍与安装 1. MQ 的相关概念1.1 MQ 的概念1.2 MQ 的作用1.3 MQ 的分类1.3.1 ActiveMQ1.3.2 Kafka1.3.3 RocketMQ1.3.4 RabbitMQ 1.4 MQ 的选择 2. RabbitMQ2.1 RabbitMQ 的概念2.2 RabibitMQ 的四大核心2.3 RabbitMQ 的核心部分2.4 RabbitMQ 名词介绍2.5 安装 Rabbi…

数学建模第五天:数学建模算法篇之层次分析法AHP

目录 一、前言 1、例题 2、层次分析法用途 二、层次分析法步骤 1、建立层次结构图 2、构造两两比较矩阵 3、确定相对权重向量 ①特征根法 ②和法 4、一致性检验 5、计算层次总排序权值和一致性检验 一、前言 1、例题 有大学生刘昊、小王、阿三、蛋仔四人&#xff0…

闪电加密和隐藏加密文件夹忘记密码怎么办?

闪电加密和隐藏加密是文件夹加密超级大师的两种文件夹加密类型&#xff0c;它们都拥有超快的加密算法&#xff0c;可以瞬间加密超大文件夹。那么这两种文件夹加密类型忘记密码该怎么办呢&#xff1f;下面我们一起来了解一下吧。 闪电加密和隐藏加密文件夹找回密码 首先&#x…

HashMap的扩容机制、初始化容量大小的选择、容量为什么是2的次幂

前置知识 先来看看HashMap中的成员属性 解释&#xff1a; size当前的容器中Entry的数量&#xff0c;也就是当前K-V的数量loadFactory装载因子&#xff0c;用来衡量HashMap满的程度&#xff0c;loadFactory的默认值是0.75threshold临界值&#xff0c;当实际KV数量超过threshol…

ChatGPT实现语义分析情感分类

语义分析情感分类 我们从开源社区找到了中科院谭松波博士整理的携程网酒店评论数据集(https://raw.githubusercontent.com/SophonPlus/ChineseNlpCorpus/master/datasets/ChnSentiCorp_htl_all/ChnSentiCorp_htl_all.csv)。一共七千余条数据&#xff0c;包括 label 和 review …

Domino中的时间日期格式设置

大家好&#xff0c;才是真的好。 今天我们谈管理运维问题&#xff0c;相对于前面的技术来说&#xff0c;会简单很多。 就是Domino服务器运行时的时间日期显示问题。这和你的邮件、应用等里面的文档时间日期也有关系。 简单来说&#xff0c;在默认的设置情况下&#xff0c;Do…

java——最小的K个数

题目链接 牛客在线oj题——最小的K个数 题目描述 给定一个长度为 n 的可能有重复值的数组&#xff0c;找出其中不去重的最小的 k 个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字&#xff0c;则最小的4个数字是1,2,3,4(任意顺序皆可)。 数据范围&#xff1a;0≤k,n≤10000&…

【刷题之路】LeetCode 206. 反转链表

【刷题之路】LeetCode 206. 反转链表 一、题目描述二、解题1、方法1——改变指针方向1.1、思路分析1.2、代码实现 2、方法2——头插到新链表2.1、思路分析2.2、代码实现 一、题目描述 原题连接&#xff1a; 206. 反转链表 题目描述&#xff1a; 给你单链表的头节点 head &…

4月26号软件更新资讯合集....

Tpflow V7.0.2&#xff0c;PHP 工作流引擎新版发布 ​欢迎使用 Tpflow V7.0.1 工作流引擎 TpFlow 工作流引擎是一套规范化的流程管理系统&#xff0c;基于业务而驱动系统生命力的一套引擎。彻底释放整个信息管理系统的的活力&#xff0c;让系统更具可用性&#xff0c;智能应用型…

设计模式天花板,详解23种设计模式+7大设计原则

这份文档完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起&#xff0c;包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等&#xff0c;让读者能系统、完整、准确地掌握每个模式&#xff0c;培养正确的“设计观”;中高级内容则深…

速速报名| 米尔将精彩亮相2023 STM32中国峰会暨粉丝狂欢节

STM32峰会已成功举办五届&#xff0c;第六届将于今年5月12日-13日在深圳重磅回归&#xff01;往年&#xff0c;米尔电子都作为官方合作伙伴&#xff0c;出席演讲并展出公司配套的核心板和开发板。 今年&#xff0c;STM32峰会更是集齐了值得你「点赞、收藏、转发」的一键三连精…

漫画 | Linux之父:财务自由以后,我失眠了!

前言&#xff1a;今年是Linux诞生的30周年&#xff01; 1991年的8月&#xff0c; Linus在新闻组中公布了他正在开发的一个免费的操作系统&#xff0c;这也是以后风靡世界的Linux操作系统的雏形。 今天翻到这篇漫画&#xff0c;看到Linux的诞生过程&#xff0c;很是感慨&#x…

FPGA实现10G万兆网UDP通信 10G Ethernet Subsystem替代网络PHY芯片 提供工程源码和技术支持

目录 1、前言2、我这里已有的UDP方案3、详细设计方案传统 FPGA UDP 方案本 FPGA 10G UDP 方案(牛逼)10G Ethernet 框图10G Ethernet 发送解析10G Ethernet 接收解析10G Ethernet 寄存器配置10G Ethernet UI 配置 4、vivado工程详解5、上板调试验证并演示ping功能测试数据收发测…

新手必看:蓝牙耳机什么牌子的好用?2023年蓝牙耳机排名

上班通勤、健身运动、游戏娱乐都离不开蓝牙耳机&#xff0c;蓝牙耳机市场这几年逐渐饱和&#xff0c;涌现了大量的品牌&#xff0c;蓝牙耳机什么牌子的好用成为热议话题&#xff0c;新手们在挑选时会参考排行榜&#xff0c;小编接下来将盘点2023年蓝牙耳机排名。 ●JEET Air 2蓝…

【服务器数据恢复】HP MSA存储raid5数据恢复案例

服务器故障环境&#xff1a; HP MSA某型号存储&#xff0c;8块SAS的硬盘组建RAID5磁盘阵列&#xff0c;其中包括1块热备盘。故障存储中基于该RAID组的LUN均分配给HP-Unix小机使用&#xff0c;上层做的LVM逻辑卷&#xff0c;存储的数据为Oracle数据库及OA服务端。 服务器故障&a…