django2.0+nginx+uwsgi配置

此文純粹記錄個人在搭建此博客時候遇到的情況。


nginx担租、uwsgi、django之間的相互聯(lián)系圖

版本說明:

? ? ? ? ubuntu 16.04 64位

? ? ? ? python 3.5

? ? ? ? django 2.0

? ? ? ? kindeditor

? ? ? ? virtualenv 15.2.0

? ? ? ? mysql? 5.7.21

? ? ? ? nginx? 1.10.3 (Ubuntu)

? ? ? ? uwsgi

主要配置難點在于在django setting.py文件的配置蚤假、uwsgi.ini文件配置特石,nginx配置上荐糜。



setting配置

? 1.若要放在云服務器上部署宋舷。

? ? ? ALLOWED_HOSTS = [

? ? ? ? ? ? ? '{云服務器ip地址}',

? ? ? ? ? ? ? '127.0.0.1',

? ? ? ? ]

? ? ? 首先要對服務器訪問ip與web程序進行綁定才可以由云服務器的ip訪問web資源绪撵。

2.更改數(shù)據(jù)庫配置。

? ? 數(shù)據(jù)庫在云服務器中使用的是mysql祝蝠,在此建議在安裝了mysql后音诈,將云服務器上安裝的mysql配置為可遠程訪問操控,方便在遠程使用第三方工具對數(shù)據(jù)庫進行操控续膳。

? ? DATABASES = {

? ? 'default': {

? ? ? ? # 'ENGINE': 'django.db.backends.sqlite3',

? ? ? ? # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),

? ? ? ? 'ENGINE': 'django.db.backends.mysql',

? ? ? ? 'NAME': '{數(shù)庫名}',

? ? ? ? 'USER': '{數(shù)據(jù)庫訪問用戶}',

? ? ? ? 'PASSWORD': '{數(shù)據(jù)庫訪問密碼}',

? ? ? ? 'HOST': '{數(shù)據(jù)庫所在的ip地址}',

? ? ? ? 'PORT': '3306',

? ? }

}

使用時改艇,對數(shù)據(jù)庫依賴安裝了有以下:

? ? ? sudo apt-get build-dep python-lxml? ?

? ? ? pip install PyMSQL

? ? ? pip install mysqlclient

? ? ? pip install Pollow? ? ? ### model中ImageField需要的依賴

3.對靜態(tài)文件和上傳文件的更改收班。

? ? ? django框架下坟岔,對靜態(tài)文件和上傳文件是需要進行配置才會有效,要指定訪問后綴和文件目錄地址摔桦,這一切都可以在setting配置中實現(xiàn)社付。

? ? ? #設置靜態(tài)文件目錄。其中前端js邻耕、css鸥咖、kindeditor富文本、UI第三方都放在其中

? ? #此地址是指在云服務器上 最后所有的static文件夾都會集中在此目錄下? ? 運行命令為

python manage.py collectstatic

? ? ? MEDIA_ROOT='/var/www/blog/static/'? ?

? ? ? STATIC_URL = '/static/'? ? ? ? ? ? ? ? ? ? ? ? ? #訪問url后綴地址 如? 127.0.0.1/static/js/jq.js

? ? ? STATICFILES_DIRS = (

? ? ? ? ? ? os.path.join(BASE_DIR, "static"),? ? #開發(fā)時存放靜態(tài)文件目錄

? ? ? )

? ? ? # 設置媒體文件目錄? 與上靜態(tài)文件目錄配置說明同理

? ? ? MEDIA_URL = '/media/'

? ? ? MEDIA_ROOT ='/var/www/blog/media/'? ?

注:admin的靜態(tài)文件位置與開發(fā)時的靜態(tài)文件位置不一致兄世,所以MEDIA_ROOT來合并所有的靜態(tài)文件是很有必要的啼辣,這樣admin才會有樣式。



uwsgi 配置

1.基本知識

wsgi:一種實現(xiàn)python解析的通用接口標準/協(xié)議御滩,是一種通用的接口標準或者接口協(xié)議鸥拧,實現(xiàn)了python web程序與服務器之間交互的通用性。

