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

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

  •  
  •   la2la · 56 天前 · 2049 次点击
    这是一个创建于 56 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    30 条回复    2020-02-07 14:41:49 +08:00
    dingyaguang117
        1
    dingyaguang117   56 天前
    一步到位上 k8s
    kaifang
        2
    kaifang   56 天前
    gitlab ci cd
    locoz
        3
    locoz   56 天前
    问题在于没有容器化,容器化之后配上 k8s、ci/cd,整个部署过程就是全自动的了。测试环境也可以自动启动和更新,不影响线上版本。
    locoz
        4
    locoz   56 天前
    建议先学一下 docker 的使用
    noqwerty
        5
    noqwerty   56 天前 via Android
    docker compose 挺好用的
    Torpedo
        6
    Torpedo   56 天前
    把你的部署脚本改成用 git 托管平台的 web hook 触发的方式部署
    WildCat
        7
    WildCat   56 天前
    1. docker-compose
    2. docker swarm with Portainer
    3. k3s
    4. k8s
    la2la
        8
    la2la   56 天前
    @locoz 谢谢建议,也考虑过容器,但是公司的实际情况是懂 docker 的人比较少,也没啥技术储备。但是如果没有其它办法那就只有用 docker 了
    noqwerty
        9
    noqwerty   56 天前   ❤️ 1
    locoz
        11
    locoz   56 天前
    @la2la #8 docker 很简单的,玩一会儿就会了。而且用 ci/cd 的话就一个人懂 docker 也没啥问题,其他人只管提交代码,剩下的都是全自动操作。
    Akikiki
        12
    Akikiki   56 天前
    不想用 docker 的话,ansible 应该可以解决。
    xiri
        13
    xiri   56 天前
    多台服务器需要操作的话搞成自动化操作比较好(就用那些现成的 CI/CD 之类的就行了)
    salamanderMH
        14
    salamanderMH   56 天前 via Android
    简单点就用 jenkins 发布到多台服务器。
    chenqh
        15
    chenqh   56 天前
    ansible
    a852695
        16
    a852695   56 天前   ❤️ 1
    感觉你要解决的是多个服务部署问题,k8s 高端一点,但是 ansible 也完全满足你现有的需求了
    ila
        17
    ila   56 天前 via Android
    自己实现监控,有更新时强制覆盖本地,gunicorn 自动 reload,提交心跳包
    ipwx
        18
    ipwx   56 天前 via Android
    ansible 解决你现阶段的问题
    ipwx
        19
    ipwx   56 天前 via Android
    还有 nohup 你认真的么? 建议用 supervisor
    hcymk2
        20
    hcymk2   56 天前
    简单处理可以用 Fabric。
    la2la
        21
    la2la   56 天前
    @ipwx o(╯□╰)o
    whusnoopy
        22
    whusnoopy   56 天前   ❤️ 1
    同 #20,楼主目前的状态,改动最小的应该是用 fabric,做一个批量操作而已,fabric 可以控制并发数和顺序流程,也是 Python 生态下的

    其他的建议也都很好,但是不一定能立马用上

    我司的顺序大概是
    1. 人肉 nginx + gunicorn
    2. 脚本 fabric + supervisor
    3. Jenkins 合并上述操作,鼠标点上线
    4. docker + k8s,上线还是 Jenkins 鼠标点
    tt67wq
        23
    tt67wq   56 天前
    都 2020 了还没上容器化吗?
    opengps
        24
    opengps   56 天前 via Android
    集群部署显然不能用人肉更新,或者模板克隆更新机器,或者系统自带更新逻辑
    lance86
        25
    lance86   56 天前
    建议一步步来,像楼上一样慢慢衍化,一步到位容易 hold 不住
    gwy15
        26
    gwy15   55 天前
    fabric 是最无痛的:
    import fabric
    with fabric.Connection(alias) as c:
    c.put()
    c.run()

    就可以了,写个循环。

    我个人会额外加上 pex 打包+supervisord/systemd 监控自动拉起。
    yanyueio
        27
    yanyueio   55 天前
    @whusnoopy 咨询一下大佬,如果公司比较小(10 人以内),并且用户数量也是只有万人级别,应该选哪种方式呢?(这边没有单独的 scm,也抽不出单独的人手专门搞这个,是否可以上 jenkins? 劳烦大佬辛苦指导一下。
    whusnoopy
        28
    whusnoopy   55 天前   ❤️ 1
    @yanyueio 你们如果每个人都有线上机器操作权限,每个人都需要上线,那么直接裸上 fabric 应该是最简单的。如果期望线上机器相对隔离一点,可以用 Jenkins 加 fabric,这样把可操作范围限制在 Jenkins 配置好的范围里
    qile1
        29
    qile1   54 天前 via Android
    我是用的 Windows 系统服务器,用 docker 虚拟服务器好像不好安装,我是直接 run 文件覆盖到线上文件夹,bat 以 dbug 方式启动,在寻找好的解决办法
    @tt67wq
    gladuo
        30
    gladuo   54 天前
    docker-compose 一票
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1080 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:31 · PVG 04:31 · LAX 13:31 · JFK 16:31
    ♥ Do have faith in what you're doing.