Django + uwsgi + nginx 部署

更多關(guān)注:
http://www.mknight.cn/post/602/

python3 編譯安裝

依賴環(huán)境安裝

#你就裝吧鸵熟,不裝就等著后悔吧
yum install openssl-devel  sqlite-devel -y-y

下載

cd /usr/src
wget https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz

解壓

tar -zxvf Python-3.5.1.tgz
cd Python-3.5.1
 ./configure --prefix=/usr/local/python3
make
make install

創(chuàng)建命令軟連接

ln -s /usr/local/python3/bin/python3 /usr/bin/python3

ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

報(bào)錯(cuò)整理

  • Ignoring ensurepip failure: pip 7.1.2 requires SSL/TLS

    原因,沒(méi)有安裝open-ssl
    解決蛤迎,yum install open-ssl

  • python3提示sqlite3模塊不存在解決方法

    首先

yum install sqlite-devel -y
然后重裝下python3(一定要重裝)
cd Python-3.4.2
./configure --prefix=/usr/local/python3
make && make install

附錄:

Python下載地址 https://www.python.org/ftp/python/

uwsgi部署

安裝uwsgi

pip install uwsgi
#or
curl http://uwsgi.it/install | bash -s default /tmp/uwsgi

測(cè)試

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

將其保存為 foobar.py炒辉。
正如你所見(jiàn)其徙,它由一個(gè)簡(jiǎn)單的Python函數(shù)組成谱煤。之所以稱之為 “application”亥曹,是因?yàn)樗莡WSGI Python加載器將會(huì)搜索的默認(rèn)函數(shù) (但你顯然可以自定義)噪服。
將其部署在HTTP端口9090
現(xiàn)在毡泻,啟動(dòng)uWSGI來(lái)運(yùn)行一個(gè)HTTP服務(wù)器/路由器,它會(huì)傳遞請(qǐng)求到你的WSGI應(yīng)用:

uwsgi --http :9090 --wsgi-file foobar.py

就這樣粘优。

添加并發(fā)和監(jiān)控

你想進(jìn)行的第一個(gè)調(diào)整可能是增加并發(fā)性 (默認(rèn)情況下仇味,uWSGI啟動(dòng)一個(gè)單一的進(jìn)程和一個(gè)單一的線程)呻顽。

你可以用 --processes 選項(xiàng)添加更多的進(jìn)程,或者使用 --threads 選項(xiàng)添加更多的線程 (或者可以同時(shí)添加)丹墨。

uwsgi --http :9090 --wsgi-file foobar.py --master --processes 4 --threads 2

這將會(huì)生成4個(gè)進(jìn)程 (每個(gè)進(jìn)程有2個(gè)線程)廊遍,一個(gè)master進(jìn)程 (在Inc死掉的時(shí)候會(huì)生成它們) 和HTTP路由器 (見(jiàn)前面)。

一個(gè)重要的任務(wù)是監(jiān)控贩挣。在生產(chǎn)部署上喉前,了解正在發(fā)生的事情是至關(guān)重要的。stats子系統(tǒng)允許你將uWSGI的內(nèi)部統(tǒng)計(jì)數(shù)據(jù)作為JSON導(dǎo)出:

uwsgi --http :9090 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

對(duì)你的應(yīng)用進(jìn)行幾次請(qǐng)求王财,然后telnet到端口9191卵迂,你會(huì)獲得大量有趣的信息。你可能想要使用”uwsgitop” (僅需 pip install 來(lái)安裝它)绒净,這是一個(gè)類似于top的工具狭握,用來(lái)監(jiān)控實(shí)例。

將它放在一個(gè)完整的web服務(wù)器之后

即使uWSGI HTTP路由器是穩(wěn)定并且高性能的疯溺,但是你或許想要將你的應(yīng)用放在一個(gè)全功能的web服務(wù)器之后论颅。

uWSGI原生支持HTTP, FastCGI, SCGI及其特定的名為”uwsgi”的協(xié)議 (是噠,錯(cuò)誤的命名選擇)囱嫩。最好的協(xié)議顯然是uwsgi恃疯,nginx和Cherokee已經(jīng)支持它了 (雖然有各種Apache模塊可用)

