從零開(kāi)始在 Ubuntu ?下部署 Django + uwsgi + nginx

整體安裝流程 安裝 ubuntu ,安裝 pip, 安裝 uwsgi, 安裝 django安裝 nginx
整個(gè)請(qǐng)求邏輯
用戶訪問(wèn) -> nginx -> uwsgi -> django
其中靜態(tài)文件 直接由 nginx 處理

  1. 安裝 Ubuntu
    下載的時(shí)候, 看到 mini 版本只有幾十兆, 就選了 mini 版本 鏈接在此
    安裝的時(shí)候才發(fā)現(xiàn), 好多都是要后面下載的, 不過(guò)無(wú)所謂了, 安裝上就行了
  2. 安裝 ssh server
    ssh server 可以讓你在其他電腦上通過(guò)支持的命令行工具(如 mac 下的 終端, windows 下的 putty) 遠(yuǎn)程連接, 這樣就不用一直守在機(jī)器旁邊了.
    我自己安裝的時(shí)候, 漏選了這一項(xiàng), 導(dǎo)致安裝好的 Ubuntu 沒(méi)有ssh 服務(wù)器, 需要自己安裝, 安裝方法如下, 如果你已經(jīng)有了就跳過(guò) (可以在其他電腦上運(yùn)行 ssh root@<服務(wù)器 ip> 來(lái)看, 如果提示連接拒絕, 就表示沒(méi)有安裝)
sudo apt-get update
sudo apt-get install openssh-server
service ssh start
  1. 安裝 pip
    pip 是一個(gè) python 下的包管理工具, 可以很方便的安裝各類 python 的第三方工具, 類似 iOS 開(kāi)發(fā)的 Cocoapod
curl -O https://bootstrap.pypa.io/get-pip.py 
sudo python3 get-pip.py
  1. 設(shè)置 pip 鏡像
    由于默認(rèn)服務(wù)器是在國(guó)外, 訪問(wèn)速度實(shí)在感人, 還好有各類國(guó)內(nèi)的鏡像可以加速訪問(wèn). 這里使用清華大學(xué)的鏡像服務(wù)
cd ~
mkdir .pip
cd .pip
cat -e "[global]\nindex-url = https://pypi.tuna.tsinghua.edu.cn/simple" > pip.config
  1. 安裝 uwsgi
  2. 安裝 python-dev
    安裝 uwsgi 過(guò)程中, 需要編譯, 要先安裝 python 開(kāi)發(fā)板
sudo apt-get install python3-dev
  1. 安裝 gcc
    安裝 uwsgi 需要一個(gè) C 編譯器, 所以還需要安裝一個(gè) gcc
sudo apt-get install gcc
  1. 安裝 uwsgi
    一切準(zhǔn)備妥當(dāng)就可以安裝 uwsgi 了
sudo pip3 install uwsgi

可以使用 uwsgi --version 來(lái)檢查是否正確安裝了

  1. 測(cè)試 uwsgi
    創(chuàng)建一個(gè) test.py 文件測(cè)試
    內(nèi)容如下
# test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

在這個(gè)文件的目錄內(nèi)運(yùn)行命令

uwsgi --http :8000 --wsgi-file test.py

打開(kāi)瀏覽器輸入服務(wù)器的 ip, 端口 8000 如果能看到 hello, world 就表安裝 uwsgi 成功了

  1. 安裝 django
sudo pip install django
  1. 創(chuàng)建一個(gè) django 項(xiàng)目用來(lái)測(cè)試
django-admin startproject Hello

現(xiàn)在的目錄結(jié)構(gòu)應(yīng)該是這樣的

Hello/ 
    manage.py 
    Hello/ 
        __init__.py 
        settings.py 
        urls.py 
        wsgi.py
  1. 編輯 setting.py
    如果你安裝的是1.10 以上的 django(可以運(yùn)行命令 django-admin --version 來(lái)查看版本), 并且你需要在另外一臺(tái)電腦上查看頁(yè)面, 你就一定要設(shè)置 ALLOWED_HOSTS
    找到 settting.py 中的
