日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
快速部署Python應(yīng)用:Nginx+uWSGI配置詳解

在PHP里,最方便的就是deployment了,只要把php文件丟到支持PHP的路徑里面,然后訪問那個路徑就能使用了;無論給主機添加多少PHP應(yīng)用,只要把目錄改好就沒你的事了,完全不用關(guān)心php-cgi運行得如何,deployment極為方便。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比大連網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式大連網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋大連地區(qū)。費用合理售后完善,十多年實體公司更值得信賴。

反觀Python,部屬起來真是頭痛,常見的部署方法有:

◆fcgi:用spawn-fcgi或者框架自帶的工具對各個project分別生成監(jiān)聽進程,然后和http服務(wù)互動。

◆wsgi:利用http服務(wù)的mod_wsgi模塊來跑各個project。

無論哪種都很麻煩,apache的mod_wsgi配置起來很麻煩,內(nèi)存占用還大,如果要加上nginx作為靜態(tài)頁面的服務(wù)器那就更麻煩了;我的應(yīng)用基本上到后來都是是各個project各自為戰(zhàn),且不說管理上的混亂,這樣對負載也是不利的,空閑的project和繁忙的project同樣需要占用內(nèi)存。

如果Python中能有個什么東西像php-cgi一樣監(jiān)聽同一端口,進行統(tǒng)一管理和負載平衡,那真是能省下大量的部署功夫。偶然看到了uWSGI,才發(fā)現(xiàn)居然一直不知道有那么方便地統(tǒng)一部署工具。uWSGI,既不用wsgi協(xié)議也不用fcgi協(xié)議,而是自創(chuàng)了一個uwsgi的協(xié)議,據(jù)說該協(xié)議大約是fcgi協(xié)議的10倍那么快,有個比較見下圖:

uWSGI的主要特點如下:

◆超快的性能。

◆低內(nèi)存占用(實測為apache2的mod_wsgi的一半左右)。

◆多app管理。

◆詳盡的日志功能(可以用來分析app性能和瓶頸)。

◆高度可定制(內(nèi)存大小限制,服務(wù)一定次數(shù)后重啟等)。

正式開工

uwsgi的文檔雖然很多也很詳細,這里是uwsgi的官方文檔:http://projects.unbit.it/uwsgi/wiki/Doc。

1.安裝uwsgi

ubuntu有uwsgi的ppa:

 
 
 
 
  1. add-apt-repository ppa:stevecrozz/ppa  
  2. apt-get update  
  3. apt-get install uwsgi 

2. 用uwsgi代替mod_wsgi

