利用 Nginx 與 uwsgi 搭建 Django 框架WEB 應(yīng)用

本篇所使用的環(huán)境為 Ubuntu 16.04 LTS 云提供商為 cloud.google.com

1.生命周期

首先理解一下整個 WEB 應(yīng)用的

WEB 應(yīng)用的生命周期
WEB 應(yīng)用的生命周期
1.Ubuntu 為操作系統(tǒng)運(yùn)行環(huán)境
2.高性能 Nginx
3.虛擬的 Python 運(yùn)行環(huán)境(原因?yàn)檫@樣不會影響系統(tǒng)內(nèi)其他服務(wù))
4.是基于 Django 封裝的更高的WEB 框架
5.uWSGI 用來橋接 Nginx 與 Django 的通道
6.配置 Nginx 
7.配置 uWSGI

2.配置服務(wù)器( Ubuntu 16.04 LTS)

如果不差錢,隨意選擇一個運(yùn)營商即可,如果只是想體會一下,推薦使用 Google Cloud ,免費(fèi),且擁有臺灣節(jié)點(diǎn),對大陸友好度很高,缺點(diǎn)是申請需要翻墻

1.準(zhǔn)備純凈的系統(tǒng)(建議初始化的時候配置 SSH 密鑰會很方便)
2.利用 SSH 連接服務(wù)器,更新必要的系統(tǒng)軟件(可選,建議)
#獲取更新列表
sudo apt-get update

#更新系統(tǒng)
sudo apt-get dist-upgrade
  1. Tips:如果覺得主機(jī)名很長且名字不好看可用 hostname 主機(jī)名 來修改, 再輸入su 刷新一下即可看到修改后的主機(jī)名
  2. 如果登錄用戶為非root用戶,可通過 sudo -i 來進(jìn)行提權(quán)操作
3.安裝 Nginx

1.安裝

#安裝 Nginx
apt install Nginx

2.測試
測試 Nginx 服務(wù)器可用性
用瀏覽器打開服務(wù)器 IP 地址就可以看到 Nginx 歡迎頁面即表示安裝成功

Tips:
Nginx 的啟動/停止/重啟 命令

/etc/init.d/nginx start(& stop/ restart)
4.虛擬Python 環(huán)境與系統(tǒng)的關(guān)系
2
2
5.安裝虛擬環(huán)境
#如果想使用 Python3.x 的環(huán)境 來部署你的 WEB 應(yīng)用,可將下面的pip 更改為 pip3

#安裝虛擬環(huán)境
pip install virtualenv

#如果出現(xiàn)以下錯誤,請嘗試使用 export LC_ALL=C 這個命令來解決此問題
#root@instance-5:~# pip3 install virtualenv
#Traceback (most recent call last):
 # File "/usr/bin/pip3", line 11, in <module>
#    sys.exit(main())
#  File "/usr/lib/python3/dist-packages/pip/__init__.py", line 215, in main
#    locale.setlocale(locale.LC_ALL, '')
#  File "/usr/lib/python3.5/locale.py", line 594, in setlocale
#    return _setlocale(category, locale)
#locale.Error: unsupported locale setting


#如果提示 pip 版本過低,可通過下面的命令來升級
pip install --upgrade pip

#創(chuàng)建虛擬環(huán)境(選擇合適的目錄,本文選用的目錄為 /var/www/
#前進(jìn)到相關(guān)目錄
cd /var/www

#創(chuàng)建虛擬環(huán)境
virtualenv env27

#進(jìn)入虛擬環(huán)境
source env27/bin/activate

#如果你的 終端命令前顯示 (env27) root@name:/var/www# 就代表你已經(jīng)進(jìn)入虛擬環(huán)境

#查看當(dāng)前 Python 版本
Python -V

6.安裝 Django 與 Mezzanine
#安裝 Django
pip install Django

#安裝 Mezzanine (直接安裝這個也可以,該框架依賴 Django, 會自動將 安裝Django)
pip install Mezzanine

#創(chuàng)建項(xiàng)目
mezzanine-project mySite

#前進(jìn)到 mySite
cd mySite

#目錄下應(yīng)該會有以下文件
deploy (部署相關(guān)模版)
fabfile.py (不知道有啥用,沒細(xì)看)
__init__.py 
mySite  (網(wǎng)站目錄)
manage.py   (管理文件)
requirement.txt (依賴)

#創(chuàng)建數(shù)據(jù)庫
python manage.py createdb

#根據(jù)提示輸入相關(guān)信息即可

#收集相關(guān)靜態(tài)資源
python manage.py collectstatic

#提示后輸入 YES 即可

#測試當(dāng)前項(xiàng)目
python manage.py runserver 0.0.0.0:8000

打開瀏覽器測試的時候你會發(fā)現(xiàn)這個錯誤


原因是我們需要更改一下配置文件的 ALLOWED_HOSTS

#Ctrl + C 停止你的服務(wù)

#編輯文件
vi mySite/setting.py
找到 ALLOWED_HOSTS 字段
#修改為
ALLOWED_HOSTS = ["這里填寫你的服務(wù)器 IP 地址"]
#保存即可

#測試當(dāng)前項(xiàng)目
python manage.py runserver 0.0.0.0:8000

這時用瀏覽器打開 你的服務(wù)器IP:8000 就會看到項(xiàng)目已經(jīng)跑起來

到這里說明虛擬環(huán)境內(nèi)部的項(xiàng)目配置問題已經(jīng)搞定了,接下來要配置 Nginx 與 uwsgi 相關(guān)文件

7.安裝 uwsgi
#安裝 uwsgi
pip install uswgi

#查看當(dāng)前所在路徑,是否為 /var/www/mySite
pwd

