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 " 代碼無異常 "