Nginx的整體配置說來話長,這里不再多說,假設(shè)已經(jīng)明白Nginx的基本配置,那么uwsgi就類似這么配置:

 
 
 
 
  1. location / {  
  2.   include uwsgi_params  
  3.   uwsgi_pass 127.0.0.1:9090  

這就是把所有url傳給9090端口的uwsgi協(xié)議程序來互動。再到project目錄建立myapp.py,使得application調(diào)用框架的wsgi接口,比如web.py就是:

 
 
 
 
  1. ......  
  2. app = web.application(urls, globals())  
  3. appapplication = app.wsgifunc() 

再比如django就是:

 
 
 
 
  1. .......  
  2. from django.core.handlers.wsgi import WSGIHandler  
  3. application = WSGIHandler() 

然后運行uwsgi監(jiān)聽9090,其中-w后跟模塊名,也就是剛才配置的myapp

 
 
 
 
  1. uwsgi -s :9090 -w myapp 

運行網(wǎng)站發(fā)現(xiàn)已經(jīng)部署完成了。

3.uwsgi的參數(shù)

以上是單個project的最簡單化部署,uwsgi還是有很多令人稱贊的功能的,例如:

并發(fā)4個線程:

 
 
 
 
  1. uwsgi -s :9090 -w myapp -p 4 

主控制線程+4個線程:

 
 
 
 
  1. uwsgi -s :9090 -w myapp -M -p 4 

執(zhí)行超過30秒的client直接放棄:

 
 
 
 
  1. uwsgi -s :9090 -w myapp -M -p 4 -t 30 

限制內(nèi)存空間128M:

 
 
 
 
  1. uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128 

服務(wù)超過10000個req自動respawn:

 
 
 
 
  1. uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128 -R 10000 

后臺運行等:

 
 
 
 
  1. uwsgi -s :9090 -w myapp -M -p 4 -t 30 --limit-as 128 -R 10000 -d uwsgi.log 

4.為uwsgi配置多個站點

為了讓多個站點共享一個uwsgi服務(wù),必須把uwsgi運行成虛擬站點:去掉“-w myapp”加上”–vhost”:

 
 
 
 
  1. uwsgi -s :9090 -M -p 4 -t 30 --limit-as 128 -R 10000 -d uwsgi.log --vhost 

然后必須配置virtualenv,virtualenv是Python的一個很有用的虛擬環(huán)境工具,這樣安裝:

 
 
 
 
  1. apt-get install Python-setuptools  
  2. easy_install virtualenv 

然后設(shè)置一個/多個app基準(zhǔn)環(huán)境:

 
 
 
 
  1. virtualenv /var/www/myenv 

應(yīng)用環(huán)境,在此環(huán)境下安裝的軟件僅在此環(huán)境下有效:

 
 
 
 
  1. source /var/www/myenv/bin/activate  
  2. pip install django  
  3. pip install mako  
  4. ... 

最后配置nginx,注意每個站點必須單獨占用一個server,同一server不同location定向到不同的應(yīng)用不知為何總是失敗,估計也算是一個bug。

 
 
 
 
  1. server {  
  2.         listen       80;  
  3.         server_name  app1.mydomain.com;  
  4.         location / {  
  5.                 include uwsgi_params;  
  6.                 uwsgi_pass 127.0.0.1:9090;  
  7.                 uwsgi_param UWSGI_PYHOME /var/www/myenv;  
  8.                 uwsgi_param UWSGI_SCRIPT myapp1;  
  9.                 uwsgi_param UWSGI_CHDIR /var/www/myappdir1;  
  10.         }  
  11.     }  
  12.     server {  
  13.         listen       80;  
  14.         server_name  app2.mydomain.com;  
  15.         location / {  
  16.                 include uwsgi_params;  
  17.                 uwsgi_pass 127.0.0.1:9090;  
  18.                 uwsgi_param UWSGI_PYHOME /var/www/myenv;  
  19.                 uwsgi_param UWSGI_SCRIPT myapp2;  
  20.                 uwsgi_param UWSGI_CHDIR /var/www/myappdir2;  
  21.         }  
  22.     } 

這樣,重啟nginx服務(wù),兩個站點就可以共用一個uwsgi服務(wù)了。

#p#

5.實戰(zhàn)應(yīng)用

最初的設(shè)置完畢以后,再添加的應(yīng)用,只需要在Nginx里面進行少量修改,無需重啟uwsgi,就能立刻部署完畢。uwsgi自帶了基于django的監(jiān)控uwsgi運行狀態(tài)的工具,就拿它來部署好了:

 
 
 
 
  1. server {  
  2.     listen 80;  
  3.     root   /var/www/django1.23;  
  4.     index  index.html index.htm;  
  5.     server_name uwsgiadmin.django.obmem.info;  
  6.     access_log  /var/log/nginx/django.access.log;  
  7.     location /media/ {  
  8.         root /var/www/django1.23/adminmedia;  
  9.         rewrite ^/media/(.*)$ /$1 break;  
  10.     }  
  11.     location / {  
  12.         include uwsgi_params;  
  13.         uwsgi_pass 127.0.0.1:9090;  
  14.         uwsgi_param UWSGI_PYHOME /var/www/django1.23/vtenv;  
  15.         uwsgi_param UWSGI_CHDIR /var/www/django1.23/uwsgiadmin;  
  16.         uwsgi_param UWSGI_SCRIPT uwsgiadmin_wsgi;  
  17.     }  

于是uwsgi的監(jiān)控信息可以在http://uwsgiadmin.django.obmem.info看到(用戶名密碼都是admin)。再比如LBForum論壇程序的部署:根據(jù)安裝說明安裝完畢,再按部署說明修改完配置文件,然后只需修改nginx配置文件:

 
 
 
 
  1. server {  
  2.     listen 80;  
  3.     root   /var/www/django1.23;  
  4.     index  index.html index.htm;  
  5.     server_name lbforum.django.obmem.info;  
  6.     access_log  /var/log/nginx/django.access.log;  
  7.     location / {  
  8.         include uwsgi_params;  
  9.         uwsgi_pass 127.0.0.1:9090;  
  10.         uwsgi_param UWSGI_PYHOME /var/www/django1.23/vtenv;  
  11.         uwsgi_param UWSGI_CHDIR /var/www/django1.23/LBForum/sites/default;  
  12.         uwsgi_param UWSGI_SCRIPT lbforum_wsgi;  
  13.     }  

于是http://lbforum.django.obmem.info就是論壇程序了。

后記

雖然寫出來寥寥幾行,配置的時候我可吃盡了uwsgi的苦頭,有些想當(dāng)然的用法完全不能成立,–no-site參數(shù)一加上去其他都好使LBForum怎么都部署不了,一開始多站點公用uwsgi怎么都成功不了等等。

Python世界很有趣,一直會發(fā)現(xiàn)有趣的東西,但是Python世界也很折騰人,大部分東西都是dev版本,文檔缺失,各種兼容問題。

原文地址:http://obmem.info/?p=703

uwsgi官網(wǎng):http://projects.unbit.it/uwsgi/


當(dāng)前文章:快速部署Python應(yīng)用:Nginx+uWSGI配置詳解
鏈接URL:http://www.5511xx.com/article/ccoshoc.html