Shell 一键部署脚本 JDK+Maven+MySQL(亲测完美)

Shell 一键部署脚本 JDK+Maven+MySQL

  • 前言
    • 1、软件版本
    • 2、一键部署
    • 3、使用说明
  • 一、系统配置
    • 1、修改主机名
    • 2、配置静态 IP
    • 3、关闭防火墙
    • 4、预装工具
    • 5、配置 yum 源
  • 二、服务安装
    • 1、安装准备
    • 2、JDK 安装与配置
    • 3、Maven 安装与配置
    • 4、MySQL 安装与配置
    • 5、神兽保佑,代码无异常

前言

 

1、软件版本

软件配置 版本信息 包类型
Linux CentOS release 7.8.2003 (Core)
JDK 1.8.0_251 tar
Maven 3.6.3 tar
MySQL 5.7.30 rpm

本文脚本及安装包下载地址:https://pan.baidu.com/s/1vCzz24I-Iu1PYJFALpSWXg,提取码:oj20
 

2、一键部署

本脚本提供在 CentOS 系统下,一键安装部署软件环境、自动化修改配置文件的功能,以开发中常用的 JDK + Maven + MySQL 为例,对软件的验证、安装、配置,提供了一套可行的自动化部署脚本模板。

脚本目的

1、简化安装

能够自动部署相关服务,不需要一个一个手动安装。

提供自动修改配置文件的能力,不需要手动查找修改配置文件。

2、 服务运维

能够进行服务运行状态监控。

提供服务启动、停止、查看日志的能力。

具体流程

1、系统配置,设置主机名、关闭防火墙。

2、服务安装,包括解压、修改配置文件、添加开机自启、服务启动。
 

3、使用说明

####################【使用说明】####################

# 1.请先更改脚本权限,输入命令:chmod 777 xx.sh

# 2.务必将软件压缩包、相关文件和脚本放在同一目录下后再运行脚本

# 3.脚本运行过程中请保持网络连接,否则可能会出现安装不完全或安装失败的情况

# 4.如需更换不同版本的安装包,请一并将脚本中的安装包文件变量值修改为更换的安装包文件名

# 5.根据系统版本不同,脚本运行后可能需要手动输入命令"source /etc/profile"才能使环境变量配置生效

# 6.mysql相关的密码默认为1234,如需更改请使用全文替换查找"1234"更换密码,PS:mysql5.7版本下密码最短为4位

# 7.脚本仅在CentOS-7环境下测试通过,不保证对其他系统通用,实际部署还请根据具体情况进行修改,有问题可联系QQ:757484541

 

一、系统配置

 
以 CentOS 虚拟机为实例,对系统参数、网络和源进行配置。

####################【参数说明】####################

# $1:主机名,默认:localhost

# $2:IP地址,默认:192.168.56.100

 

1、修改主机名

echo "####################【修改主机名】####################"

# 参数非空验证
if [ $1 ]; then
	hostnamectl set-hostname $1
else
	hostnamectl set-hostname localhost
fi
echo "hostname >> $(hostname)"

 

2、配置静态 IP

echo "####################【配置静态IP】####################"

# 网络配置文件                 
ifcfg="/etc/sysconfig/network-scripts/ifcfg-enp0s3"

# 修改网络参数
sed -i 's/dhcp/static/' $ifcfg
sed -i 's/ONBOOT=no/ONBOOT=yes/' $ifcfg

ipcfg=$(grep "IPADDR" $ifcfg)

# IP地址合法性验证(192.168.1~255.1~255)
if [ $? != 0 ]; then
	if [[ $2 && $2 =~ ^192\.168\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[1-9])\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[1-9])$ ]]; then
		ipcfg="IPADDR=$2"
	else
		ipcfg="IPADDR=192.168.56.100"
	fi
	echo $ipcfg >> $ifcfg    # 写入IP地址
fi
echo "IP地址 >> $ipcfg"

echo "重启网络..."
systemctl restart network

 

3、关闭防火墙

echo "####################【关闭防火墙】####################"

