请教可靠、快速、安全的持续集成、持续部署方案

2018-06-10 14:54:33 +08:00
 koalli

我最近自己的一个 Node.js 小项目准备要部署到服务器上,忽然想到这么一个问题:

如果我这个小项目要部署要 100 台服务器上(可能更多),我该怎么办?

首先我想到了公司在用的 Jenkins,由 Jenkins 来进行 iOS、Android、windows 项目的编译打包,同时也承担了服务器的部署。

我们服务器部署是在 Jenkins 里面配置了目标服务器的 ip、ssh 公钥等信息,通过 ssh 连接目标服务器,发送文件然后在目标服务器执行脚本。

这样虽然可以实现,但是如果要发布到大量服务器的话这样的方案明显是不可取的,单单是发送文件就得耗费大量的时间,Jenkins 保存服务器 ip、公钥的方式维护起来也会很麻烦。

我网上查了很多资料好像很少这种案例,然后我就想来请教 v2er 们,大家都是怎么样处理这种问题的?

如何管理、维护大量的服务器?怎么样可靠、快速、安全的实现这样的持续集成、持续部署?

4668 次点击
所在节点    程序员
24 条回复
a7a2
2018-06-10 15:20:05 +08:00
CheungSSH
不知有无答对
Vogan
2018-06-10 15:36:31 +08:00
Docker 解决
expy
2018-06-10 16:29:14 +08:00
koalli
2018-06-10 17:42:00 +08:00
@a7a2
这个工具看起来挺强大的,研究看看

@Vogan
Docker 集群 /Kubernetes 的方案我有想过,我自己目前的服务器也是安装了 Docker
xcai
2018-06-10 18:00:03 +08:00
ansible
swulling
2018-06-10 18:21:44 +08:00
传统解决方案 puppet saltstack ansible
新派解决方案 k8s
Cbdy
2018-06-10 18:56:56 +08:00
k8s
q397064399
2018-06-10 22:06:48 +08:00
没有银弹, 运维本身就是件很复杂 根据需求需要支出大成本代价的事情,
有的人着重点是安全,有的人着重点是便捷,有的人着重点是快速集成发布,
上百台的话,如果环境简单,docker 打包 python 脚本部署 并不是不可能的事情,
但是考虑到服务的可用性,灾备又是另外一套方案,还有服务的分发又是另外一个问题,
总而言之,实际问题实际解决,没有大一统的方案。
plko345
2018-06-10 22:12:36 +08:00
问你们家运维啊,运维不就干这个的吗?对运维工程师来讲这种事还是容易实现的
notreami
2018-06-10 22:26:08 +08:00
你需要一个便捷发布管理平台,能支持:批量发布、快速回滚、限流灰度
Foolt
2018-06-10 22:29:57 +08:00
我前些年看一篇翻译的介绍脸书代码维护的文章,说脸书以前 PHP 代码滚动部署到全部服务器一次要两三个月,后来忘了改成什么方案时间缩短到一两个星期。你可以找来参考。
koalli
2018-06-10 23:08:46 +08:00
@q397064399
嗯,一旦服务器数量增加,这种管理方式我觉得会很成问题,如果各台服务器只是做负载均衡那问题就小很多,我们的情况是不同国家 /地区会有各自的几台服务器(有的是物理服务器有的是云主机),这些服务器本身业务逻辑代码都是一致的但是连接到不同的数据库,这种情况下的服务器管理就更复杂了。(也可能是我们的服务端把问题搞复杂了)

@plko345
我们家运维没有处理过这么大量的服务器,我们现在的服务器不超过 20 台,后来买的云主机都尽可能高配来减少数量
reeco
2018-06-10 23:22:02 +08:00
要不试下商业的解决方案: https://cn.aliyun.com/product/yunxiao
Hardrain
2018-06-10 23:24:21 +08:00
docker +1
ywgx
2018-06-11 08:28:48 +08:00
这个问题是 大量主机如果高效运维管理问题, 批量配置更改,权限管理,基础软件部署,应用分组监控等问题 https://xabcloud.com 了解一下,希望没打扰到大家
dbak
2018-06-11 08:41:07 +08:00
jenkins+ansible+http 服务器(文件下载)
mritd
2018-06-11 09:47:55 +08:00
Gitlab CI +docker 了解一下
Loyalsoldier
2018-06-11 11:10:08 +08:00
感觉上面说 Docker 的都没有好好审题……楼主的问题是,服务器和服务器之间怎么方便地连结在一起并且统一管理。Docker 只是统一环境、快速部署代码而已。
Loyalsoldier
2018-06-11 11:14:42 +08:00
如果真想要做到全自动发布的话,可以看看阿里云的资源编排 + 容器服务,可以做到根据负载来实时增删服务器。但是这个运维架构需要应用本身是各种微服务,对传统架构不适用。

如果已有应用是传统的 MVC 模式的话,那么 Ansible + Docker 或者 Python 脚本 + Docker 比较合适。
nullcoder
2018-06-11 15:53:05 +08:00
chef.io 了解一下?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/461915

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX