Flask本身就可以直接啟動(dòng)HTTP服務(wù)器,但是受限于管理、部署、性能等問題,在生產(chǎn)環(huán)境中,我們一般不會(huì)使用Flask自身所帶的HTTP服務(wù)器。 從現(xiàn)在已有的實(shí)踐來看,對(duì)于Flask,比較好的部署方式是使用uWSGI做WSGI容器,Nginx做前端服務(wù)器。這樣做的好處在于:
1. uWSGI性能好,提供的功能也很多,運(yùn)維方便。 現(xiàn)在說一下具體的部署步驟: 因?yàn)楸救吮容^喜歡Ubuntu Server做服務(wù)器操作系統(tǒng),所以這些操作只適于Ubuntu系統(tǒng)。在Ubuntu中我們就應(yīng)該安裝Ubuntu的方式進(jìn)行部署運(yùn)維,而不是進(jìn)行編譯安裝,通過ubuntu apt源安裝部署,不僅在整體風(fēng)格上符合系統(tǒng)風(fēng)格,而且提供給配置和運(yùn)維巨大方便。 首先更新軟件源:
安裝Nginx:
安裝uWSGI以及uWSGI對(duì)于Python的支持:
安裝virtualenv:
建立Python環(huán)境:
安裝Flask:
建議使用pip的freeze和install -r requirement_file進(jìn)行環(huán)境部署。 假設(shè)我們的項(xiàng)目路徑在 /var/virenvs/myenv/myproject,這時(shí)我們可以通過git或者其他什么方式把程序部署上來。 給項(xiàng)目目錄配置權(quán)限,nginx和uwsgi默認(rèn)是以www-data用戶和組來運(yùn)行:
對(duì)于nginx和uwsgi我們可以使用vhost方式進(jìn)行部署,這樣既能保證每個(gè)項(xiàng)目使用獨(dú)立的virtualenv又可以,共用一個(gè)uWSGI池,這樣在使用、部署和管理上都比較方便。
server { listen 80; server_name hostname; location /static { alias /var/virenvs/myenv/myproject/static; } location / { include uwsgi_params; uwsgi_pass 127.0.0.1:9001; uwsgi_param UWSGI_PYHOME /var/virenvs/myenv; uwsgi_param UWSGI_CHDIR /var/virenvs/myenv/myproject; uwsgi_param UWSGI_MODULE mywebsite; uwsgi_param UWSGI_CALLABLE app; } error_page 404 /404.html; } 其中mywebsite為項(xiàng)目目錄下的mywebsite.py文件,UWSGI_CALLABLE為其中的Flask實(shí)例名。 建立軟連接到enabled目錄
uwsgi配置
[uwsgi] plugins=python vhost=true socket=127.0.0.1:9001 uwsgi還有很多其他配置項(xiàng),生成環(huán)境中需要好好配置。 建立軟連接到enabled目錄
重啟服務(wù)
部署完成 轉(zhuǎn)自:http:///2012/08/06/ubuntu-12-04-%E4%B8%8B%E9%83%A8%E7%BD%B2-nginxuwsgiflask/ ======================================================================================== |
|