软件配置 | 版本信息 | 包类型 |
---|---|---|
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
本脚本提供在 CentOS 系统下,一键安装部署软件环境、自动化修改配置文件的功能,以开发中常用的 JDK + Maven + MySQL 为例,对软件的验证、安装、配置,提供了一套可行的自动化部署脚本模板。
脚本目的
1、简化安装
能够自动部署相关服务,不需要一个一个手动安装。
提供自动修改配置文件的能力,不需要手动查找修改配置文件。
2、 服务运维
能够进行服务运行状态监控。
提供服务启动、停止、查看日志的能力。
具体流程
1、系统配置,设置主机名、关闭防火墙。
2、服务安装,包括解压、修改配置文件、添加开机自启、服务启动。
####################【使用说明】####################
# 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
echo "####################【修改主机名】####################"
# 参数非空验证
if [ $1 ]; then
hostnamectl set-hostname $1
else
hostnamectl set-hostname localhost
fi
echo "hostname >> $(hostname)"
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
echo "####################【关闭防火墙】####################"
systemctl stop firewalld
systemctl disable firewalld
echo "防火墙已关闭..."
echo "####################【预装工具】####################"
# 安装wget下载工具
yum -y install wget
# 安装net-tools网络工具
yum -y install net-tools
# 安装bz2解压工具
yum -y install bzip2
# 安装zip解压工具
yum -y install unzip
# 需要什么自己添加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
####################【变量声明】####################
# 安装包文件(文件名和变量名一致)
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
}
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
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
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
####################【神兽保佑,代码无异常】####################
echo " ____ ____"
echo " ____| |__________| |____"
echo "| |"
echo "| _______ |"
echo "| |"
echo "| ____| |____ |"
echo "| | | |"
echo "| __|__ |"
echo "| |"
echo "|____ ____|"
echo " | |"
echo " | |"
echo " | |________________________________________"
echo " | |"
echo " | |___"
echo " | ___"
echo " | |"
echo " | |"
echo " |______ ___________________ ______|"
echo " | | | | | |"
echo " | | | | | |"
echo " |______|______| |______|______|"
echo " 神兽保佑 "
echo " 代码无异常 "