目前这个项目部署在单台服务器上,使用 nginx+nohup+gunicon+flask 部署,部署的流程就是写个脚本,把代码从 git 上拉下来,然后用 nohup 把代码跑起来。
现在碰到的问题是需要把相同的代码部署在多个服务器上,每个服务器部署的代码是一样的,如果还是使用这个方式的话,每次发布版本或者测试的时候,需要到每个服务器上跑一下,太麻烦了
有没有其他的方式部署,或者我目前的这种部署方式有什么问题?
1
dingyaguang117 2020-02-05 09:54:28 +08:00
一步到位上 k8s
|
2
kaifang 2020-02-05 09:55:50 +08:00
gitlab ci cd
|
3
locoz 2020-02-05 10:04:55 +08:00
问题在于没有容器化,容器化之后配上 k8s、ci/cd,整个部署过程就是全自动的了。测试环境也可以自动启动和更新,不影响线上版本。
|
4
locoz 2020-02-05 10:05:19 +08:00
建议先学一下 docker 的使用
|
5
noqwerty 2020-02-05 10:05:58 +08:00 via Android
docker compose 挺好用的
|
6
Torpedo 2020-02-05 10:06:47 +08:00
把你的部署脚本改成用 git 托管平台的 web hook 触发的方式部署
|
7
WildCat 2020-02-05 10:07:18 +08:00
1. docker-compose
2. docker swarm with Portainer 3. k3s 4. k8s |
8
la2la OP @locoz 谢谢建议,也考虑过容器,但是公司的实际情况是懂 docker 的人比较少,也没啥技术储备。但是如果没有其它办法那就只有用 docker 了
|
9
noqwerty 2020-02-05 10:11:35 +08:00 1
@la2la #8 如果已经写好了 flask 项目的话可以参考一下这个: https://github.com/tiangolo/meinheld-gunicorn-flask-docker。我几天前帮人部署到线上的时候十几分钟就搞定了,很方便
|
10
noqwerty 2020-02-05 10:11:49 +08:00
|
11
locoz 2020-02-05 10:14:43 +08:00
@la2la #8 docker 很简单的,玩一会儿就会了。而且用 ci/cd 的话就一个人懂 docker 也没啥问题,其他人只管提交代码,剩下的都是全自动操作。
|
12
Akikiki 2020-02-05 11:02:09 +08:00
不想用 docker 的话,ansible 应该可以解决。
|
13
xiri 2020-02-05 11:17:11 +08:00
多台服务器需要操作的话搞成自动化操作比较好(就用那些现成的 CI/CD 之类的就行了)
|
14
salamanderMH 2020-02-05 11:20:52 +08:00 via Android
简单点就用 jenkins 发布到多台服务器。
|
15
chenqh 2020-02-05 11:24:45 +08:00
ansible
|
16
a852695 2020-02-05 12:17:30 +08:00 1
感觉你要解决的是多个服务部署问题,k8s 高端一点,但是 ansible 也完全满足你现有的需求了
|
17
ila 2020-02-05 12:29:24 +08:00 via Android
自己实现监控,有更新时强制覆盖本地,gunicorn 自动 reload,提交心跳包
|
18
ipwx 2020-02-05 12:39:20 +08:00 via Android
ansible 解决你现阶段的问题
|
19
ipwx 2020-02-05 12:39:46 +08:00 via Android
还有 nohup 你认真的么? 建议用 supervisor
|
20
hcymk2 2020-02-05 12:42:24 +08:00
简单处理可以用 Fabric。
|
22
whusnoopy 2020-02-05 14:20:22 +08:00 1
同 #20,楼主目前的状态,改动最小的应该是用 fabric,做一个批量操作而已,fabric 可以控制并发数和顺序流程,也是 Python 生态下的
其他的建议也都很好,但是不一定能立马用上 我司的顺序大概是 1. 人肉 nginx + gunicorn 2. 脚本 fabric + supervisor 3. Jenkins 合并上述操作,鼠标点上线 4. docker + k8s,上线还是 Jenkins 鼠标点 |
23
tt67wq 2020-02-05 14:31:35 +08:00
都 2020 了还没上容器化吗?
|
24
opengps 2020-02-05 14:34:30 +08:00 via Android
集群部署显然不能用人肉更新,或者模板克隆更新机器,或者系统自带更新逻辑
|
25
lance86 2020-02-05 18:04:08 +08:00
建议一步步来,像楼上一样慢慢衍化,一步到位容易 hold 不住
|
26
gwy15 2020-02-06 12:50:10 +08:00
fabric 是最无痛的:
import fabric with fabric.Connection(alias) as c: c.put() c.run() 就可以了,写个循环。 我个人会额外加上 pex 打包+supervisord/systemd 监控自动拉起。 |
27
yanyueio 2020-02-06 16:25:52 +08:00
@whusnoopy 咨询一下大佬,如果公司比较小(10 人以内),并且用户数量也是只有万人级别,应该选哪种方式呢?(这边没有单独的 scm,也抽不出单独的人手专门搞这个,是否可以上 jenkins? 劳烦大佬辛苦指导一下。
|
28
whusnoopy 2020-02-06 20:01:12 +08:00 1
@yanyueio 你们如果每个人都有线上机器操作权限,每个人都需要上线,那么直接裸上 fabric 应该是最简单的。如果期望线上机器相对隔离一点,可以用 Jenkins 加 fabric,这样把可操作范围限制在 Jenkins 配置好的范围里
|
29
qile1 2020-02-07 11:52:17 +08:00 via Android
我是用的 Windows 系统服务器,用 docker 虚拟服务器好像不好安装,我是直接 run 文件覆盖到线上文件夹,bat 以 dbug 方式启动,在寻找好的解决办法
@tt67wq |
30
gladuo 2020-02-07 14:41:49 +08:00
docker-compose 一票
|