django+nginx+uwsgi進行服務器部署

  • django的服務器配置可以說是十分繁瑣的部分
  • 哪怕嚴格按照步驟也會有不明錯誤
  • 再此詳細記錄操作步驟
  • 版本Ubuntu 16.04 LTS 64位
  • 服務器:騰訊云學生機
  • 由于配置繁瑣,所以操作步驟于全新系統(tǒng)進行配置

準備django文件

  • 由于已經(jīng)有過django項目防症,所以直接將django上傳至服務器
  • 目錄樹如下:
ubuntu@VM-246-186-ubuntu:~/site$ tree Blog
Blog
├── Blog
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-36.pyc
│   │   ├── settings.cpython-36.pyc
│   │   ├── urls.cpython-36.pyc
│   │   └── wsgi.cpython-36.pyc
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── db.sqlite3
├── manage.py
├── myblog
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   ├── 0001_initial.py
│   │   ├── __init__.py
│   │   └── __pycache__
│   │       ├── 0001_initial.cpython-36.pyc
│   │       └── __init__.cpython-36.pyc
│   ├── models.py
│   ├── __pycache__
│   │   ├── admin.cpython-36.pyc
│   │   ├── __init__.cpython-36.pyc
│   │   ├── models.cpython-36.pyc
│   │   ├── urls.cpython-36.pyc
│   │   └── views.cpython-36.pyc
│   ├── static
│   │   └── myblog
│   │       ├── css
│   │       │   ├── semantic.css
│   │       │   └── themes
│   │       │       └── default
│   │       │           └── assets
│   │       │               ├── fonts
│   │       │               │   ├── brand-icons.eot
│   │       │               │   ├── brand-icons.svg
│   │       │               │   ├── brand-icons.ttf
│   │       │               │   ├── brand-icons.woff
│   │       │               │   ├── brand-icons.woff2
│   │       │               │   ├── icons.eot
│   │       │               │   ├── icons.otf
│   │       │               │   ├── icons.svg
│   │       │               │   ├── icons.ttf
│   │       │               │   ├── icons.woff
│   │       │               │   ├── icons.woff2
│   │       │               │   ├── outline-icons.eot
│   │       │               │   ├── outline-icons.svg
│   │       │               │   ├── outline-icons.ttf
│   │       │               │   ├── outline-icons.woff
│   │       │               │   └── outline-icons.woff2
│   │       │               └── images
│   │       │                   └── flags.png
│   │       └── js
│   │           ├── jquery-3.3.1.js
│   │           ├── jquery-3.3.1.min.js
│   │           ├── semantic.js
│   │           └── vue.js
│   ├── tests.py
│   ├── urls.py
│   └── views.py
└── templates
    └── myblog
        ├── detail.html
        └── index.html
  • 目錄樹不必在意房匆,主要操作的文件為manage.py

配置環(huán)境

安裝依賴

  • Ubuntu系統(tǒng)默認為python2赢底,但是這里測試的django版本為2.0以上榆浓,需要python3版本來安裝
  • 為了防止打亂系統(tǒng)環(huán)境影涉,還需要virtualenv進行管理python環(huán)境
sudo apt-get install python3-pip
sudo pip install virtualenv
  • 準備就緒之后進行創(chuàng)建新環(huán)境
virtualenv env27 --python=python3.5
#其中env27為環(huán)境名稱莱褒,自己替換
  • 進入新環(huán)境
source test/bin/activate
  • 由于我的django項目中包含了django-suit以及markdown提佣,所以在運行django前需要提前準備完這兩個包
(test) ubuntu@VM-246-186-ubuntu:~/site$ pip install django django-suit markdown

進行django測試

  • 在云服務器上部署確保安全組端口已經(jīng)開放
  • 確保是在虛擬環(huán)境當中肚吏,注意命令行前的test

配置setting文件

  • 首先要讓服務器知道靜態(tài)文件的位置以及允許訪問的ip
  • 進入Blog目錄中方妖,編輯setting.py文件
#找到ALLOWED_HOSTS = []
#將其配置為
ALLOWED_HOSTS = ['*']
#配置靜態(tài)文件目錄,在文件尾部直接添加
STATIC_ROOT = os.path.join(BASE_DIR , "static/")
#找到DEBUG = True罚攀,改為False党觅,亦可最后再來改動方便定位錯誤
DEBUG = False
  • 配置完畢之后雌澄,回到根目錄執(zhí)行收集靜態(tài)文件操作
python manage.py collectstatic
  • 可以看到在目錄當中生成了一個static的文件夾,該文件夾包含了網(wǎng)站的全部靜態(tài)文件

登錄網(wǎng)站測試

  • 在項目根目錄處運行服務器測試命令杯瞻,確保8001端口未被占用镐牺,如果被占用需手動指定端口號
python manage.py runserver 0.0.0.0 8001
  • 如果一切順利的話,應該可以通過IP進行直接訪問網(wǎng)站
  • 在瀏覽器輸入IP地址+端口號進行服務器測試
  • 可以觀察到網(wǎng)站可以進入魁莉,并且CSS樣式加載正常

安裝uwsgi

  • 由于前面環(huán)境已經(jīng)配置妥當任柜,安裝uwsgi只需要一句命令,請確保在虛擬環(huán)境當中
pip install uwsgi
  • 在網(wǎng)站根目錄下執(zhí)行
