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

如何优雅升级 Python web 程序

  •  
  •   lixuda · 2020-08-10 10:39:32 +08:00 · 5599 次点击
    这是一个创建于 1564 天前的主题,其中的信息可能已经有所发展或是发生改变。

    小弟不才,所以求大神。

    之前是开源的 php 程序,如果代码升级,操作都是进入后台,打开关闭网站,然后 ftp 上传代码,再打开网站。 网站有一定数量的会员访问。

    后来自己用 flask 重写了代码, nginx+gunicorn+flask 部署,代码用 git 拉取, 现在更新网站方式: 代码用 git 拉取,然后 pstree -ap|grep gunicorn kill -HUP PID

    感觉很怪异,特来问问大家有什么好方式?谢谢

    第 1 条附言  ·  2020-08-11 09:07:15 +08:00
    另外图方便,直接 nohup gunicorn 运行
    20 条回复    2020-12-19 14:02:26 +08:00
    alasou
        1
    alasou  
       2020-08-10 11:00:41 +08:00
    fabric
    singerll
        2
    singerll  
       2020-08-10 11:08:39 +08:00 via Android
    docker 编排
    sidegem
        3
    sidegem  
       2020-08-10 11:20:01 +08:00
    supervisor
    jenlors
        4
    jenlors  
       2020-08-10 11:28:21 +08:00
    docker-compose 或者 supervisor
    bonfy
        5
    bonfy  
       2020-08-10 11:38:30 +08:00
    看上去你需要的就是个 Jenkins

    当然再改个 docker 部署也行
    precisi0nux
        6
    precisi0nux  
       2020-08-10 11:42:12 +08:00 via iPhone
    k8s
    qilishasha
        7
    qilishasha  
       2020-08-10 11:47:39 +08:00
    我们的运维一般 nginx 做端口映射同时跑几套程序,切端口能达到毫秒级来达到更新的目的,但是 session 会掉(没有很完美的办法)。代码更新一般是 ssh 直接复制粘贴。
    wangyzj
        8
    wangyzj  
       2020-08-10 12:00:30 +08:00
    照着 devops 流程走一遭
    zsen
        9
    zsen  
       2020-08-10 12:11:51 +08:00
    alias
    sxfscool
        10
    sxfscool  
       2020-08-10 12:23:04 +08:00
    @qilishasha redis token 不行么
    feiniu
        11
    feiniu  
       2020-08-10 14:19:39 +08:00
    502 Bad Gateway

    打开你这个帖子 ,连续五次 502.。。。。。。。。。。。。。。
    no1xsyzy
        12
    no1xsyzy  
       2020-08-10 14:23:26 +08:00
    @qilishasha #7 Flask 的 session 实现不是类似(还是就是?) jwt 么?
    我开发用的那个整个关掉再开也没掉 session
    no1xsyzy
        13
    no1xsyzy  
       2020-08-10 14:26:57 +08:00
    总之需要个编配方式
    不通过手动,而是某个外层监控装置去监控它的运行
    systemd 不常用但也可以
    tomczhen
        14
    tomczhen  
       2020-08-10 14:30:44 +08:00 via Android
    client side session 不会有问题,只要 session 密钥不变,flask 默认使用这种方式。server side session 如果只是内存 /文件保存,通过多个实例切换的话,就需要持久化到 db 。
    suchbear
        15
    suchbear  
       2020-08-10 14:39:14 +08:00
    哈哈哈哈,跟我一样用 git 来更新
    chenqh
        16
    chenqh  
       2020-08-10 14:47:54 +08:00
    ansible+supervisor
    lixuda
        17
    lixuda  
    OP
       2020-08-11 09:06:42 +08:00
    @no1xsyzy 图简单方便 就用 nohup gunicorn
    no1xsyzy
        18
    no1xsyzy  
       2020-08-11 09:32:29 +08:00
    @lixuda #17 你(为了图方便而)用了怪异的方式启动,那自然是怪异的更新方式
    不知道你在寻求什么?甚至这是否真的方便还两说。
    lixuda
        19
    lixuda  
    OP
       2020-08-11 11:52:18 +08:00
    @no1xsyzy 打算用 systemd 试试看
    huichao
        20
    huichao  
       2020-12-19 14:02:26 +08:00
    1. 用 python 写个 github (比如你用的是 GitHub,gitlab 也可以)的 webhook,用 fabric 写命令自动部署,用 Nginx 也可以做到无宕机
    2. 找个 serverless 的服务器,部署无宕机
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5387 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 08:56 · PVG 16:56 · LAX 00:56 · JFK 03:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.