...
DEBUG = True
ALLOWED_HOSTS = []
...

在 ALLOWED_HOSTS 中填入服務(wù)器的 ip 地址.

...
DEBUG = True
ALLOWED_HOSTS = ["192.168.1.5"]
...
  1. 使用 django 內(nèi)置的服務(wù)器測(cè)試一下
    到項(xiàng)目的根目錄中運(yùn)行命令
python3 manage.py runserver

這個(gè)命令默認(rèn)運(yùn)行服務(wù)器在 8000 端口, 而且只會(huì)監(jiān)聽(tīng)來(lái)自本機(jī)(服務(wù)器)的請(qǐng)求
如果需要在服務(wù)器之外的電腦中瀏覽, 需改成這個(gè)命令

python3 manage.py runserver 0.0.0.0:8000

在瀏覽器中輸入服務(wù)器的地址加上端口, 就可以看到測(cè)試頁(yè)面了, 不過(guò)這個(gè)是用來(lái)開(kāi)發(fā)的測(cè)試服務(wù)器, 如果需要實(shí)際部署項(xiàng)目, 就不要用這個(gè)服務(wù)器了.

  1. 使用 uwsgi 測(cè)試 Django 項(xiàng)目
    在項(xiàng)目根目錄(有 manage.py 的目錄) 運(yùn)行
uwsgi --http :8000 --module Hello.wsgi

打開(kāi)瀏覽器輸入服務(wù)器的 ip, 端口 8000 如果能看到django 的測(cè)試頁(yè)面就表示 django 和 uwsgi 工作正常

  1. 安裝 nginx
sudo apt-get install nginx

安裝完畢,會(huì)自動(dòng)開(kāi)啟 nginx 服務(wù), 默認(rèn)端口80, 打開(kāi)瀏覽器, 輸入服務(wù)地址, 可以看到 nginx 的測(cè)試頁(yè)面

  1. 配置 nginx
    首先要將 uwsgi_params 文件拷貝到項(xiàng)目文件夾下. 拷貝過(guò)來(lái)后這個(gè)文件不用修改.
    原始的 uwsgi_params 文件在/etc/nginx/目錄下
    新創(chuàng)建一個(gè) nginx 配置文件, Hello_nginx.conf
    內(nèi)容如下
upstream django {
        server 127.0.0.1:8001;
}
server {
        # the port your site will be served on
        listen      8000; # 端口號(hào)
        # the domain name it will serve for
        server_name 10.0.9.176; # 服務(wù)器 ip 或是域名
        charset     utf-8;
    
        # Django media
        location /media  {
            alias /home/yww/djangotest/Hello/media; # 媒體文件所在文件夾
        }

        location /static {
            alias /home/yww/djangotest/Hello/static; # 靜態(tài)文件所在文件夾
        }
         # max upload size
        client_max_body_size 75M;   # adjust to taste

        # Finally, send all non-media requests to the Django server.
        location / {
            uwsgi_pass  django;
            include     /home/yww/djangotest/Hello/uwsgi_params; #uwsgi_params 路徑
        }
}

這個(gè)配置文件告訴 nginx 從文件系統(tǒng)中拉起 media 和 static 文件作為服務(wù)掖鱼,同時(shí)響應(yīng) django 的 request
在 /etc/nginx/sites-enabled 目錄下創(chuàng)建本文件的連接, 使 nginx能夠使用它:

sudo ln -s /home/yww/djangotest/Hello/Hello_nginx.conf /etc/nginx/sites-enabled/
  1. 部署靜態(tài)文件
    在 django 的 setting 文件中,添加下面一行內(nèi)容:
STATIC_ROOT = os.path.join(BASE_DIR, "static/")

然后運(yùn)行

python3 manage.py collectstatic
  1. 測(cè)試 nginx 靜態(tài)文件和媒體文件服務(wù)
    首先重啟nginx服務(wù):
service nginx restart

