• 请不要在回答技术问题时复制粘贴 AI 生成的内容
la2la
V2EX  ›  程序员

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

  •  
  •   la2la · Feb 5, 2020 · 4484 views
    This topic created in 2468 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

    就可以了,写个循环。

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