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