nginx 自动化脚本

1、简化的蓝绿部署

1.1 shell脚本

#!/bin/bash
export nginx_home="/usr/local/openresty/nginx" #nginx目录
export nginx_conf="conf/nginx.conf" #配置文件
export nginx_conf_downline="conf/nginx_downline.conf" #下线配置文件
export nginx_conf_online="conf/nginx_online.conf" #上线配置文件 

function usage() {
    echo $"usage:$0 {downline|online|redownline}"
    exit 1
}

#nginx重启
function restartnginx(){
	echo "重启nginx"
	$nginx_home/sbin/nginx -s reload
	echo "重启nginx成功"
}
 
#下线
function downline() {
  echo "下线"
  cp -f $nginx_home/$nginx_conf_downline  $nginx_home/$nginx_conf
  restartnginx
}

#上线 
function online() {
  echo "上线";
  cp -f $nginx_home/$nginx_conf_online  $nginx_home/$nginx_conf
  restartnginx
}

 
function main() {
    if [ $# -ne 1 ];then
	usage $0
    fi
    case $1 in 
	downline)
	downline
	;;
	online)
	online
	;;
	*)
	usage $0
	;;
    esac
}
 
main $*

1.2 过程

例如当前有a1,a2,a3,a4四个服务。

  • 先执行./deploy.sh downline(只包含a3、a4),下线服务a1、a2,只保留未升级a3、a4的服务。
    upstream test  {
        server a3:port; 
        server a4:port; 
    }
    

     

  • Jenkins将下线的服务a1、a2升级。
  • 执行上线服务./deploy.sh online(只包含a1、a2),包含a1、a2,下线a3、a4。这时提供的已经是升级后的服务了。
    upstream test  {
        server a1:port; 
        server a2:port; 
    }
    

     

  • Jenkins将下线的服务a3、a4升级。
  • 执行上线服务./deploy.sh online(只包含a1、a2、a3、a4),包含a1、a2、a3、a4。这时所有服务全部升级完成。
    upstream test  {
        server a1:port; 
        server a2:port;
        server a3:port; 
        server a4:port; 
    }
    

     

3、补充

在window上写的小demo,添加了校验服务器是否启动的校验,SERVERS随着要启动的服务进行变化。

#!/bin/bash
export nginx_home="E:/soft/nginx/nginx-1.15.8/nginx-1.15.8" #nginx目录
export nginx_conf="conf/nginx.conf" #配置文件
export nginx_conf_downline="conf/nginx_downline.conf" #下线配置文件
export nginx_conf_online="conf/nginx_online.conf" #上线配置文件 

#有效服务的服务器ip
export SERVERS=(127.0.0.1:8080 127.0.0.1:8081) #这里的服务和的要启动的服务保持一致
#服务器是否全部启动,1:全部启动;2:未全部启动;
export serverflag=1

function usage() {
    echo $"usage:$0 {downline|online|redownline}"
    exit 1
}

#nginx重启
function restartnginx(){
	checkserver
	echo $serverflag
	if [ $serverflag != 1 ] ; then
		echo "服务没有全部启动"
		return
	fi

	echo "重启nginx"
	$nginx_home/nginx.exe -s reload
	echo "重启nginx成功"
}
 
#下线
function downline() {
  echo "下线"
  cp -f $nginx_home/$nginx_conf_downline  $nginx_home/$nginx_conf
  restartnginx
}

#上线 
function online() {
  echo "上线";
  cp -f $nginx_home/$nginx_conf_online  $nginx_home/$nginx_conf
  restartnginx
}


#检查服务器是否启动
function checkserver() {
	for SERVER in ${SERVERS[@]}
	do
		#curl请求
		result=$(curl -s -m 10 --connect-timeout 10 -I http://$SERVER)
		#获取返回码
    	code=`echo $result|grep "HTTP"|awk '{print $2}'`
		echo $result
		if [ "$code" == "200" ] ; then
			serverflag=1 #1:成功;0:失败;
			echo $SERVER"启动成功"$serverflag
		else 
			serverflag=0 #1:成功;0:失败;
			echo $SERVER"启动失败"$serverflag
			break
		fi
	done	
}

 
function main() {
    if [ $# -ne 1 ];then
	usage $0
    fi
    case $1 in 
	downline)
	downline
	;;
	online)
	online
	;;
	*)
	usage $0
	;;
    esac
}
 
main $*

 

 

你可能感兴趣的:(nginx,linux)