測(cè)試一下靜態(tài)文件是否可以讀取
訪問(wèn) http://<服務(wù)器 ip>:8000/static/admin/css/base.css 看看是否正常顯示這個(gè)文件
然后檢查media文件是否已經(jīng)正常
在項(xiàng)目根目錄下新建一個(gè) media 文件夾, 放入任意一張圖片, 名字改為test.jpg
訪問(wèn) http://<服務(wù)器 ip>:8000/media/test.jpg 看看是否正常顯示圖片

  1. 測(cè)試 nginx + uwsgi
    找到 第 6 步 創(chuàng)建的test.py, 放到 Django 項(xiàng)目根目錄下測(cè)試
    運(yùn)行命令
uwsgi --socket :8001 --wsgi-file test.py

訪問(wèn) http://<服務(wù)器 ip>:8000/
如果能夠顯示 hello, world 就行了

  1. 用 UNIX socket 取代 TCP port
    對(duì) Hello_nginx.conf 做如下修改
upstream django {
        #server 127.0.0.1:8001; # 去掉這行
        server unix:///home/yww/djangotest/Hello/Hello.sock; # 新建這行
}
...

然后重啟服務(wù)器, 并運(yùn)行 uWSGI, 代碼如下

service nginx restart
uwsgi --socket Hello.sock --wsgi-file test.py --chmod-socket=662
  1. 測(cè)試 nginx + uwsgi + django
    只需要啟動(dòng) uwsgi 就可以了, nginx 不需要重啟
uwsgi --socket Hello.sock --module Hello.wsgi --chmod-socket=662

訪問(wèn) http://<服務(wù)器 ip>:8000/
如果能夠顯示 django 的測(cè)試頁(yè)面就大功告成了

  1. 使用 ini 文件運(yùn)行 uwsgi
    上面的這個(gè)命令太長(zhǎng)了, 也很容易寫錯(cuò), 我們可以寫一個(gè)文件來(lái)方便運(yùn)行 uwsgi
    在項(xiàng)目根目錄下創(chuàng)建一個(gè) Hello_uwsgi.ini
# Hello_uwsgi.ini file
[uwsgi]
# Django-related settings
# the base directory (full path)
chdir           = /home/yww/djangotest/Hello
# Django's wsgi file
module          = Hello.wsgi
# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 10
# the socket (use the full path to be safe)
socket          = /home/yww/djangotest/Hello/Hello.sock
chmod-socket    = 662
# clear environment on exit
vacuum          = true

運(yùn)行 uwsgi 的時(shí)候就只需要運(yùn)行這個(gè)命令就行了

uwsgi --ini Hello_uwsgi.ini
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌迂曲,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異屑那,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門持际,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)沃琅,“玉大人,你說(shuō)我怎么就攤上這事蜘欲∫婷迹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵姥份,是天一觀的道長(zhǎng)郭脂。 經(jīng)常有香客問(wèn)我,道長(zhǎng)澈歉,這世上最難降的妖魔是什么展鸡? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮埃难,結(jié)果婚禮上娱颊,老公的妹妹穿的比我還像新娘。我一直安慰自己凯砍,他們只是感情好箱硕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著悟衩,像睡著了一般剧罩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上座泳,一...
    開(kāi)封第一講書(shū)人閱讀 51,754評(píng)論 1 307
  • 那天惠昔,我揣著相機(jī)與錄音,去河邊找鬼挑势。 笑死镇防,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的潮饱。 我是一名探鬼主播来氧,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼香拉!你這毒婦竟也來(lái)了啦扬?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤凫碌,失蹤者是張志新(化名)和其女友劉穎扑毡,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體盛险,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瞄摊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年勋又,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片换帜。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赐写,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出膜赃,到底是詐尸還是另有隱情挺邀,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布跳座,位于F島的核電站端铛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏疲眷。R本人自食惡果不足惜禾蚕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望狂丝。 院中可真熱鬧换淆,春花似錦、人聲如沸几颜。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蛋哭。三九已至县习,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谆趾,已是汗流浹背躁愿。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沪蓬,地道東北人彤钟。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像跷叉,于是被迫代替她去往敵國(guó)和親逸雹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

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