V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
la2la
V2EX  ›  程序员

请教一个问题, flask 项目是怎么部署的呢?尤其是在部署在多太服务器的情况下。

  •  
  •   la2la · 2020-02-05 09:53:21 +08:00 · 3494 次点击
    这是一个创建于 1543 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前这个项目部署在单台服务器上,使用 nginx+nohup+gunicon+flask 部署,部署的流程就是写个脚本,把代码从 git 上拉下来,然后用 nohup 把代码跑起来。

    现在碰到的问题是需要把相同的代码部署在多个服务器上,每个服务器部署的代码是一样的,如果还是使用这个方式的话,每次发布版本或者测试的时候,需要到每个服务器上跑一下,太麻烦了

    有没有其他的方式部署,或者我目前的这种部署方式有什么问题?

    30 条回复    2020-02-07 14:41:49 +08:00
    dingyaguang117
        1
    dingyaguang117  
       2020-02-05 09:54:28 +08:00
    一步到位上 k8s
    kaifang
        2
    kaifang  
       2020-02-05 09:55:50 +08:00
    gitlab ci cd
    locoz
        3
    locoz  
       2020-02-05 10:04:55 +08:00
    问题在于没有容器化,容器化之后配上 k8s、ci/cd,整个部署过程就是全自动的了。测试环境也可以自动启动和更新,不影响线上版本。
    locoz
        4
    locoz  
       2020-02-05 10:05:19 +08:00
    建议先学一下 docker 的使用
    noqwerty
        5
    noqwerty  
       2020-02-05 10:05:58 +08:00 via Android
    docker compose 挺好用的
    Torpedo
        6
    Torpedo  
       2020-02-05 10:06:47 +08:00
    把你的部署脚本改成用 git 托管平台的 web hook 触发的方式部署
    WildCat
        7
    WildCat  
       2020-02-05 10:07:18 +08:00
    1. docker-compose
    2. docker swarm with Portainer
    3. k3s
    4. k8s
    la2la
        8
    la2la  
    OP
       2020-02-05 10:07:32 +08:00
    @locoz 谢谢建议,也考虑过容器,但是公司的实际情况是懂 docker 的人比较少,也没啥技术储备。但是如果没有其它办法那就只有用 docker 了
    noqwerty
        9
    noqwerty  
       2020-02-05 10:11:35 +08:00   ❤️ 1
    noqwerty
        10
    noqwerty  
       2020-02-05 10:11:49 +08:00
    locoz
        11
    locoz  
       2020-02-05 10:14:43 +08:00
    @la2la #8 docker 很简单的,玩一会儿就会了。而且用 ci/cd 的话就一个人懂 docker 也没啥问题,其他人只管提交代码,剩下的都是全自动操作。
    Akikiki
        12
    Akikiki  
       2020-02-05 11:02:09 +08:00
    不想用 docker 的话,ansible 应该可以解决。
    xiri
        13
    xiri  
       2020-02-05 11:17:11 +08:00
    多台服务器需要操作的话搞成自动化操作比较好(就用那些现成的 CI/CD 之类的就行了)
    salamanderMH
        14
    salamanderMH  
       2020-02-05 11:20:52 +08:00 via Android
    简单点就用 jenkins 发布到多台服务器。
    chenqh
        15
    chenqh  
       2020-02-05 11:24:45 +08:00
    ansible
    a852695
        16
    a852695  
       2020-02-05 12:17:30 +08:00   ❤️ 1
    感觉你要解决的是多个服务部署问题,k8s 高端一点,但是 ansible 也完全满足你现有的需求了
    ila
        17
    ila  
       2020-02-05 12:29:24 +08:00 via Android
    自己实现监控,有更新时强制覆盖本地,gunicorn 自动 reload,提交心跳包
    ipwx
        18
    ipwx  
       2020-02-05 12:39:20 +08:00 via Android
    ansible 解决你现阶段的问题
    ipwx
        19
    ipwx  
       2020-02-05 12:39:46 +08:00 via Android
    还有 nohup 你认真的么? 建议用 supervisor
    hcymk2
        20
    hcymk2  
       2020-02-05 12:42:24 +08:00
    简单处理可以用 Fabric。
    la2la
        21
    la2la  
    OP
       2020-02-05 13:56:06 +08:00
    @ipwx o(╯□╰)o
    whusnoopy
        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 鼠标点
    tt67wq
        23
    tt67wq  
       2020-02-05 14:31:35 +08:00
    都 2020 了还没上容器化吗?
    opengps
        24
    opengps  
       2020-02-05 14:34:30 +08:00 via Android
    集群部署显然不能用人肉更新,或者模板克隆更新机器,或者系统自带更新逻辑
    lance86
        25
    lance86  
       2020-02-05 18:04:08 +08:00
    建议一步步来,像楼上一样慢慢衍化,一步到位容易 hold 不住
    gwy15
        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 监控自动拉起。
    yanyueio
        27
    yanyueio  
       2020-02-06 16:25:52 +08:00
    @whusnoopy 咨询一下大佬,如果公司比较小(10 人以内),并且用户数量也是只有万人级别,应该选哪种方式呢?(这边没有单独的 scm,也抽不出单独的人手专门搞这个,是否可以上 jenkins? 劳烦大佬辛苦指导一下。
    whusnoopy
        28
    whusnoopy  
       2020-02-06 20:01:12 +08:00   ❤️ 1
    @yanyueio 你们如果每个人都有线上机器操作权限,每个人都需要上线,那么直接裸上 fabric 应该是最简单的。如果期望线上机器相对隔离一点,可以用 Jenkins 加 fabric,这样把可操作范围限制在 Jenkins 配置好的范围里
    qile1
        29
    qile1  
       2020-02-07 11:52:17 +08:00 via Android
    我是用的 Windows 系统服务器,用 docker 虚拟服务器好像不好安装,我是直接 run 文件覆盖到线上文件夹,bat 以 dbug 方式启动,在寻找好的解决办法
    @tt67wq
    gladuo
        30
    gladuo  
       2020-02-07 14:41:49 +08:00
    docker-compose 一票
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2971 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 13:19 · PVG 21:19 · LAX 06:19 · JFK 09:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.