利用它削解,web.py或bottle或者django等等的python web開發(fā)框架富弦,就可以輕松地部署在不同的web server上了;

uwsgi:同WSGI一樣是一種通信協(xié)議

uwsgi協(xié)議是一個uWSGI服務器自有的協(xié)議氛驮,它用于定義傳輸信息的類型腕柜,它與WSGI相比是兩樣東西。

uWSGI :一種python web server或稱為Server/Gateway

uWSGI類似tornadoweb或者flup,是一種python web server盏缤,uWSGI是實現(xiàn)了uwsgi和WSGI兩種協(xié)議的Web服務器砰蠢,負責響應python 的web請求。

因為apache唉铜、nginx等娩脾,它們自己都沒有解析動態(tài)語言如php的功能,而是分派給其他模塊來做打毛,比如apache就可以說內(nèi)置了php模塊柿赊,讓人感覺好像apache就支持php一樣。

uWSGI實現(xiàn)了wsgi協(xié)議幻枉、uwsgi協(xié)議碰声、http等協(xié)議。 Nginx中HttpUwsgiModule的作用是與uWSGI服務器進行交換熬甫。

2.項目運行流程

? ??..首先客戶端請求服務資源胰挑,

? ?..nginx作為直接對外的服務接口,接收到客戶端發(fā)送過來的http請求,會解包、分析椿肩,

???..如果是靜態(tài)文件請求就根據(jù)nginx配置的靜態(tài)文件目錄瞻颂,返回請求的資源,

???..?如果是動態(tài)的請求,nginx就通過配置文件,將請求傳遞給uWSGI郑象;uWSGI 將接收到的包進行處理贡这,并轉(zhuǎn)發(fā)給? ?wsgi,

???..?wsgi根據(jù)請求調(diào)用django工程的某個文件或函數(shù)厂榛,處理完后django將返回值交給wsgi盖矫,

???..?wsgi將返回值進行打包,轉(zhuǎn)發(fā)給uWSGI击奶,

???..?uWSGI接收后轉(zhuǎn)發(fā)給nginx,nginx最終將返回值返回給客戶端(如瀏覽器)辈双。

3.實戰(zhàn)操作

? ? 安裝:sudo pip install uwsgi

? ? 測試uWSGI: 新建文件test.py,寫入以下內(nèi)容:

? ? ? ? def application(env, start_response):

? ? ? ? ? ? ? start_response('200 OK', [('Content-Type','text/html')])

? ? ? ? ? ? ? return "Hello World"

? ? 運行 sudo uwsgi --http 0.0.0.0:8000 --wsgi-file test.py

? ? 若瀏覽器顯示


test.py成功相應uwsgi

? ? 在project目錄下興建一個uwsgi.ini文件

? ??????????[uwsgi]

????????????# Django-related settings

????????????socket = :8000???# Django項目本地端口?

????????????chdir = /www/Blog/Blog/??# 項目根目錄位置

????????????wsgi-file = /Blog/wsgi.py? ?# wsgi.py文件在項目的中的相對位置

????????????module =Blog.wsgi

????????????# master

????????????master = true???# 進程設置柜砾,無需變動

????????????# maximum number of worker processes

????????????processes = 4???# 啟動4個uwsgi進程

????????????# ... with appropriate permissions - may be needed

????????????# chmod-socket? ? = 664

????????????# clear environment on exit

????????????vacuum = true

????????????pidfile=uwsgi.pid

????????????daemonize=uwsgi.log


uwsgi.ini文件配置

Nginx配置

? ? 1.作用:

????????1. 第一級的nginx并不是必須的湃望,uwsgi完全可以完成整個的和瀏覽器交互的流程;

????????2. 在nginx上加上安全性或其他的限制痰驱,可以達到保護程序的作用证芭;

????????3. uWSGI本身是內(nèi)網(wǎng)接口,開啟多個work和processes可能也不夠用萄唇,而nginx可以代理多臺uWSGI完成? ? ? ? ? ? ? ? ? uWSGI的負載均衡檩帐;