#通過 uwsgi 來跑起來網(wǎng)站
uwsgi --http :8000 --module mySite.uwsgi.ini

打開網(wǎng)站以后會發(fā)現(xiàn)和直接 runserver 方式有些不同,沒有加載出相關(guān) css 樣式,不用擔(dān)心,只是靜態(tài)文件沒有配置,接下來會配置,跟著教程繼續(xù)往下走吧

8.配置 Nginx 與 uwsgi 聯(lián)系

先來張介紹圖


提供三個必要文件

#Nginx.conf

upstream django {
    server 127.0.0.1:8001;
}

server {
    #監(jiān)聽端口
    listen 80;
    #網(wǎng)站的域名,
    server_name localhost;
    #符號表
    charset utf-8;
    # 最大上傳文件
    client_max_body_size 75M;
    #靜態(tài)文件路徑
    location /static {
        alias /var/www/mySite/static;
    }
    #網(wǎng)站路徑
    location / {
        uwsgi_pass django;
        include /var/www/uwsgi_params;
    }
}
# uwsgi.ini

[uwsgi]
#網(wǎng)站目錄
chdir = /var/www/mySite
#配置文件
module =  mySite.wsgi
#家目錄
home = /var/www/env27
#不知道干啥用的
master = true
# 開十個線程
processes = 10
# 端口與上個 Nginx 的配置文件相同
socket = :8001
chmod-socket = 666
vacuum = true
#uwsgi_params 
#nginx 與 uswgi 的對應(yīng)集合
    
uwsgi_param  QUERY_STRING       $query_string;
uwsgi_param  REQUEST_METHOD     $request_method;
uwsgi_param  CONTENT_TYPE       $content_type;
uwsgi_param  CONTENT_LENGTH     $content_length;

uwsgi_param  REQUEST_URI        $request_uri;
uwsgi_param  PATH_INFO          $document_uri;
uwsgi_param  DOCUMENT_ROOT      $document_root;
uwsgi_param  SERVER_PROTOCOL    $server_protocol;
uwsgi_param  REQUEST_SCHEME     $scheme;
uwsgi_param  HTTPS              $https if_not_empty;

uwsgi_param  REMOTE_ADDR        $remote_addr;
uwsgi_param  REMOTE_PORT        $remote_port;
uwsgi_param  SERVER_PORT        $server_port;
uwsgi_param  SERVER_NAME        $server_name;

開始建立 Nginx 與網(wǎng)站目錄做關(guān)聯(lián)

cd /etc/nginx/sites-enabled

#會發(fā)現(xiàn)有一個 default 軟連接到 /etc/nginx/sites-available/default
ll default 

#先刪除 
rm -rf default

#建立軟連接
ln -s /var/www/nginx.conf mySite

#重新啟動 Nginx 服務(wù)
/etc/init.d/nginx restart

#提示 ok 代表已啟動成功

#前進(jìn)到網(wǎng)站目錄下
cd /var/www/

#再次啟動 uwsgi
uwsgi --ini uwsgi.init

到目前為止 網(wǎng)站已經(jīng)可以部署了.

接下來配置 uswgi 自啟動(不知道是不是正統(tǒng)的做法,但是可以解決此問題)

接下來的命令要退出虛擬環(huán)境

#真實(shí)環(huán)境要安裝 uwsgi(依舊為 Python3要將 pip 更換為 pip3)
pip install uwsgi

#編輯啟動文件
vim /etc/rc.local

#添加以下語句
/usr/local/bin/uwsgi --ini /var/www/uwsgi.ini

#重啟服務(wù)器就可以打開域名或者 IP 地址看到網(wǎng)站已經(jīng)正常工作了

'''
2017年11月27日更新
部署改為supervisor

'''

參考文獻(xiàn):
uWSGI官方文檔
自由小徑
pip-install-locale-error-unsupported-locale-setting

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市宗挥,隨后出現(xiàn)的幾起案子洗贰,更是在濱河造成了極大的恐慌栓辜,老刑警劉巖焚鹊,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異癣漆,居然都是意外死亡驾胆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門跛锌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弃秆,“玉大人,你說我怎么就攤上這事髓帽〔ぷ” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵郑藏,是天一觀的道長衡查。 經(jīng)常有香客問我,道長译秦,這世上最難降的妖魔是什么峡捡? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任击碗,我火速辦了婚禮,結(jié)果婚禮上们拙,老公的妹妹穿的比我還像新娘稍途。我一直安慰自己,他們只是感情好砚婆,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布械拍。 她就那樣靜靜地躺著,像睡著了一般装盯。 火紅的嫁衣襯著肌膚如雪坷虑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天埂奈,我揣著相機(jī)與錄音迄损,去河邊找鬼。 笑死账磺,一個胖子當(dāng)著我的面吹牛芹敌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播垮抗,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼氏捞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了冒版?” 一聲冷哼從身側(cè)響起液茎,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎辞嗡,沒想到半個月后捆等,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡欲间,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年楚里,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片猎贴。...
    茶點(diǎn)故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蝴光,靈堂內(nèi)的尸體忽然破棺而出她渴,到底是詐尸還是另有隱情,我是刑警寧澤蔑祟,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布趁耗,位于F島的核電站,受9級特大地震影響疆虚,放射性物質(zhì)發(fā)生泄漏苛败。R本人自食惡果不足惜满葛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望罢屈。 院中可真熱鬧嘀韧,春花似錦、人聲如沸缠捌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽曼月。三九已至谊却,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哑芹,已是汗流浹背炎辨。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留聪姿,地道東北人碴萧。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像咳燕,于是被迫代替她去往敵國和親勿决。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評論 2 350

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