多服务器代码部署
发布于 9 天前 作者 imhered 480 次浏览 来自 问答

假如我现在有5台服务器做负载,当我要对这5台服务器上代码做更新的时候,应该怎么做呢? 先传一份代码到其中一台服务器,然后通过脚本分别拷到其他4台服务器,拷贝完了在分别启动?拷贝的话,可以用scp实现,问题是启动怎么实现呢?目前用的时候PM2来管理node进程,难道我要分别登陆到每一台服务器上,然后启动吗? 刚接触这一块,各位有没有好的解决方案啦,谢谢了! 服务器系统是linux

28 回复

呵呵,什么操作系统?

@imhered 那没问题。把你操作过程记录下来,然后给ssh写个脚本

mark

来自酷炫的 CNodeMD

还有人关注这个问题,那就多说两句。先看看expect的用法,基本原理也就清楚了。要做复杂的操作,expect是不够的。

启动脚本不就是执行个命令吗?你非要强调pm2! 用不用在查查进程ID?kill一下什么的?一句话,你手工能操作,机器就能做m。

上传 git-http-backend

部署 git hook

运行 docker

这一套很简单的。

配置好密钥登录 rsync后ssh 执行pm2 restart

来自酷炫的 CNodeMD

最简单的、功能强大的自然是 ruby on rails的 Capistrano,本地机器使用,不影响远程服务器。只不过可能要先学点ruby

先把待发布的文件(不带node_modules)提交到一个git仓库,在每台机器上,第一次都clone这个仓库; 更新时,通过ansible,批量执行 git pull npm i pm2 restart all 回滚时,类似的流程

其实,你只需要一个通过 ssh 协议来执行命令的工具,工具有:

  • Python :Ansible,Fabric
  • JavaScript:Flightplan

如何选?

  • Ansible 很强,但有自己的配置语言。
  • Fabric 也很强,但得懂点 Python。
  • Flightplan 一般般,但做你说的这些,是够了。

不建议使用scp, 建议使用git

pm2 可以自动拉取分支,然后执行的呀。我记得是

@plantain-00

支持这个 git 方法,在 git 那边,弄个叫 online 的分支,每次本地更新了这个分支之后,就用 shell 脚本,批量去到每个服务器上执行一下预先的部署脚本重启。

#! /bin/bash

tar czf deploy.tar.gz *
scp deploy.tar.gz user@host1
ssh user@host1 'tar xzf  deploy.tar.gz deploy'

scp deploy.tar.gz user@host2
ssh user@host2 'tar xzf  deploy.tar.gz deploy'

scp deploy.tar.gz user@host3
ssh user@host3 'tar xzf  deploy.tar.gz deploy'

scp deploy.tar.gz user@host4
ssh user@host4 'tar xzf  deploy.tar.gz deploy'

谢谢各位的回答!

Chef 和 Ansible 都是干这个的。Chef 比较重,Ansible 比较适合,不用安装客户端的agent。

线上服务器多的情况下,部署的确是有些麻烦,并且对于服务器非云服务的情况更显著。目前我有10+台服务器,部署和运维是通过挂盘+git+Ansible+pm2 脚本实现的;为了避免单点故障,我采取相同业务服务多台服务的方式部署,挂盘可以让我只需执行一次git pull,ansible可以让我选择性重启多个服务,而pm2作为线上守护进程的确是不二的选择; BTW:如果放心pm2的keymetrics话,也可以在他的UI上无脑的点按钮,来实现更新和重启操作;

@plantain-00 @alsotang git确实不错,可惜要收费=。=

@imhered git是开源的。。。。。

coding.net

@feiin 这什么东西? 部署代码用的吗?

@alsotang git如果付费建私有仓库的话,别人是看不到我的代码的吧,不算开源吧? coding这个怎么样,之前没用过。主要是代码安全性怎么样?

@feiin 谢谢,我看看!

回到顶部