nginx+uwsgi+flask搭建python-web應用程式

來源:互聯網
上載者:User

標籤:

Flask本身就可以直接啟動HTTP伺服器,但是受限於管理、部署、效能等問題,在生產環境中,我們一般不會使用Flask自身所帶的HTTP伺服器。

從現在已有的實踐來看,對於Flask,比較好的部署方式是使用uWSGI做WSGI容器,Nginx做前端伺服器。這樣做的好處在於:

1. uWSGI效能好,提供的功能也很多,營運方便。
2. Nginx對於靜態檔案處理較好,而且預設支援uWSGI協議,在負載平衡和壓力控制上都可以很方便的實現。

現在說一下具體的部署步驟:

因為本人比較喜歡Ubuntu Server做伺服器作業系統,所以這些操作只適於Ubuntu系統。在Ubuntu中我們就應該安裝Ubuntu的方式進行部署營運,而不是進行編譯安裝,通過ubuntu apt源安裝部署,不僅在整體風格上符合系統風格,而且提供給配置和營運巨大方便。

首先更新軟體源:

sudo apt-get update

安裝Nginx:

sudo apt-get install nginx

安裝uWSGI以及uWSGI對於Python的支援:

sudo apt-get install uwsgi uwsgi-plugin-python

安裝virtualenv:
這裡是一個個人選擇問題,因為眾多python包也可以通過apt源安裝。
我個人習慣是,一些python工具通過源安裝,比如supervisor,管理和升級都比較方便,而python一些第三方庫還是在virtualenv中通過pip安裝,像是virtualenv這樣的基礎工具還是通過源安裝。

sudo apt-get install python-virtualenv

建立Python環境:

mkdir -p /var/virenvs
cd /var/virenvs
virtualenv myenv

安裝Flask:

cd myenv
. bin/activate
pip install flask

建議使用pip的freeze和install -r requirement_file進行環境部署。

假設我們的項目路徑在 /var/virenvs/myenv/myproject,這時我們可以通過git或者其他什麼方式把程式部署上來。

給項目目錄配置許可權,nginx和uwsgi預設是以www-data使用者和組來運行:

chown -R www-data:www-data /var/virenvs/myenv/myproject
chmod -R 775 /var/virenvs/myenv/myproject

對於nginx和uwsgi我們可以使用vhost方式進行部署,這樣既能保證每個項目使用獨立的virtualenv又可以,共用一個uWSGI池,這樣在使用、部署和管理上都比較方便。

vim /etc/nginx/site-available/myproject

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為項目目錄下的mywebsite.py檔案,UWSGI_CALLABLE為其中的Flask執行個體名。

建立軟串連到enabled目錄

ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/myproject

uwsgi配置

vim /etc/uwsgi/apps-available/myuwsgi.ini

[uwsgi]plugins=pythonvhost=truesocket=127.0.0.1:9001

uwsgi還有很多其他配置項,產生環境中需要好好配置。

建立軟串連到enabled目錄

ln -s /etc/uwsgi/apps-available/myuwsgi.ini /etc/uwsgi/apps-enabled/myuwsgi.ini

重啟服務

service nginx restart
service uwsgi restart

部署完成

 

nginx有許多配置方式,他的載入過程如下:

啟動nginx服務,他會載入nginx.conf,這個檔案會載入/etc/nginx/site-enabled中的配置,這個配置講相關參數傳給uwsgi,uwsgi來管理app 應用

並將結果返回給nginx伺服器,最後以html的形式顯示。

如果出現nginx中upstream錯誤,則是nginx與uwsgi通訊出現問題,看看配置是否有問題 

如果出現python .egg許可權問題,則需要設定python-egg-cache路徑:http://blog.csdn.net/watsy/article/details/9665339,這裡需要注意的是,第三方包的cache儲存地點許可權問題

調試

應用app的調試主要是看log檔案,這裡有幾個Log檔案需要注意:

  nginx:access.log,error.log,主要記錄的是web請求的記錄以及相關錯誤

  uwsgi:myuwsgi.log,主要記錄的是應用程式內部錯誤

 

nginx+uwsgi+flask搭建python-web應用程式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.