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

Flask 生产环境好难配置

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

    配了一天了,又是 nginx 又是 uWSGI 又是 Gunicorn,大佬可有 Docker 一键部署的环境

    50 回复  |  直到 2019-12-19 08:46:10 +08:00
    lpd0155
        1
    lpd0155   35 天前 via Android
    配过 django 的,也是搞了一天多
    Vegetable
        2
    Vegetable   35 天前
    熟了就好了,nginx 配静态文件算是最容易踩坑的了,熟悉了就一遍过了.
    ericls
        3
    ericls   35 天前 via iPhone
    所有程序不都这样吗
    一个 server 一个 nginx
    hoobyy
        4
    hoobyy   35 天前 via Android
    你一个新手,哪需要 nginx,用 runserver 不香吗
    Trim21
        5
    Trim21   35 天前   ♥ 1
    在 docker 里面用 gunicorn, 然后在机器上用一个 nginx 反代 docker 开出来的 http 端口
    Ultraman
        6
    Ultraman   35 天前 via Android
    @hoobyy 老哥,人家说了生产环境。。
    gwy15
        7
    gwy15   35 天前
    flask 要引入 CDN 更烦……
    ysicing
        8
    ysicing   34 天前 via iPhone   ♥ 1
    你可以参考 ctfd 这个项目
    yuting0501
        9
    yuting0501   34 天前 via iPhone
    一直都用 docker 部署,很顺畅,网络上很多参考项目
    Nitroethane
        10
    Nitroethane   34 天前 via iPhone
    所以我用 flask 写了一半的项目正在用 go 重写
    renmu
        11
    renmu   34 天前 via Android   ♥ 1
    Flask + Gunicorn 外面再套个 NGINX 就够了
    sadfQED2
        12
    sadfQED2   34 天前 via Android
    是的,我也部署过一次这玩意,以后项目这辈子都不想用他了。自己弄个虚拟机先搞搞吧,不熟悉最好别直接在物理机上弄
    q409640976
        13
    q409640976   34 天前 via Android
    @ysicing
    @Trim21
    @renmu 感谢几位实质性建议
    hakono
        14
    hakono   34 天前
    大部分语言都是这样的
    语言框架+web 服务+nginx 代理
    像 go 或 nodejs 这样写好直接无脑运行起来挂到服务器上自己本身就是个还算高效的 server 才是少数…………

    你 php 就得 php-fpm+nginx 呢
    whoosy
        15
    whoosy   34 天前
    flask+gunicorn+docker+nginx
    q409640976
        16
    q409640976   34 天前 via Android
    @ysicing 你是指这个嘛? https://github.com/CTFd/CTFd
    durban126
        17
    durban126   34 天前
    还好吧 没有多复杂吧
    如果是开发环境完全就可以使用
    flask run
    就起来了
    如果是生产环境推荐我使用的
    nginx + supervisor + gunicorn

    你说的复杂,我觉得是你不了解,所以说复杂,就跟吃饭一样,不会用筷子就说筷子不好用,但是学会了,岂不是吃嘛嘛香

    其他的看起来简单 都是大家经常用都总结好了的 你直接拿过来就好了 肯定不觉得麻烦
    TrickWu
        19
    TrickWu   34 天前
    Flask + Gunicorn + supervisor
    nginx 代理请求
    我都是这样开发的
    简单 上手一次之后就都明白了
    inhzus
        20
    inhzus   34 天前 via Android
    写好 supervisord 和 gunicorn 配置文件 volume 映射到 docker 里直接启动 supervisord,物理机套个 Nginx。

    flask 我最发愁的是 configuration,哎真的烦
    donotquestion
        21
    donotquestion   34 天前   ♥ 1
    不会啊。。我都是 docker-compose 一遍过啊
    ipwx
        22
    ipwx   34 天前 via Android
    flask gunicorn 足以。uwsgi 既麻烦又不必要
    q409640976
        23
    q409640976   34 天前 via Android
    @donotquestion compose 文件是否方便分享一下
    tinybaby365
        24
    tinybaby365   34 天前
    如果你用 K8S,我就建议一个 pod 多个容器。退而求其次,用 docker-compose。千万不要一个 docker 塞 nginx+gunicron,把它当成一个 VM 使用。
    hmxxmh
        25
    hmxxmh   34 天前
    @tinybaby365 哈哈,我想起我第一个 docker 镜像一个多 g。。。,把系统,依赖全放到了容器
    encro
        26
    encro   34 天前
    nginx + supervisord + uwsgi 一行命令
    或者
    nginx + supervisord + gunicorn 一个配置
    john170502
        27
    john170502   34 天前
    golang 直接编译成二进制文件香不香?
    wuwukai007
        28
    wuwukai007   34 天前 via Android
    确实,不管用 docker 还是手动,都比较麻烦
    dongyx
        29
    dongyx   34 天前
    用 NGINX + Gunicorn 的,如何解决 url_for(..., external=True)返回的 URL 转换的问题?
    Allianzcortex
        30
    Allianzcortex   34 天前
    @Trim21 说的是正解,因为项目很多时候会有很多依赖(e.g. redis/celery),写好 docker-compose 一次编排就够了。做法如:

    command: >
    gunicorn -b 0.0.0.0:5000
    expose:
    - "5000"

    之后 Nginx 定义如下:

    nginx:
    image: nginx:stable-alpine(或者其他的 Linux 系统)
    container_name: your_server
    volumes:
    - ./nginx/conf.d:/etc/nginx/conf.d
    ports:
    - "5000:80"
    depends_on:
    - your-server

    亲历过所以可以肯定生产环境就是这样做的,用 AWS + rancher 配合很顺畅。
    wangyzj
        31
    wangyzj   34 天前
    在会用 nginx 的前提下
    Flask + Gunicorn 或者其他 server 搞起来就可以了
    ashCloud
        32
    ashCloud   34 天前
    (( nginx+uwsgi+flask )+supervisor )+docker 一把梭。
    弄不出来的话晚上可以格尼写个 demo
    lihongjie0209
        33
    lihongjie0209   34 天前
    @john170502 #27 这个东西和二进制打包有什么关系? go 的 web 程序内嵌 web 服务器? java 也支持
    楼主说的是多个组件之间配置麻烦
    wangmy
        34
    wangmy   34 天前
    @tinybaby365 在一个无外网环境下部署,我就是当容器用的,所有都在 docker 里面。没外网依赖太难处理了, 不知道还有啥简单的办法不
    superalsrk
        35
    superalsrk   34 天前
    nginx+gunicorn+flask 啊~很快
    superalsrk
        36
    superalsrk   34 天前
    不过你 qps 低的话。。直接 runserver 也行啊
    loading
        37
    loading   34 天前 via Android
    我想知道 windows 如何部署,准备写了个网盘,用 runserver,有一个下载就堵死啦
    @superalsrk
    Les1ie
        38
    Les1ie   34 天前
    https://github.com/tiangolo/uwsgi-nginx-flask-docker 我用的这个 缺点是比较耗内存 :( 能用就行的原则

    bug: 还真有,偶尔发现网站莫名 500 ( 1 年两三次), 手动重启一下容器才行,确信不是我的代码 bug
    Les1ie
        39
    Les1ie   34 天前
    我用过 runserver 并发大概为 1 吧... 极度容易挂掉,不推荐
    wzwwzw
        40
    wzwwzw   34 天前
    runserver 本身就是单线程的,要考虑 gunicorn + gevent 或者单 gunicorn 才行。
    est
        41
    est   34 天前
    可以试试 uWSGI 直出 HTTP 服务。免去了 nginx 的麻烦。
    ysicing
        42
    ysicing   34 天前 via iPhone
    @q409640976 是的,这个项目相对还是比较成熟的,几年前用过
    tmackan
        43
    tmackan   34 天前
    @hoobyy hhhhhh
    wybhdxfx
        44
    wybhdxfx   34 天前
    我的博客是 gunicorn+nginx,用着还可以。supervisor 暂时还用不上,需要更新就先 kill gunicorn,从 github pull,然后再启动 gunicorn。nginx 配好都很很少重启。
    hzwjz
        45
    hzwjz   34 天前 via Android
    使用 docker 就别用 uwsgi
    了,uwsgi 是要编译出来的。用 gunicorn 省时省力。

    如果实在是想用 docker+uwsgi,前往同性交友网站:/leollon/yet-another-image-bed.git😂
    CallMeReznov
        46
    CallMeReznov   34 天前
    NGINX+ FLASK 8001 8002 8003 8004 .....................................................多开?

    怕崩溃就用 bat 写个 LOOP 没问题吧?
    CallMeReznov
        47
    CallMeReznov   34 天前
    没 @就回复了,我说 WINDOWS 上简单的部署方式
    我本来是想回 @loading #37
    BFDZ
        48
    BFDZ   33 天前   ♥ 1
    q409640976
        49
    q409640976   33 天前 via Android
    @BFDZ 多谢指点
    l4ever
        50
    l4ever   33 天前
    @Les1ie

    ```
    threaded=True 了解一下?
    ```
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2228 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 38ms · UTC 14:52 · PVG 22:52 · LAX 06:52 · JFK 09:52
    ♥ Do have faith in what you're doing.