zoukankan      html  css  js  c++  java
  • python flask应用部署

    失败版本:flask+uwsgi

    ini配置文件

    [uwsgi]
    
    callable = app      ;//程序内启用的application变量名
    
    home = /home/jcuan/code/python/project/venv    ;如果是venv环境下,一定要设置路径
    
    pythonpath = /home/jcuan/code/python/project/venv    ;可以设置pythonpath的路径,flask命令行会自动设置一些路径(比如我的自动设置了: /home/jcuan/code/python/project/venv),注意这个不会
    
    socket = /tmp/uwsgi.sock    ; 启动程序时所使用的地址和端口,可以采用端口或者unix socket
    
    wsgi-file = /home/jcuan/code/python/project/venv/application/__init__.py      ;flask程序的启动文件,这个文件里不需要有app.run(),有了反而会出错
    
    processes = 4     ;//处理器个数
    
    threads = 2     ;//线程个数
    

    不知道是有什么特殊原因:1,callable不能在ini文件里配置,不管配置什么都是默认的application;2,chmod-sock在ini里配置无效
    运行

    uwsgi --plugin python --ini  uwsig.ini --callable app --chmod-sock=666
    

    nginx的文件配置大概如下(location是/,不会分别配置。。):

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/tmp/uwsgi.sock;
    }
    

    虽然可以运行,不过我在__init__.py里面import的视图函数统统没有起作用,虽然绑定了,但是访问对应的url是404,只有定义在__init__.py的视图函数才起作用

    成功版本flask+gunicorn

    gunicorn.conf的基本配置,注意字符串都要用引号包含起来
    注意这个地方也有坑,不要把sock文件放在/tmp目录下,最好放/run等目录下,因为服务器的原因,/tmp目录下文件可能只对特定的服务可见。

    your system probably using namespaced temporary directories, which means every service can only see its own files in /tmp

    workers = 3     #进程数
    timeout = 30      #超时
    bind = 'unix:/tmp/flask.socks'  #nginx监听位置
    backlog = 1000  #监听队列长度
    

    然后又进入了一个坑,nginx那边的超简化版配置应该像这样

    server {
            listen 80;
            server_name 127.0.0.1;
    
            location / {
                include proxy_params;    #这里边设置了一些代理需要转换的头,比如得到真实ip, proxy_set_header X-Real-IP $remote_addr; 
                proxy_pass http://unix:/tmp/flask.sock;        #很奇葩,我一直写的是unix:/tmp/flask.sock,然后一直都不对
            }
    }
    

    运行l类似下边的命令就可以了gunicorn --config application/gunicorn.conf application:app。application:我的应用所在包的名字,app,flask启动文件中Flask实例变量的名字

  • 相关阅读:
    ql语句中left join和inner join中的on与where的区别分析
    C#如何通过属性名称反射出属性本身
    mvc中查询字符串请求过长
    SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别
    后台二进制文件 在前台下载方法总结
    C#中try catch finally的执行顺序
    python生成随机密码
    Bridged(桥接模式)
    NAT(地址转换模式)
    TCP协议详解
  • 原文地址:https://www.cnblogs.com/jcuan/p/6075333.html
Copyright © 2011-2022 走看看