python flask應用部署

失敗版本:flask+uwsgi

ini配置文件python

[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裏配置無效
運行nginx

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

nginx的文件配置大概以下(location是/,不會分別配置。。):flask

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目錄下文件可能只對特定的服務可見。app

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

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

相關文章
相關標籤/搜索