一個(gè)常用的nginx配置如下:

location / {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:3031;
}

這表示“傳遞每一個(gè)請(qǐng)求給綁定到3031端口并使用uwsgi協(xié)議的服務(wù)器”。

現(xiàn)在墨闲,我們可以生成uWSGI來(lái)本地使用uwsgi協(xié)議:

uwsgi --socket 127.0.0.1:3031 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

如果你要運(yùn)行 ps aux 今妄,那么你會(huì)看到一個(gè)進(jìn)程。已經(jīng)移除了HTTP路由器鸳碧,因?yàn)槲覀兊摹皐orker” (被分配給uWSGI的進(jìn)程) 本地使用uwsgi協(xié)議盾鳞。

如果你的代理/web服務(wù)器/路由器使用HTTP,那么你必須告訴uWSGI本地使用http協(xié)議 (這與會(huì)自己生成一個(gè)代理的–http不同):

uwsgi --http-socket 127.0.0.1:3031 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

部署Django

Django大概是最常使用的Python web框架了瞻离。部署它是相當(dāng)容易的 (我們繼續(xù)配置4個(gè)進(jìn)程腾仅,每個(gè)進(jìn)程有2個(gè)線程)。

假設(shè)Django工程位于 /home/foobar/myproject:

uwsgi --socket 127.0.0.1:3031 --chdir /home/foobar/myproject/ --wsgi-file myproject/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

(使用 --chdir 套利,我們移到指定的目錄下)推励。在Django中,需要使用它來(lái)正確加載模塊肉迫。

哎呀验辞!這是什么鬼?喊衫!是噠跌造,你是對(duì)的,對(duì)的……處理這樣長(zhǎng)的命令行并不實(shí)際族购,并且愚蠢而易于犯錯(cuò)壳贪。不要害怕陵珍!uWSGI支持多種配置風(fēng)格。在這個(gè)入門中撑碴,我們會(huì)使用.ini文件撑教。

[uwsgi]
socket = 127.0.0.1:3031
chdir = /home/foobar/myproject/
wsgi-file = myproject/wsgi.py
processes = 4
threads = 2
stats = 127.0.0.1:9191

好得多了!

僅需運(yùn)行:

uwsgi yourfile.ini

安全性和可用性

總是 避免以root用戶運(yùn)行你的uWSGI實(shí)例醉拓。你可以使用 uid 和 gid 選項(xiàng)來(lái)去除權(quán)限:

[uwsgi]
https = :9090,foobar.crt,foobar.key
uid = foo
gid = bar
chdir = path_to_web2py
module = wsgihandler
master = true
processes = 8

如果你需要綁定到特許端口 (例如用于HTTPS的443)伟姐,那么使用共享socket。它們?cè)谌コ龣?quán)限之前創(chuàng)建亿卤,并且可以通過(guò) =N 語(yǔ)法引用愤兵,其中, N 是socket號(hào) (從0開(kāi)始):

[uwsgi]
shared-socket = :443
https = =0,foobar.crt,foobar.key
uid = foo
gid = bar
chdir = path_to_web2py
module = wsgihandler
master = true
processes = 8

web應(yīng)用部署的一個(gè)常見(jiàn)問(wèn)題是“卡住的請(qǐng)求”排吴。你所有的線程/worker都卡住了 (請(qǐng)求阻塞) 秆乳,而你的應(yīng)用無(wú)法接收更多的請(qǐng)求。要避免這個(gè)問(wèn)題钻哩,你可以設(shè)置一個(gè) harakiri 定時(shí)器屹堰。它是一個(gè)監(jiān)控器 (由master進(jìn)程管理),會(huì)摧毀那些卡住超過(guò)指定秒數(shù)的進(jìn)程 (小心選擇 harakiri 值)街氢。例如扯键,你也許想要摧毀那些阻塞超過(guò)30秒的worker:

[uwsgi]
shared-socket = :443
https = =0,foobar.crt,foobar.key
uid = foo
gid = bar
chdir = path_to_web2py
module = wsgihandler
master = true
processes = 8
harakiri = 30

除此之外,自u(píng)WSGI 1.9起珊肃,stats服務(wù)器導(dǎo)出了全部請(qǐng)求變量荣刑,因此,你可以(實(shí)時(shí))看到你的實(shí)例正在做什么 (對(duì)于每個(gè)worker, thread 或者異步核)伦乔。

備注

詳情參考

nginx

示例

server {
    listen 89;
    server_name 192.168.1.40;
    location / {
            root /data/project/scm;
            uwsgi_pass 127.0.0.1:3031; #uwsgi
            include        uwsgi_params;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header        Host $http_host;
            proxy_set_header X-Forwarded-Proto https;
            proxy_redirect off;
    }
    location = /50x.html {
            root   html;
        }
    #靜態(tài)文件
    location ^~ /static/ {
            root /data/project/scm;
    }
}

注意訪問(wèn)nginx端口丛肢,不是uwsgi端口 V上场!侣夷!

更多關(guān)注:
http://www.mknight.cn/post/602/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末朵锣,一起剝皮案震驚了整個(gè)濱河市驹吮,隨后出現(xiàn)的幾起案子涕俗,更是在濱河造成了極大的恐慌高蜂,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蔗喂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡高帖,警方通過(guò)查閱死者的電腦和手機(jī)缰儿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)散址,“玉大人乖阵,你說(shuō)我怎么就攤上這事宣赔。” “怎么了瞪浸?”我有些...
    開(kāi)封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵儒将,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我对蒲,道長(zhǎng)钩蚊,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任蹈矮,我火速辦了婚禮砰逻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘泛鸟。我一直安慰自己蝠咆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布北滥。 她就那樣靜靜地躺著刚操,像睡著了一般。 火紅的嫁衣襯著肌膚如雪再芋。 梳的紋絲不亂的頭發(fā)上菊霜,一...
    開(kāi)封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音祝闻,去河邊找鬼占卧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛联喘,可吹牛的內(nèi)容都是我干的华蜒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼豁遭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼叭喜!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蓖谢,我...
    開(kāi)封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤捂蕴,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后闪幽,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體啥辨,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年盯腌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了溉知。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖级乍,靈堂內(nèi)的尸體忽然破棺而出舌劳,到底是詐尸還是另有隱情,我是刑警寧澤玫荣,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布甚淡,位于F島的核電站,受9級(jí)特大地震影響捅厂,放射性物質(zhì)發(fā)生泄漏贯卦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一恒傻、第九天 我趴在偏房一處隱蔽的房頂上張望脸侥。 院中可真熱鬧,春花似錦盈厘、人聲如沸睁枕。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)外遇。三九已至,卻和暖如春契吉,著一層夾襖步出監(jiān)牢的瞬間跳仿,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工捐晶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留菲语,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓惑灵,卻偏偏與公主長(zhǎng)得像山上,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子英支,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 之前的文章中將uwsgi, nginx mysql 等全部安裝完畢.本篇內(nèi)容最終達(dá)到的效果是提交代碼到某分支, 遠(yuǎn)...
    行如風(fēng)閱讀 1,118評(píng)論 0 0
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,502評(píng)論 6 427
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理佩憾,服務(wù)發(fā)現(xiàn),斷路器干花,智...
    卡卡羅2017閱讀 134,697評(píng)論 18 139
  • 學(xué)習(xí) Flask妄帘,寫完一個(gè) Flask 應(yīng)用需要部署的時(shí)候,就想著折騰自己的服務(wù)器池凄。根據(jù)搜索的教程照做抡驼,對(duì)于原理一...
    Cocoa_Coder閱讀 17,146評(píng)論 4 56
  • 首先要裝一些東西之前先搞一下ppa 個(gè)人是用的Ubuntu 12.04.4 有些軟件還ppa之后再裝比較好,具體p...
    大女表哥閱讀 352評(píng)論 0 0