假如我现在有5台服务器做负载,当我要对这5台服务器上代码做更新的时候,应该怎么做呢? 先传一份代码到其中一台服务器,然后通过脚本分别拷到其他4台服务器,拷贝完了在分别启动?拷贝的话,可以用scp实现,问题是启动怎么实现呢?目前用的时候PM2来管理node进程,难道我要分别登陆到每一台服务器上,然后启动吗? 刚接触这一块,各位有没有好的解决方案啦,谢谢了! 服务器系统是linux
呵呵,什么操作系统?
@gzhangzy linux
@imhered 那没问题。把你操作过程记录下来,然后给ssh写个脚本
mark
来自酷炫的 CNodeMD
还有人关注这个问题,那就多说两句。先看看expect的用法,基本原理也就清楚了。要做复杂的操作,expect是不够的。
启动脚本不就是执行个命令吗?你非要强调pm2! 用不用在查查进程ID?kill一下什么的?一句话,你手工能操作,机器就能做m。
@gzhangzy 多谢!
上传 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 可以自动拉取分支,然后执行的呀。我记得是
支持这个 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是开源的。。。。。
shipit 啊~~ https://github.com/shipitjs/shipit-deploy
mono环境 可以用这个 https://github.com/feiin/shipit-mono
@feiin 这什么东西? 部署代码用的吗?
@alsotang git如果付费建私有仓库的话,别人是看不到我的代码的吧,不算开源吧? coding这个怎么样,之前没用过。主要是代码安全性怎么样?
@imhered 代码部署
@feiin 谢谢,我看看!
@alsotang 我写了一个一篇如何实现 自动化部署多服务器 的文章,请参考一下。 https://cnodejs.org/topic/584545bd4c17b38d354363af
阿里云crp持续交付,自动触发部署脚本
git 和 github 是两个概念,github 上分私人仓库和公开仓库,如果你不想付费,可以选择用 bitbucket,它有一个免费仓库。之前看过 PM2 + git 部署,你可以了解下。