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實例變量的名字


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM