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

前言

 

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/12-WHb5Ai6fuITmRGGJ8w7w,提取码:ljvt

2、一键部署

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

脚本目的

1、简化安装

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

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

2、 服务运维

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

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

具体流程

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

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

3、使用说明

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

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

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

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

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

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

# 6.该脚本仅供学习交流使用,对任何因安装运行导致的问题,本人概不负责

# 7.有问题请留言或私信

 

一、系统配置

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

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

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

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

1、修改主机名

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

# 参数个数和非空验证
if [[ $# == 2 && -n $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.56.1~255)
if [ $? != 0 ]; then
	if [[ -n $2 && $2 =~ ^(192\.168\.56\.)(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

# 安装tar解压工具
yum -y install tar

# 安装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    # 生成新缓存
	yum -y update    # yum更新
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 "=================================================="

# 安装位置(软件压缩包解压后文件的位置)
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)
				tar -xf $3 -C $2
			;;
			gz)
				tar -zxf $3 -C $2
			;;
			zip)
				unzip $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
	echo "配置成功..."
	source /etc/profile    # 立即生效配置
	java -version    # 查看jdk版本
fi

3、Maven 安装与配置

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

# maven仓库
mavenRepo="<localRepository>/opt/soft/maven/repository</localRepository>"
# maven镜像(注意:镜像配置文本中不能含有空格)
mavenMirror="
<mirror>
  <id>alimaven</id>
  <mirrorOf>central</mirrorOf>
  <name>aliyun-maven</name>
  <url>https://maven.aliyun.com/repository/central</url>
</mirror>
<mirror>
  <id>nexus-aliyun</id>
  <mirrorOf>*</mirrorOf>
  <name>nexus-aliyun</name>
  <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>"

# 解压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
	echo "配置成功..."
	source /etc/profile    # 立即生效配置
	mvn -version    # 查看maven版本
	
	echo "配置settings.xml..."
	settings=$location/conf/settings.xml    # settings.xml文件位置
	if [ -e $settings ]; then
		# 配置maven仓库
		sed -i "/<\/localRepository>/{n;s#-->#-->\n  $mavenRepo#}" $settings
		mkdir $SOFT_DIR/maven/repository    # 创建repository目录,与settings.xml中的配置的本地仓库路径保持一致
		# 配置maven镜像
		lineNum=$(sed -n "/<\/mirrors>/=" $settings)    # 获取要插入镜像配置的行号,即</mirrors>标签所在行
		for line in $mavenMirror ; do
			# 控制插入行的缩进
			if [[ $line = "<mirror>" || $line = "</mirror>" ]]; then
				sed -i "${lineNum}i\    $line" $settings
			else
				sed -i "${lineNum}i\      $line" $settings
			fi
			let lineNum++
		done
		echo "配置成功..."
	else
		echo "settings.xml文件不存在,配置失败..."
	fi
fi

4、MySQL 安装与配置

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

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

# yum安装mysql依赖包
yumInstall perl
yumInstall libaio
yumInstall net-tools

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

# 若解压成功,则依次安装common、libs、client、server四个rpm包
if [ $? == 0 ]; then
	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
	echo "配置完成..."
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 "                                代码无异常                    "
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章