systemctl stop firewalld
systemctl disable firewalld
echo "防火墙已关闭..."

 

4、预装工具

echo "####################【预装工具】####################"

# 安装wget下载工具
yum -y install wget

# 安装net-tools网络工具
yum -y install net-tools

# 安装bz2解压工具
yum -y install bzip2

# 安装zip解压工具
yum -y install unzip

# 需要什么自己添加yum安装即可

 

5、配置 yum 源

echo "####################【配置yum源】####################"

# 若备份源不存在,则配置阿里云yum源
if [ ! -e /etc/yum.repos.d/CentOS-Base.repo.bak ]; then
	# 备份系统原yum源,CentOS-Base.repo => CentOS-Base.repo.bak
	mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
	# 下载阿里云yum源,Centos-7.repo
	wget -P /etc/yum.repos.d http://mirrors.aliyun.com/repo/Centos-7.repo
	# 配置阿里云yum源,Centos-7.repo => CentOS-Base.repo
	mv /etc/yum.repos.d/Centos-7.repo /etc/yum.repos.d/CentOS-Base.repo
	# 执行yum源更新命令
	yum clean all    # 清除原缓存
	yum makecache    # 生成新缓存
else
	echo "备份源已存在..."
fi

 

二、服务安装

 
以 JDK + Maven + MySQL 为例,对服务进行安装与配置。

先提取服务安装的公共部分,将解压安装、yum安装、rpm安装三种安装方式封装为函数。

通过传入参数直接调用函数,可降低代码冗余,将安装验证和过程监控都放在函数中,我们只需关注安装的结果即可。

####################【参数说明】####################

# $1:自定义安装目录,默认:/opt/soft

 

1、安装准备

####################【变量声明】####################

# 安装包文件(文件名和变量名一致)
JDK_TAR="jdk-8u251-linux-x64.tar.gz"
MAVEN_TAR="apache-maven-3.6.3-bin.tar.gz"
MYSQL_TAR="mysql-5.7.30-1.el7.x86_64.rpm-bundle.tar"

# 安装目录(软件压缩包要安装的目录)
SOFT_DIR="/opt/soft"    # 【在此处修改默认目录】

