1. #!/bin/bash
  2.  
  3. export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
  4. clear
  5.  
  6. printf "
  7. # Name: Downtown_Nodejs_Deploy_Script
  8. #
  9. # Purpose:Deploy tar.gz to the host
  10. #
  11. # Notes:
  12. # Upload your tar.gz file to the path /data/source
  13. #
  14. # ./script_name Filename.postfix
  15. # For Example:./New_UPDATE_nodejs_tar_update.sh buffetmealapi.tar.gz
  16. #
  17. # Return codes:
  18. # 启动时间 启动程序
  19. # : nodejs
  20. ########################################################
  21. "
  22.  
  23. #check user
  24. if [ $(id -u) != "" ]
  25. then
  26. echo "Error: You must be root to run this script!!!"
  27. exit
  28. fi
  29.  
  30. if [ -z "$1" ];then
  31. echo "Usage:script.sh file.tar.gz"
  32. exit
  33. else
  34. echo "执行文件名: $1"
  35. fi
  36.  
  37. #Define
  38. Project_Name_file=$ #buffetmealapi.tar.gz
  39. Project_Name=${Project_Name_file%%.*} #buffetmealapi
  40. INIT_SCRIPT_URL=/data/source
  41. Config_URL=/data/config
  42. Project_Name_Suffix=${Project_Name_file#*.} #tar.gz
  43.  
  44. ##工程目录
  45. PROJECT_NODE_APP_PATH="/data/app/eshine/$Project_Name"
  46. ##源配置文件模板目录
  47. PROJECT_NODE_APP_CONFIG_TEMPLATES_PATH="/data/app/eshine/$Project_Name/config-templates" #/data/app/eshine/storeapi/config-templates/
  48. ##目标配置文件目录
  49. PROJECT_NODE_APP_CONFD_PATH="/data/app/confd/config/$Project_Name" #/data/app/confd/config/storeapi
  50.  
  51. function_deploy_tar_gz()
  52. {
  53. source /etc/profile
  54. echo -e "\033[31m Make Sure REMOVE THIS HOST FROM LVS---LVS---LVS,5 seconds to think? press ctrl+C to cancel \033[0m"
  55. sleep
  56. #停止nodejs应用
  57. PID=`pm2 list |grep $Project_Name |awk '{print $10}'`
  58. if [ "$PID" == "online" ];then
  59. pm2 stop $Project_Name
  60. pm2 delete $Project_Name
  61. fi
  62. sleep
  63. #创建备份目录
  64. mkdir -p /data/backup/$(date +%Y%m%d%H%M)
  65. #创建app工作目录
  66. mkdir -p /data/app/eshine
  67. #更新前备份
  68. # if [ -d "/data/app/eshine/$Project_Name" ];then
  69. # mv /data/app/eshine/$Project_Name /data/backup/$(date +%Y%m%d%H%M)/
  70. # echo "###############################################################"
  71. # echo -e "# $Project_Name backup complated! #"
  72. # echo "###############################################################"
  73. # else
  74. # echo "###############################################################"
  75. # echo -e "# Warning : $Project_Name does not exist! #"
  76. # echo "###############################################################"
  77. # fi
  78. #解压新app包
  79. cd /data/source
  80. tar -zxf $Project_Name_file -C ./
  81. #部署应用
  82. rm -rf /data/app/eshine/$Project_Name
  83. mv $Project_Name /data/app/eshine/
  84.  
  85. #更新配置文件并启用confd监测
  86.  
  87. #先结束掉该项目的confd进程
  88. ps -ef | grep confd/config/$Project_Name | grep -v grep | awk '{ print "kill -9 " $2}' | bash
  89.  
  90. echo "==============================="
  91. echo "[confd] for $Project_Name killed"
  92. echo "==============================="
  93.  
  94. #清理confd项目目录
  95. rm -rf $PROJECT_NODE_APP_CONFD_PATH
  96. mkdir -p $PROJECT_NODE_APP_CONFD_PATH/conf.d
  97. mkdir -p $PROJECT_NODE_APP_CONFD_PATH/templates
  98. ls $PROJECT_NODE_APP_CONFD_PATH
  99.  
  100. ##复制配置文件到指定目录
  101. find $PROJECT_NODE_APP_CONFIG_TEMPLATES_PATH -type f -name "*.*" -exec cp -fr {} $PROJECT_NODE_APP_CONFD_PATH/templates \;
  102.  
  103. echo ========templates copied=====================
  104. ls $PROJECT_NODE_APP_CONFD_PATH/*/*
  105. echo ========templates copied=====================
  106.  
  107. ##生成模式化文件format_standard.txt
  108. ##格式为:文件名 文件路径
  109.  
  110. ##清空format_standard.txt文件
  111. echo "" > $PROJECT_NODE_APP_CONFD_PATH/format_standard.txt
  112.  
  113. ##提取PROJECT_NODE_APP_CONFIG_TEMPLATES_PATH目录内的子目录作为变量,并提出所有文件名
  114. 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}'`
  115.  
  116. #i代表的是$PROJECT_NODE_APP_CONFIG_TEMPLATES_L2_LIST输出出来的所有文件的相对路径
  117. echo ========config file need to be generate =====================
  118. echo "${PROJECT_NODE_APP_CONFIG_TEMPLATES_L2_LIST}"
  119. echo ========config file need to be generate =====================
  120.  
  121. cd $PROJECT_NODE_APP_CONFD_PATH
  122.  
  123. for i in $PROJECT_NODE_APP_CONFIG_TEMPLATES_L2_LIST
  124. do
  125. if [ -f $PROJECT_NODE_APP_PATH/$i ];then
  126. 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
  127. fi
  128. done
  129.  
  130. for i in $PROJECT_NODE_APP_CONFIG_TEMPLATES_L2_LIST
  131. do
  132. if [ -f $PROJECT_NODE_APP_PATH/config/$i ];then
  133. 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
  134. fi
  135. done
  136.  
  137. echo "################# format_standard.txt############"
  138. cat $PROJECT_NODE_APP_CONFD_PATH/format_standard.txt
  139. echo "################# format_standard.txt############"
  140.  
  141. ##遍历格式化文件并生成模板文件
  142. cd $PROJECT_NODE_APP_CONFD_PATH
  143. cat format_standard.txt |awk 'NR>1' |while read F_CONFIG_NAME F_CONFIG_PATH
  144. do
  145. ##生成模板文件
  146. cat << EOF > conf.d/$F_CONFIG_NAME.toml
  147. [template]
  148. #模板文件,基于它进行修改
  149. src = "$F_CONFIG_NAME"
  150. #目标文件地址
  151. dest = "$F_CONFIG_PATH"
  152. #keys是在etcd上订阅消息的前缀
  153. keys = [
  154. "",
  155. ]
  156.  
  157. #更新配置后的命令
  158. reload_cmd = "/data/app/node/bin/pm2 restart $Project_Name"
  159. EOF
  160. done
  161.  
  162. #显示该项目的confd进程数
  163. ps -ef | grep confd/config/$Project_Name | grep -v grep | wc -l
  164.  
  165. export ETCDCTL_API=2
  166. 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 &
  167. echo "==============================="
  168. echo "[confd] for $Project_Name Started"
  169. echo "==============================="
  170.  
  171. #创建日志目录
  172. mkdir -p /data/logs/pm2/$Project_Name
  173.  
  174. #启动app
  175. cd /data/app/eshine/$Project_Name
  176.  
  177. echo "==============================="
  178. echo "sleep 15 secs"
  179. echo "==============================="
  180.  
  181. sleep 15
  182. if [ -f "pm2.json" ];then
  183. pm2 start pm2.json
  184. echo "=== pm2 start pm2.json ==="
  185. else
  186. pm2 start server/server.js --log /data/logs/pm2/$Project_Name/$Project_Name.log --name="$Project_Name"
  187. echo "=== pm2 start server/server.js ==="
  188. fi
  189. }
  190.  
  191. #######Deploy War Done#########
  192.  
  193. #Decide which script to be run by Project_Name_Suffix
  194. case $Project_Name_Suffix in
  195. tar.gz)
  196. function_deploy_tar_gz
  197. ;;
  198.  
  199. *)
  200. echo ".tar.gz allowed only"
  201. esac
  202. exit 0

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

  1. jenkins 项目发布脚本

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

  2. 项目发布脚本-nginx

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

  3. 项目发布脚本-go

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

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

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

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

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

  6. jenkins项目发布

    目录 一.简介 二.docker打包 一.后端打包 二.前端打包 三.启动容器 四.完整代码 五.发布测试 六.优化方案 七.源码地址: 八.参考 一.简介 1.该章节基于jenkins.Harbor ...

  7. 解读ASP.NET 5 & MVC6系列(3):项目发布与部署

    本章我们将讲解ASP.NET5项目发布部署相关的内容,示例项目以我们前一章创建的BookStore项目为例. 发布前的设置 由于新版ASP.NET5支持多版本DNX运行环境的发布和部署,所以在部署之前 ...

  8. T语言TC发布脚本方法

    代码模式的注册码发布脚本方法 注册码项目模式的发布脚本方法 1.注册码项目发布版 2.注册码项目代理版 这两种方法都是基于注册码项目来实现的,所以在使用之前,需要先创建注册码项目.

  9. Win10下IIS配置图解、MVC项目发布图解、IIS添加网站图解

    Win10下IIS配置 .找到控制面板:[开始]菜单鼠标右击,打开[控制面板] .打开控制面板,点击[程序],点击[启用或关闭Windows功能] 下一步,点击[启用虎关闭Windows功能] . 开 ...

随机推荐

  1. springCloud学习之服务注册和发现

    leader让完一个简单的springcloud的demo,自己之前听说过springcloud微服务,但是没有重视.现在网上查各种资料,但是感觉不怎么样啊,还是不会,明天晚上把代码给他看,天啦,这个 ...

  2. 使用Python往手机发送短信(基于twilio模块)

    官网是https://www.twilio.com twilio的一句话介绍——提供SDK帮你连接世界上所有人,你可以很方便的调用他们提供的接口来给指定手机发短信,打电话. 首先在twilio的官网注 ...

  3. AngularJS基础02 神奇的数据绑定(Binding)

    作者:arccosxy  转载请注明出处:http://www.cnblogs.com/arccosxy/ 上一节,我们在JS中声明一个scope变量然后在HTML直接访问它,这非常的酷.但是Angu ...

  4. Linux 下文件

     Linux下文件的三个时间(Atime,Mtime,Ctime) [root@node ~]# stat install.log File: `install.log' Size: Blocks: ...

  5. Cross-origin plugin content from must have a visible size larger than 400 x 300 pixels, or it will be blocked. Invisible content is always blocked.

    Cross-origin plugin content from  must have a visible size larger than 400 x 300 pixels, or it will ...

  6. 牛客多校10 D Rikka with Prefix Sum 不是数据结构

    https://www.nowcoder.com/acm/contest/148/D 题意: 1e5个数,1e5个操作,操作分为: 1.区间加. 2.整个数列替换为前缀和. 3.区间查询. 查询数小于 ...

  7. vsftpd上传文件出现553 Could not create file错误解决方法

    1.确定目录权限 2.关闭selinux

  8. [about remote controller]--mstsc-teamviewer-vnc,nomachine

    https://www.jianshu.com/p/c80db368ed8a https://www.nomachine.com/download Ubuntu安装VNC,VNC却无法随系统启动,遂换 ...

  9. word 使用总结

    1.标题: 开始->标题栏 2.插入目录: 引用---->更新目录 3.保持分页:页面布局->分隔符->分页符

  10. 图->连通性->最小生成树(克鲁斯卡尔算法)

    文字描述 上一篇博客介绍了最小生成树(普里姆算法),知道了普里姆算法求最小生成树的时间复杂度为n^2, 就是说复杂度与顶点数无关,而与弧的数量没有关系: 而用克鲁斯卡尔(Kruskal)算法求最小生成 ...