uwsgi --http :8001 --plugin python --module Blog.wsgi
# 其中Blog.wsgi需要自行替換成自己的網(wǎng)站名字(使用startproject創(chuàng)建的網(wǎng)站名)沛厨,比如自己的網(wǎng)站為Test宙地,則修改為Test.wsgi
  • 通過訪問IP地址加端口號進行測試,例如118.25.3.239:8001(例子虛擬逆皮,自行替換IP)
  • 如果訪問正常我們應該看到的是不帶CSS樣式的界面

配置uwsgi文件

  • 為了讓服務器可以運行宅粥,我們需要手動在根目錄創(chuàng)建一個uwsgi.ini的文件
  • 內(nèi)容如下:
[uwsgi]
#chidr用于指定自己的網(wǎng)站根目錄(自行更改)
chdir =  /home/ubuntu/Blog
#module指定網(wǎng)站中APP的文件(自行更改)
module = Blog.wsgi
#home用于指定python的虛擬環(huán)境,即我們最初創(chuàng)建的虛擬環(huán)境位置(自行更改)
home = /home/ubuntu/env27
#master不用更改
master = true
#socket用于指定端口號电谣,可以不更改
socket = :8001
#以下兩個可以不用更改
chmod-socket = 666
vacuum = true
  • 配置完內(nèi)容之后可以在shell中運行秽梅,并訪問網(wǎng)站觀察十分成功運行
sudo uwsgi --ini uwsgi.ini

配置nginx

  • 安裝過程很簡單,一句命令
sudo apt-get install nginx
  • nginx安裝完默認是啟動的剿牺,可以通過直接在瀏覽器訪問ip的方式觀察到nginx的歡迎界面
  • 這里我原先使用的Chrome瀏覽器企垦,不知為何會強制重定向到https,導致網(wǎng)站無法訪問
  • 更換瀏覽器以后訪問便正常了
  • 推薦使用edge或者自帶的ie進行簡單的測試
  • nginx默認會讀取/etc/nginx/sites-enabled/default文件中的配置晒来,修改其中配置如下:
upstream django {
        server 127.0.0.1:8001; #此處端口可以替換钞诡,需與uwsgi.ini之中的端口一致
}
server {
        listen 80;
        server_name 118.25.3.239; #此處需要自行替換成自己的IP地址
        charset utf-8;
        client_max_body_size 75M;
        #django配置文件
        location /static {
                alias /home/ubuntu/Blog/static; #此處需要自行替換為網(wǎng)站根目錄下的靜態(tài)文件夾
        }
        #以下不必改動
        location / {
                uwsgi_pass django;
                include /etc/nginx/uwsgi_params;
        }
}

重啟服務器

  • 一切配置完畢之后,執(zhí)行命令
sudo /etc/init.d/nginx restart
  • 瀏覽器中輸入IP即可發(fā)現(xiàn)網(wǎng)站成功構建完畢

參考文章及視頻

文章

視頻

2019.5.17后續(xù)更新

  1. 近期在部署時發(fā)現(xiàn)荧降,如果在自己的程序當中,使用了python的多線程攒读,需要在uwsgi.ini文件當中加入enable-threads=True參數(shù)
  2. 在部署的時候朵诫,使用uwsgi --ini讀取配置的時候,出現(xiàn)了無法訪問的情況薄扁,并且報出如下錯誤
  • invalid request block size: 21573 (max 4096)...skip

因此我們在測試時剪返,需要修改配置文件中的socket為http,正式部署到nginx時再修改回socket邓梅,如下

[uwsgi]
...省略
socket = :8001 => http = :8001
...省略
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脱盲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子震放,更是在濱河造成了極大的恐慌宾毒,老刑警劉巖驼修,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件殿遂,死亡現(xiàn)場離奇詭異诈铛,居然都是意外死亡,警方通過查閱死者的電腦和手機墨礁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門幢竹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人恩静,你說我怎么就攤上這事焕毫。” “怎么了驶乾?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵邑飒,是天一觀的道長。 經(jīng)常有香客問我级乐,道長疙咸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任风科,我火速辦了婚禮撒轮,結果婚禮上,老公的妹妹穿的比我還像新娘贼穆。我一直安慰自己题山,他們只是感情好,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布故痊。 她就那樣靜靜地躺著顶瞳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪愕秫。 梳的紋絲不亂的頭發(fā)上浊仆,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天,我揣著相機與錄音豫领,去河邊找鬼抡柿。 笑死,一個胖子當著我的面吹牛等恐,可吹牛的內(nèi)容都是我干的洲劣。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼课蔬,長吁一口氣:“原來是場噩夢啊……” “哼囱稽!你這毒婦竟也來了?” 一聲冷哼從身側響起二跋,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤战惊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后扎即,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吞获,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡况凉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了各拷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刁绒。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖烤黍,靈堂內(nèi)的尸體忽然破棺而出知市,到底是詐尸還是另有隱情,我是刑警寧澤速蕊,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布嫂丙,位于F島的核電站,受9級特大地震影響规哲,放射性物質(zhì)發(fā)生泄漏奢入。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一媳叨、第九天 我趴在偏房一處隱蔽的房頂上張望腥光。 院中可真熱鬧,春花似錦糊秆、人聲如沸武福。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捉片。三九已至,卻和暖如春汞舱,著一層夾襖步出監(jiān)牢的瞬間伍纫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工昂芜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留莹规,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓泌神,卻偏偏與公主長得像良漱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子欢际,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

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