编程需求:
对于一些不是rpm包的应用,我们都需要采用源码安装的方式,但是如果多台设备都需要部署同一个中间件的时候,一台一台的去敲命令显然是非常低效率的。我们可以把源码安装相关中间件的步骤写成playbook或者Shell脚本,这样一件实现批量部署,省时省力省心。下面以一件部署nginx为例,进行源码安装中间件脚本的编写。
源代码:
#! /bin/bash
#功能描述:一键源码安装nginx
#设置各种显示消息的颜色属性
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;34m"
SETCOLOR_NORMAL="echo -en \\033[1;39m"
#测试yum源是否可用
test_yum(){
yum clean all &>/dev/null
num=$(yum repolist -e 0 | awk '/repolist/{print $2}'| sed 's/,//' )
if [ $num -le 0 ];then
$SETCOLOR_FAILURE
echo -n "[ERROR]:没有yum源!"
$SETCOLOR_NORMAL
exit
fi
}
#安装LNMP环境所需要的依赖包
install_deps(){
yum -y install gcc pcre-devel openssl-devel cmake ncurses-devel
yum -y install gcc-c++ bison bison-devel
yum -y install libxm12 libxm12-devel curl curl-devel libjpeg libjpeg-devel
yum -y install freetype gd gd-devel
yum -y install freetype-devel libxslt libxslt-devel bzip2 bzip2-devel
yum -y install libpng libpng-devel
}
#源码安装nginx:创建账户,激活需要的模块,禁用不需要的模块
install_nginx(){
if ! id nginx &>/dev/null;then
useradd -s /sbin/nologin nginx
fi
tar -xf /root/nginx-1.12.2.tar.gz
cd /root/nginx-1.12.2
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-stream --with-http_realip_module --without-http_autoindex_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module
$SETCOLOR_WARNING
echo -n "正在编译nginx,请耐心等待程序执行......"
$SETCOLOR_NORMAL
make &>/dev/null && make install &>/dev/null
cd ..
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
}
#源码安装的软件默认是没有service文件无法通过systemd管理
#手动编写service文件,方便在CentOS7的环境中管理服务
config_nginx_systemd(){
cat > /usr/lib/systemd/system/nginx.service <<- EOF
[Unit]
Description=nginx
After=syslog.target network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
[Install]
WantedBy=multi-user.target
EOF
}
test_yum
install_deps
install_nginx
config_nginx_systemd
脚本执行结果:
1.需要下载对应的软件包并放到对应的路径:tar -xf /root/nginx-1.12.2.tar.gz
2.yum源可用
chmod +x nginx.sh
/root/nginx.sh
正在编译nginx,请耐心等待程序执行......
[root@localhost ~]# systemctl start nginx
[root@localhost ~]# systemctl status nginx
Active: active (running) since 六 2019-11-23 17:52:47 CST; 6s ago
[root@localhost ~]# systemctl stop nginx
可以看到nginx一键部署成功,并且可以通过systemctl命令进行控制