文档章节

利用git和pm2实现快速部署多个服务

王斌_
 王斌_
发布于 2016/08/26 03:39
字数 678
阅读 88
收藏 0

     工作中用nodejs开发了企业短信平台,平台由3个服务组成:portal服务,数据api服务和短信网关服务。由于不同企业的portal、业务逻辑和短信通道要求都存在很多差别。为了降低代码维护的难度,在同一份代码的基础上再git上为每个企业创建了各自的发布分支,原则上公共代码在各发布分支相同,差异代码逻辑的文件名根据分支分别命名。各发布分支维护各自生产环境的数据库配置等参数。另外创建一个部署工具项目deployTool 来维护项目的多实例部署与更新,并利用git来管理该部署工具的版本。部署工具实际就包含了批量服务部署指令的shell脚本-install.sh和一个核心部署指令脚本-unit.sh。pm2可以监控服务的工作目录,文件发生改变时自动重启服务(为了手动控制重启服务,脚本中没有启用目录监控),服务已经启动的情况下不会重复执行start指令,可以利用pm2的指令控制服务的启动、停止等。服务部署失败的适合进入该服务目录利用git指令迅速回滚代码到上一个版本。

unit.sh内容如下:

#!/bin/bash
compName=$1
appFrom=$2
appTo=$3
serversHome=$4
main=$5
cd $serversHome
if [ ! -d $compName ]; then
	mkdir $compName
fi
cd $compName
if [ ! -d $appTo ]; then
	git clone http://xxxxx/gitbucket/git/xxx/$appFrom.git
	mv $appFrom $appTo
	cd $appTo
	git checkout $compName
	git fetch
	git pull
	workdir=`pwd`
	npm install
	mkdir logs
	cd ..
	echo -e  "#!/bin/bash/\ncd $workdir \npm2 start $main  --name \"$compName-$appTo\"">$appTo.sh
	sh $appTo.sh&
	echo "$compName-$appTo installed and started."
else
	cd $appTo
        git checkout $compName
        git fetch
        git pull
        workdir=`pwd`
        npm install
        mkdir logs
        cd ..
	#file="$workdir/../$appTo.sh"
	#echo -e "-------\nfile:$file\nworkdir:$workdir\nserversHome:$serversHome\ncompName:$compName\nappTo:$appTo" >>$appTo.debug.log
	if [ ! -f "./$appTo.sh" ]; then
		echo "generate $appTo.sh"
		echo -e  "#!/bin/bash/\ncd $workdir \npm2 start $main  --name \"$compName-$appTo\"">$appTo.sh
	        sh $appTo.sh&
        	echo "$compName-$appTo installed and started."
	fi
	echo "$compName-$appTo is exist,you can install it after stop and  delete app and rm $compName/$appTo."
	echo -e  "start app:\n	pm2 start $compName-$appTo\nstop app:\n	pm2 stop $compName-$appTo\ndelete app:\n	pm2 delete $compName-$appTo\nremove dir:\n	mv $serversHome/$compName/$appTo $serversHome/$compName/$appTo.bak"
fi
cd $serversHome/deployTool 

install.sh内容如下:

#!/bin/bash
echo "部署AAA的短信网关"
sh unit.sh AAA sms_gateway gateway /home/node/servers www
echo "部署AAA的数据api服务"
sh unit.sh AAA sms_web web /home/node/servers www
echo "部署AAA的portal服务"
sh unit.sh AAA sms_cv cv /home/node/servers server.js
echo "部署BBB的短信网关"
sh unit.sh BBB sms_gateway gateway /home/node/servers www
echo "部署BBB的数据api服务"
sh unit.sh BBB sms_web web /home/node/servers www
echo "部署BBB的portal服务"
sh unit.sh BBB sms_cv cv /home/node/servers server.js

 

© 著作权归作者所有

共有 人打赏支持
王斌_
粉丝 1
博文 7
码字总数 4266
作品 0
通州
技术主管
私信 提问
koa2静态服务器的搭建以及pm2一键部署入门

使用某一技术栈多了,自然而然就要考虑属于自己常用的脚手架了,毕竟搬砖也要自己总结一套最有效率的搬砖方法。 本人目前使用较多的是react方面的技术栈,react官方推荐使用的是create-reac...

Perkin_
2018/04/02
0
0
通过Github与PM2部署Node应用

作者:郭一实 链接:https://zhuanlan.zhihu.com/p/20940096 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 背景 前一段时间,是通过百度云的BAE部署自...

anziguoer
2016/10/20
40
0
解放双手,利用 PM2 一键部署 Node 项目至 Centos7

配置 Vue-Yarn-PM2 工具环境 说明 本地环境是 Mac , 服务器环境是 Centos7.x, 开始之前,请自带翻墙 本地环境 首先安装 brew 安装 Nvm 然后 使用 重新启动 终端 查看版本 查看可装的 Node 版...

爱全库
2018/07/12
0
0
pm2使用心得

pm2和forever是启动Nodejs服务常用到的两个工具。使用这两个指令可以使node服务在后台运行(类似于linux的nohup),另外它们可以在服务因异常或其他原因被杀掉后进行自动重启。 由于Node的单...

langtu329
2016/08/17
14
0
简单易用的持续交付平台--ideploy

简介 ideploy 是为前端团队构建部署工程化而开发的一个持续交付平台。我们根据团队人员,项目增长而面临的越来越多在构建,交付等日常工作中的痛点,设计了很多特有而简单易用的功能,节省了...

卢勇福
2017/04/18
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

再谈使用开源软件搭建数据分析平台

三年前,我写了这篇博客使用开源软件快速搭建数据分析平台, 当时收到了许多的反馈,有50个点赞和300+的收藏。到现在我还能收到一些关于dataplay2的问题。在过去的三年,开源社区和新技术的发...

naughty
今天
3
0
C++网络编程(一)gRPC的编译

Google是真滴烦,整个编译链全是自家产品,在编译之前先来安装一堆东西 安装环境依赖 chocolatey Windows下的包管理系统,没有他就慢慢去下载下面的一堆乱七八糟的东西吧。CMD下执行下面这句...

Pulsar-V
今天
3
0
Python3的日期和时间

python 中处理日期时间数据通常使用datetime和time库 因为这两个库中的一些功能有些重复,所以,首先我们来比较一下这两个库的区别,这可以帮助我们在适当的情况下时候合适的库。 在Python文...

编程老陆
今天
2
0
分布式面试整理

并发和并行 并行是两个任务同时进行,而并发呢,则是一会做一个任务一会又切换做另一个任务。 临界区 临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用,但是每一次,只能有...

群星纪元
今天
3
0
手机通过wifi遥控arduino

手机下载Blinker 从Blinker官网下载手机App,安装到手机。 手机连接WiFi。 点击我的设备右上角的"+"添加设备,选择Arduino -> wifi接入,复制密钥以备后续使用。 点击新建的设备,可以在新界...

davidwbnu
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部