lixuda
V2EX  ›  Flask

如何优雅升级 Python web 程序

By lixuda at 2020 年 8 月 10 日 · 9007 次点击

小弟不才,所以求大神。

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

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

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

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

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

打开你这个帖子 ,连续五次 502.。。。。。。。。。。。。。。
no1xsyzy
   12
no1xsyzy  
   2020 年 8 月 10 日
@qilishasha #7 Flask 的 session 实现不是类似(还是就是?) jwt 么?
我开发用的那个整个关掉再开也没掉 session
no1xsyzy
   13
no1xsyzy  
   2020 年 8 月 10 日
总之需要个编配方式
不通过手动,而是某个外层监控装置去监控它的运行
systemd 不常用但也可以
tomczhen
   14
tomczhen  
   2020 年 8 月 10 日 via Android
client side session 不会有问题,只要 session 密钥不变,flask 默认使用这种方式。server side session 如果只是内存 /文件保存,通过多个实例切换的话,就需要持久化到 db 。
suchbear
   15
suchbear  
   2020 年 8 月 10 日
哈哈哈哈,跟我一样用 git 来更新
simple2025
   16
simple2025  
   2020 年 8 月 10 日
ansible+supervisor
lixuda
   17
lixuda  
OP
   2020 年 8 月 11 日
@no1xsyzy 图简单方便 就用 nohup gunicorn
no1xsyzy
   18
no1xsyzy  
   2020 年 8 月 11 日
@lixuda #17 你(为了图方便而)用了怪异的方式启动,那自然是怪异的更新方式
不知道你在寻求什么?甚至这是否真的方便还两说。
lixuda
   19
lixuda  
OP
   2020 年 8 月 11 日
@no1xsyzy 打算用 systemd 试试看
huichao
   20
huichao  
   2020 年 12 月 19 日
1. 用 python 写个 github (比如你用的是 GitHub,gitlab 也可以)的 webhook,用 fabric 写命令自动部署,用 Nginx 也可以做到无宕机
2. 找个 serverless 的服务器,部署无宕机
© 2026 V2EX · 80ms · 3.9.8.5