????????4. django在debug=False下對靜態(tài)文件的處理能力不是很好,而用nginx來處理更加高效另萤。

? ? 2.實戰(zhàn)配置

? ? ? ? nginx的配置文件在ubuntu中位置為 /etc/nginx/nginx.conf

? ? ? ? 而我們要寫入的服務配置在??/etc/nginx/sites-enabled/default

? ??????upstream django {

? ? ????????# 設置本地服務的端口

? ????????? server 127.0.0.1:8000; # for a web port socket (we'll use this first)

????????}

????????# configuration of the server

????????server {

? ? ????????# 監(jiān)聽主機的端口

? ? ????????listen? ? ? 80;

? ? ????????# the domain name it will serve for

? ????????? # server_name .liqian.ink; # substitute your machine's IP address or FQDN

? ????????? charset? ? utf-8;

? ? ????????# max upload size

? ? ????????client_max_body_size 75M;? # adjust to taste

? ????????? # 設置媒體文件目錄

? ? ????????# Django media

? ????????? location /media? {

? ? ? ? ????????alias /var/www/blog/media;? # your Django project's media files - amend as required

? ? ????????}

? ? ????????# 設置靜態(tài)文件目錄

? ????????? location /static {

? ? ? ????????? alias /var/www/blog/static; # your Django project's static files - amend as required

? ????????? }

? ?????????# Finally, send all non-media requests to the Django server.

? ????????? location / {

? ? ? ? ????????uwsgi_pass? django;

? ? ? ? ????????include? ? uwsgi_params; ????????# the uwsgi_params file you installed

? ????? }

????}


nginx配置文件寫入



備注

1.注意事項

每次修改了Django項目中的模板/視圖/URL/配置文件湃密,都需要重啟uwsgi服務诅挑。

修改Nginx配置文件,都需要重啟Nginx服務泛源。

啟動:uwsgi --ini uwsgi.ini?

停止:uwsgi --stop uwsgi.pid?

重啟:uwsgi --reload uwsgi.pid?

強制停止:killall -9 uwsgi?

nginx -s reload;? nginx重啟? 但自己常使用 service nginx start/restart/stop

2.文件權限處理

是ubuntu下要先創(chuàng)建關于django web project的靜態(tài)文件目錄和上傳文件目錄拔妥,要保證

修改目錄權限:sudo chmod 777 /var/www/xxxx?

創(chuàng)建static目錄,注意順序是先分配權限达箍,再創(chuàng)建目錄:mkdir static

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末没龙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子缎玫,更是在濱河造成了極大的恐慌硬纤,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赃磨,死亡現(xiàn)場離奇詭異筝家,居然都是意外死亡,警方通過查閱死者的電腦和手機邻辉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門溪王,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人值骇,你說我怎么就攤上這事莹菱。” “怎么了吱瘩?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵道伟,是天一觀的道長。 經(jīng)常有香客問我搅裙,道長皱卓,這世上最難降的妖魔是什么裹芝? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任部逮,我火速辦了婚禮,結(jié)果婚禮上嫂易,老公的妹妹穿的比我還像新娘兄朋。我一直安慰自己,他們只是感情好怜械,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布颅和。 她就那樣靜靜地躺著,像睡著了一般缕允。 火紅的嫁衣襯著肌膚如雪峡扩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天障本,我揣著相機與錄音教届,去河邊找鬼响鹃。 笑死,一個胖子當著我的面吹牛案训,可吹牛的內(nèi)容都是我干的买置。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼强霎,長吁一口氣:“原來是場噩夢啊……” “哼忿项!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起城舞,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤轩触,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后家夺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怕膛,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年秦踪,在試婚紗的時候發(fā)現(xiàn)自己被綠了褐捻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡椅邓,死狀恐怖柠逞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情景馁,我是刑警寧澤板壮,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站合住,受9級特大地震影響绰精,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜透葛,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一笨使、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧僚害,春花似錦硫椰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至岳遥,卻和暖如春奕翔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背浩蓉。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工派继, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留帮坚,地道東北人。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓互艾,卻偏偏與公主長得像试和,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子纫普,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350

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