#!/bin/bash

export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
clear printf "
# Name: Downtown_Nodejs_Deploy_Script
#
# Purpose:Deploy tar.gz to the host
#
# Notes:
# Upload your tar.gz file to the path /data/source
#
# ./script_name Filename.postfix
# For Example:./New_UPDATE_nodejs_tar_update.sh buffetmealapi.tar.gz
#
# Return codes:
# 启动时间 启动程序
# : nodejs
########################################################
"
#避免出现TERM environment variable not set.
export TERM=linux #check user
if [ $(id -u) != "" ]
then
echo "Error: You must be root to run this script!!!"
exit
fi if [ -z "$1" ];then
echo "Usage:script.sh file.tar.gz"
exit
else
echo "执行文件名: $1"
fi #Define
Project_Name_file=$ #buffetmealapi.tar.gz
Project_Name=${Project_Name_file%%.*} #buffetmealapi
INIT_SCRIPT_URL=/data/source
Config_URL=/data/config
Project_Name_Suffix=${Project_Name_file#*.} #tar.gz
Project_Root_Url=/data/app/openresty/nginx/conf/nginx.conf.d/vhost
Host_Domain=`hostname |cut -d. -f2-`
DNS_RESOLVER="192.168.20.20" ##工程目录
PROJECT_NODE_APP_PATH="/data/app/openresty/nginx/conf/nginx.conf.d/vhost/$Project_Name"
##源配置文件模板目录
PROJECT_NODE_APP_CONFIG_TEMPLATES_PATH="/data/app/openresty/nginx/conf/nginx.conf.d/vhost/$Project_Name/config-templates" #/data/app/eshine/storeapi/config-templates/
##目标配置文件目录
PROJECT_NODE_APP_CONFD_PATH="/data/app/confd/config/$Project_Name" #/data/app/confd/config/OSS function_deploy_tar_gz()
{
source /etc/profile
echo -e "\033[31m Make Sure REMOVE THIS HOST FROM LVS---LVS---LVS,5 seconds to think? press ctrl+C to cancel \033[0m"
sleep
#创建备份目录
mkdir -p /data/backup/$(date +%Y%m%d%H%M)
#更新前备份
# if [ -d "$Project_Root_Url/$Project_Name" ];then
# mv $Project_Root_Url/$Project_Name /data/backup/$(date +%Y%m%d%H%M)/
# mv $Project_Root_Url/$Project_Name.conf /data/backup/$(date +%Y%m%d%H%M)/
# echo "###############################################################"
# echo -e "# $Project_Name backup complated! #"
# echo "###############################################################"
# else
# echo "###############################################################"
# echo -e "# Warning : $Project_Name does not exist! #"
# echo "###############################################################"
# fi
#解压新tar包
tar -zxf $INIT_SCRIPT_URL/$Project_Name_file -C $Project_Root_Url
#复制网站模板文件为配置文件
cd $Project_Root_Url
rm -rf ProjectModel.conf
wget http://downtown-weixin-wordpress.oss-cn-hangzhou.aliyuncs.com/downtown-source/common_files/ProjectModel.conf
cp -fr ProjectModel.conf $Project_Name.conf #此部分用来定义工程中存在userconf/cache.conf配置文件的设置
if [ -f $Project_Name/config/nginx_customize_conf/cache.conf ];then
sed -i '/#####/,/####@/s/^/#@/g' $Project_Name.conf
sed -i '/####@/a\include \/data\/app\/openresty\/nginx\/conf\/nginx.conf.d\/vhost\/project\/config\/nginx_customize_conf\/cache.conf;' $Project_Name.conf
fi #添加log日志参数,表示空格
sed -i '/####@/a\access_log \/data\/logs\/nginx\/project_access.log json ;' $Project_Name.conf
mkdir -p /data/logs/nginx #差异化,主要用来临时解决i.eshine.cn域名问题
#正式环境downtown8.com;项目名称为i和www
if [ "$Host_Domain" = "downtown8.com" ];then
if [ "$Project_Name" = "i" -o "$Project_Name" = "www" -o "$Project_Name" = "ProLineFrontEnd" -o "$Project_Name" = "ProLineWeChat" -o "$Project_Name" = "eshopInventory" -o "$Project_Name" = "Dataviz" ];then
sed -i '1,$s/project.domain.com/'$Project_Name.eshine.cn'/g' $Project_Name.conf
sed -i '1,$s/project/'$Project_Name'/g' $Project_Name.conf
else
sed -i '1,$s/project.domain.com/'$Project_Name.$Host_Domain'/g' $Project_Name.conf
sed -i '1,$s/project/'$Project_Name'/g' $Project_Name.conf
fi
else
#通用匹配替换规则
sed -i '1,$s/project.domain.com/'$Project_Name.$Host_Domain'/g' $Project_Name.conf
sed -i '1,$s/project/'$Project_Name'/g' $Project_Name.conf
fi #为保持对原有wechatmanage项目的兼容性,wechatmanage项目也转入wp
if [ "$Project_Name" = "wp" ];then
sed -i '/wp\./a server_name wechatmanage.'$Host_Domain';' wp.conf
fi #替换项目配置文件
#rm -fr $Project_Name/config #更新配置文件并启用confd监测 #先结束掉该项目的confd进程
ps -ef | grep confd/config/$Project_Name | grep -v grep | awk '{ print "kill -9 " $2}' | bash echo "==============================="
echo "[confd] for $Project_Name killed"
echo "===============================" #清理confd项目目录
rm -rf $PROJECT_NODE_APP_CONFD_PATH
mkdir -p $PROJECT_NODE_APP_CONFD_PATH/conf.d
mkdir -p $PROJECT_NODE_APP_CONFD_PATH/templates
ls $PROJECT_NODE_APP_CONFD_PATH ##复制配置文件到指定目录
find $PROJECT_NODE_APP_CONFIG_TEMPLATES_PATH -type f -name "*.*" -exec cp -fr {} $PROJECT_NODE_APP_CONFD_PATH/templates \; echo ========templates copied=====================
ls $PROJECT_NODE_APP_CONFD_PATH/*/*
echo ========templates copied===================== ##生成模式化文件format_standard.txt
##格式为:文件名 文件路径 ##清空format_standard.txt文件
echo "" > $PROJECT_NODE_APP_CONFD_PATH/format_standard.txt ##提取PROJECT_NODE_APP_CONFIG_TEMPLATES_PATH目录内的子目录作为变量,并提出所有文件名
PROJECT_NODE_APP_CONFIG_TEMPLATES_L2_LIST=`cd $PROJECT_NODE_APP_CONFIG_TEMPLATES_PATH ; find $PWD | xargs ls -dl | grep -v "^d" | awk 'BEGIN{FS="/"} {print $(NF-1)"/"$NF}'` #i代表的是$PROJECT_NODE_APP_CONFIG_TEMPLATES_L2_LIST输出出来的所有文件的相对路径
echo ""
echo ""
echo ========config file need to be generate =====================
echo "${PROJECT_NODE_APP_CONFIG_TEMPLATES_L2_LIST}"
echo ========config file need to be generate =====================
echo ""
echo "" cd $PROJECT_NODE_APP_CONFD_PATH printf "
########################################################
# 前端项目如果是用Ionic编译的,如果内部结构为
# 项目名--
# --www
# --config
#必须使用带有Confd_www的ci任务执行
#与普通前端项目的部署差异为 $PROJECT_NODE_APP_PATH/www/$i里加入了一个www目录
########################################################
" echo "####################Current Path 1#######################"
pwd
echo "####################Current Path 1#######################" for i in $PROJECT_NODE_APP_CONFIG_TEMPLATES_L2_LIST
do
if [ -f $PROJECT_NODE_APP_PATH/$i ];then
find $PROJECT_NODE_APP_PATH/$i -type f -name "*.*" |awk 'BEGIN{FS="/"} {printf("%30s\t%s\n",$NF,$0)}' >> $PROJECT_NODE_APP_CONFD_PATH/format_standard.txt
fi
done for i in $PROJECT_NODE_APP_CONFIG_TEMPLATES_L2_LIST
do
if [ -f $PROJECT_NODE_APP_PATH/config/$i ];then
find $PROJECT_NODE_APP_PATH/config/$i -type f -name "*.*" |awk 'BEGIN{FS="/"} {printf("%30s\t%s\n",$NF,$0)}' >> $PROJECT_NODE_APP_CONFD_PATH/format_standard.txt
fi
done for i in $PROJECT_NODE_APP_CONFIG_TEMPLATES_L2_LIST
do
if [ -f $PROJECT_NODE_APP_PATH/www/$i ];then
find $PROJECT_NODE_APP_PATH/www/$i -type f -name "*.*" |awk 'BEGIN{FS="/"} {printf("%30s\t%s\n",$NF,$0)}' >> $PROJECT_NODE_APP_CONFD_PATH/format_standard.txt
fi
done ##遍历格式化文件并生成模板文件
cd $PROJECT_NODE_APP_CONFD_PATH echo "####################Current Path 2#######################"
pwd
echo "####################Current Path 2#######################" cat format_standard.txt |awk 'NR>1' |while read F_CONFIG_NAME F_CONFIG_PATH
do
##生成模板文件
cat << EOF > conf.d/$F_CONFIG_NAME.toml
[template]
#模板文件,基于它进行修改
src = "$F_CONFIG_NAME"
#目标文件地址
dest = "$F_CONFIG_PATH"
#keys是在etcd上订阅消息的前缀
keys = [
"",
] #更新配置后的命令
reload_cmd = "/data/app/openresty/restart-app.sh reload"
EOF
done #显示该项目的confd进程数
ps -ef | grep confd/config/$Project_Name | grep -v grep | wc -l
export ETCDCTL_API=2
nohup /data/app/confd/bin/confd -config-file /data/app/confd/confd.config -confdir /data/app/confd/config/$Project_Name/ -username root -password Downtown2013 -basic-auth true > /data/app/confd/config/$Project_Name/confd_$Project_Name.log 2>&1 &
echo "==============================="
echo "[confd] for $Project_Name Started"
echo "===============================" echo "==============================="
echo "sleep 15 secs"
echo "===============================" sleep 15 /data/app/openresty/restart-app.sh reload
} #######Deploy War Done######### #Decide which script to be run by Project_Name_Suffix
case $Project_Name_Suffix in
tar.gz)
function_deploy_tar_gz
;; *)
echo ".tar.gz allowed only"
esac
exit 0

项目发布脚本-nginx的更多相关文章

  1. jenkins 项目发布脚本

    构建shell #!/bin/bash ########################################################################## 编译部分 ...

  2. 用Shell编写项目发布脚本

    1.首先在github上创建一个测试用的仓库 2.本地编写一个可以运行的测试项目,上传至github 3.链接服务器,编写脚本如下:注意:编写前需要在服务器上安装git和maven 执行build_c ...

  3. 项目发布脚本-nodejs

    #!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin clear printf &q ...

  4. 项目发布脚本-go

    #!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin clear printf &q ...

  5. Jenkins+GitHub 项目环境搭建和发布脚本(二)

    Jenkins+gitHub项目搭建配置 项目发布脚本 profilesScript.sh (支持不同环境配置文件) #!/bin/bash ACTIVE=$ JENKINS_PATH=/var/li ...

  6. 项目的发布(nginx、uwsgi、django、virtualenv、supervisor)

    导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求) 基于wsgi运行的框架 ...

  7. 详解Net Core Web Api项目与在NginX下发布

    前言 本文将介绍Net Core的一些基础知识和如何NginX下发布Net Core的WebApi项目. 测试环境 操作系统:windows 10 开发工具:visual studio 2019 框架 ...

  8. CI持续集成系列之(九)代码发布脚本模板书写

    前言 前面我们介绍了Jenkins来发布项目通过nginx来展示流程,那里只是提供了一个简单的测试脚本,接下来呢介绍一下一个比较完善的发布脚本,该脚本可实现从gitlab服务器获取代码,打包,部署到W ...

  9. 【Copy攻城狮日志】docker搭建jenkins拉取svn代码打包vue项目部署到nginx

    ↑开局一张图,故事全靠编↑ 前言 打开搜索引擎输入『Copy攻城狮』,发现最新的一条记录已经是去年的4月,意味着我又有一年时间没有再总结成长了.习惯了“温水煮青蛙”的日子,无论是经验水平还是薪资收入, ...

随机推荐

  1. cordova 插件 调用iOS社交化分享(ShareSDK:微信QQ分享)

    1.github上已有的插件:https://github.com/nwpuhmz/ShareSDKPlugin 2.安装插件 cordova plugin add https://github.co ...

  2. day_11py学习

    ''' 字典增加和删除 1.添加 xxx[新的key] = value 2.删除 del xxx[key] 3.修改 xxx[已存在的key] = new_value 4.查询 xxx.get(key ...

  3. Convert PLY to VTK Using PCL 1.6.0 or PCL 1.8.0 使用PCL库将PLY格式转为VTK格式

    PLY格式是比较流行的保存点云Point Cloud的格式,可以用MeshLab等软件打开,而VTK是医学图像处理中比较常用的格式,可以使用VTK库和ITK库进行更加复杂的运算处理.我们可以使用Par ...

  4. go 的正则表达式

    go 操作字符串.由于 go 中的字符串不是对象,所以没有直接操作字符串的相关方法.要操作字符串可以使用 strings 包或者 regexp 包处理. 一.简要介绍一下,strings 包 (str ...

  5. PHP封装类 【 设置分页 】 !!! 可以直接引用 !!! 都有自己理解的注释,挺详细的,有搜到的朋友可以能帮到你们 【 新手一看练两遍就懂 】

    在网页要显示出的内容,就是客户能看到的东西 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...

  6. .NET学习从入门到精通100+源代码(申明:来源于网络)

    .NET学习从入门到精通100+源代码大放送 (20161128更新)(申明:来源于网络) 地址:http://download.csdn.net/album/detail/3364

  7. parent对象

    在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口, opener是用open方法 ...

  8. uploadify中文开发文档,解决php多图上传

    图片上传好用插件有,比如 uploadify  ueditor html5的各种ajax上传插件,大部分都是异步,返回只是true之类,有些时候需要上传图片需要一起上传,其实可以通过操作流程来避免这个 ...

  9. [No0000167]CPU内部组成结构及指令执行过程

    计算机的基本硬件系统由运算器.控制器.存储器和输入.输出设备五大部件组成.运算器和控制器等部件被集成在一起统称为中央处理单元(Central Processing Unit,CPU). CPU的功能 ...

  10. [No000014F]计算机编程语言家族史

    https://www.levenez.com/lang/