if [[ $# == 1 && -n $1 ]]; then
	if [ -d $1 ]; then
		SOFT_DIR=$1
	else    # 若目录不存在则创建目录
		mkdir $1
		if [ $? = 0 ]; then
			SOFT_DIR=$1
		fi
	fi
fi
echo "=================================================="
echo "软件安装目录 >> $SOFT_DIR"
echo "=================================================="

# 文件目录(当前脚本和安装包所在目录)
SU_DIR=$(pwd)

# 安装位置(软件压缩包解压后文件位置)
location=""    # 该变量在压缩包解压成功后会自动更新

####################【函数定义】####################

# 解压安装(将压缩包解压到指定目录)
# 参数:$1:软件名称 $2:解压目录 $3:压缩包
# 例如:tarInstall jdk /opt/soft/java jdk-8u251-linux-x64.tar.gz
# 返回:解压成功返回 0,解压失败返回 1,压缩包不存在返回 2,无法识别压缩格式返回 3
function tarInstall(){
	echo "=================================================="
	echo "解压 >> $1"
	echo "=================================================="
	echo "检查解压目录:$2"
	if [ ! -d $2 ]; then
		mkdir -p $2
	fi
	echo "检查压缩包:$3"
	if [ -e $3 ]; then
		echo "开始解压..."
		type=${3##*.}    # 获取压缩包文件的后缀
		case $type in    # 根据压缩格式选择解压方式
			tar | xz)
				tar -xf $3 -C $2
			;;
			gz | tgz)
				tar -zxf $3 -C $2
			;;
			bz2)
				tar -jxf $3 -C $2
			;;
			zip)
				unzip -q $3 -d $2
			;;
			*)
				echo "无法识别压缩格式..."
				return 3
			;;
		esac
		# 判断是否解压成功
		if [ $? = 0 ]; then
			echo "解压完成..."
		else
			echo "解压失败..."
			return 1
		fi
		# 更新location的值为解压后文件的位置
		# 解压后生成单一文件夹时,location为该文件夹位置,否则location为外层目录
		for file in $2/* ; do
			if [[ -d $file && $(ls $2 | wc -l) == 1 ]]; then
				location=$file
			else
				location=$2
			fi
			return 0
		done
	else
		echo "压缩包不存在..."
		return 2
	fi
}

# yum安装(使用yum方式安装软件)
# 参数:$1:软件名称
# 例如:yumInstall mysql-server
# 返回:安装成功返回 0,安装失败返回 1,软件已存在返回 2
function yumInstall(){
	echo "=================================================="
	echo "yum安装 >> $1"
	echo "=================================================="
	if [ -z $(rpm -qa | grep $1) ]; then
		yum -y install $1
		# 判断是否安装成功
		if [ $? = 0 ]; then
			echo "安装完成..."
			return 0
		else
			echo "安装失败..."
			return 1
		fi
	else
		echo "软件已存在..."
		return 2
	fi
}

# rpm安装(使用rpm方式安装软件)
# 参数:$1:软件名称 $2:rpm软件包
# 例如:rpmInstall opt/soft/mysql/mysql-community-server-5.7.30-1.el7.x86_64.rpm
# 返回:安装成功返回 0,安装失败返回 1,软件已安装返回 2,安装包不存在返回 3
function rpmInstall(){
	echo "=================================================="
	echo "rpm安装 >> $1"
	echo "=================================================="
	if [ -z $(rpm -qa | grep $1) ]; then
		if [ ! -e $2 ]; then
			echo "安装包不存在..."
			return 3
		fi
		rpm -ivh $2
		# 判断是否安装成功
		if [ $? = 0 ]; then
			echo "安装完成..."
			return 0
		else
			echo "安装失败..."
			return 1
		fi
	else
		echo "软件已存在..."
		return 2
	fi
}

 

2、JDK 安装与配置

echo "#################### 【安装jdk】 ####################"

# 解压jdk压缩包到/opt/soft/java目录下
tarInstall jdk $SOFT_DIR/java $JDK_TAR

# 若解压成功,则配置java环境变量
if [ $? == 0 ]; then
	echo "配置java环境变量..."
	sed -i '/JAVA_HOME/d' /etc/profile    # 删除已存在的java环境变量配置
	echo "" >> /etc/profile
	echo "# JAVA_HOME" >> /etc/profile
	echo "export JAVA_HOME=$location" >> /etc/profile
	echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile
	echo "export CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar" >> /etc/profile
	source /etc/profile    # 重载环境变量
	java -version    # 查看jdk版本
fi

 

3、Maven 安装与配置

echo "####################【安装maven】####################"

# maven仓库
maven_repo="/opt/soft/maven/repository"

# maven镜像(注意:镜像配置文本中不能含有空格)
maven_mirror="

  alimaven
  central
  aliyun-maven
  https://maven.aliyun.com/repository/central
  

  nexus-aliyun
  central
  nexus-aliyun
  http://maven.aliyun.com/nexus/content/groups/public
"

# 解压maven压缩包到/opt/soft/maven目录下
tarInstall maven $SOFT_DIR/maven $MAVEN_TAR

# 若解压成功,则配置maven环境变量和settings.xml文件
if [ $? == 0 ]; then
	echo "配置maven环境变量..."
	sed -i '/MAVEN_HOME/d' /etc/profile    # 删除已存在的maven环境变量配置
	echo "" >> /etc/profile
	echo "# MAVEN_HOME" >> /etc/profile
	echo "export MAVEN_HOME=$location" >> /etc/profile
	echo "export PATH=\$PATH:\$MAVEN_HOME/bin" >> /etc/profile
	source /etc/profile    # 重载环境变量
	mvn -version    # 查看maven版本
	
	echo "配置settings.xml..."
	cd $location/conf    # 切换到conf目录
	
	# 配置maven仓库
	sed -i "/<\/localRepository>/{n;s#-->#-->\n  $maven_repo#}" settings.xml
	mkdir $SOFT_DIR/maven/repository    # 创建repository目录,与settings.xml中的配置的本地仓库路径保持一致
	
	# 配置maven镜像
	lineNum=$(sed -n "/<\/mirrors>/=" settings.xml)    # 获取要插入镜像配置的行号,即标签所在行
	for line in $maven_mirror ; do
		# 控制插入行的缩进
		if [[ $line = "" || $line = "" ]]; then
			sed -i "${lineNum}i\    $line" settings.xml
		else
			sed -i "${lineNum}i\      $line" settings.xml
		fi
		let lineNum++    # 每插入一行,行号加一,在下一行继续插入
	done
	
	cd $SU_DIR    # 切换回文件目录
fi

 

4、MySQL 安装与配置

echo "####################【安装mysql】####################"

# 查找并卸载mariadb
echo "查找并卸载mariadb..."
for file in $(rpm -qa | grep mariadb) ; do
	rpm -ev $file --nodeps
done 

# 解压mysql压缩包到/opt/soft/mysql目录下
tarInstall mysql $SOFT_DIR/mysql $MYSQL_TAR

# 若解压成功,则安装mysql依赖包和安装包
if [ $? == 0 ]; then
	# 安装mysql依赖包
	yumInstall perl
	yumInstall libaio
	
	# 依次安装common、libs、client、server四个rpm包
	rpmInstall mysql-community-common $location/mysql-community-common-5.7.30-1.el7.x86_64.rpm
	rpmInstall mysql-community-libs $location/mysql-community-libs-5.7.30-1.el7.x86_64.rpm
	rpmInstall mysql-community-client $location/mysql-community-client-5.7.30-1.el7.x86_64.rpm
	rpmInstall mysql-community-server $location/mysql-community-server-5.7.30-1.el7.x86_64.rpm
	
	# 安装完成后删除安装包
	rm -rf $location
	echo "mysql安装完成..."
fi

# 若安装成功,则对mysql进行基本配置
if [ -n $(rpm -qa | grep mysql-community-server) ]; then
	echo "配置mysql..."
	# 指定root用户和组为mysql所有者
	chown -R root:root /var/lib/mysql
	# 启动mysql服务
	systemctl start mysqld
	# 设置mysql开机自启
	systemctl enable mysqld
	# 获取mysql临时密码
	grepPassword=$(grep 'temporary password' /var/log/mysqld.log)
	tempPassword=${grepPassword:0-12}
	# 登录mysql,更改密码策略,修改root密码,授予root用户远程访问权限
	mysql -uroot -p"$tempPassword" --connect-expired-password << EOF
set global validate_password_policy=0;
set global validate_password_length=1;
alter user root@localhost identified by '1234';
flush privileges;
grant all privileges on *.* to 'root' @'%' identified by '1234';
flush privileges;
quit
EOF
	# 设置mysql默认编码为utf-8
	sed -i "/socket/a\character-set-server=utf8" /etc/my.cnf
	sed -i "/character/a\init_connect='set names utf8'" /etc/my.cnf
	# 重启mysql服务
	systemctl restart mysqld
fi

 

5、神兽保佑,代码无异常

####################【神兽保佑,代码无异常】####################

echo "      ____            ____"
echo " ____|    |__________|    |____"
echo "|                              |"
echo "|            _______           |"
echo "|                              |"
echo "|     ____|           |____    |"
echo "|       |               |      |"
echo "|             __|__            |"
echo "|                              |"
echo "|____                      ____|"
echo "     |                    |"
echo "     |                    |"
echo "     |                    |________________________________________"
echo "     |                                                             |"
echo "     |                                                             |___"
echo "     |                                                              ___"
echo "     |                                                             |"
echo "     |                                                             |"
echo "     |______               ___________________               ______|"
echo "            |      |      |                   |      |      |"
echo "            |      |      |                   |      |      |"
echo "            |______|______|                   |______|______|"
echo "                                 神兽保佑                     "
echo "                                代码无异常                    "

你可能感兴趣的:(Linux)