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 "                                代碼無異常                    "
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章