Ubuntu16.04下Nginx+uwsgi部署Django項目

之前寫了一篇Pycharm遠程調試django項目的漓雅,只是完成了Django項目在服務器上的運行毁嗦。而且當時是用的虛擬機鼠锈,有些坑并沒有遇到麸拄。前幾天買了阿里云的Linux服務器ubuntu16.04,一路搭建環(huán)境和部署過程搞了2天多特笋,可以說是神坑無數剃浇,最有意思的網上的很多博客是叫踩坑記錄,結果照著這些方式去搞出現(xiàn)了很多奇怪的問題,估計也和版本不同有關虎囚。這里為了避免少走一些彎路角塑,我就來記錄一下整個過程(這里都是默認root用戶遠程登錄下進行操作,項目名為DjangoTest)。

Python環(huán)境的配置

因為Python環(huán)境都是Linux系統(tǒng)上面自帶的淘讥,我這里項目用的設Python3.6圃伶,安裝的過程就不多說了,這里基本沒什么問題适揉,安裝好后只需把安裝目錄鏈接到系統(tǒng)自帶的python3(系統(tǒng)自帶的是Python3.5)即可留攒。本來這里應該沒什么問題的,但剛這個項目需要請求https的鏈接嫉嘀,因為在本地的時候會這里是不會出問題的炼邀,但是一旦放到服務器端,坑也就來了剪侮。請求時直接返回這么一句異常

SSLError("Can`t connect to HTTTPS URL because the SSL module is not available"))

可以看到用到是python中的ssl模塊不存在拭宁,直接去安裝好相應的openssl模塊后,還是拋出這個異常瓣俯。于是不停的去Google和百度杰标,過程中也是按照類似的答案,結果還是沒能解決這個問題彩匕。最后我就卸載了Python3.6, 直接用3.5的環(huán)境去運行腔剂,這個問題才得以解決。
具體應該是因為系統(tǒng)默認的是加載已存在的ssl模塊驼仪,用3.6版本的雖然也依賴了掸犬,但是并不會識別,發(fā)現(xiàn)不是來自默認Python環(huán)境中自帶的绪爸,就無法加載湾碎。這里感覺也是能配置的,但事實就是我不知道多少次的卸載重裝奠货,按照各種方式去安裝和依賴介褥,還是出現(xiàn)同樣的問題,好在3.6版本的項目在3.5上還是基本兼容的递惋,雖然暴力柔滔,但不失為一種辦法。(如果哪位有更好的解決辦法萍虽,歡迎給我留言)

這里完成后就是Python虛擬環(huán)境容器的安裝和環(huán)境變量的配置

pip install virtualenvwrapper

這里的話廊遍,因為之前寫過,就不多說了贩挣,可以參考我的之前的一篇博客Pycharm遠程調試Django項目

Mariadb的配置

本來不想寫數據庫的,但這里我也是第一次用Mariadb王财,并且在配置文件方面發(fā)生了一些變化卵迂,也踩了一些坑。
Mariadb是MySQL的一個分支绒净,開發(fā)者也是MySQL的作者见咒,所以Mariadb是完全兼容MySQL的基本命令的。
安裝

apt-get install mariadb-server

如果報本地不存在挂疆,就先更新下源

apt-get update

安裝完成后直接啟動服務

/etc/init.d/mysql start  
/etc/init.d/mysql stop
/etc/init.d/mysql restart

然后直接輸入mysql進入數據庫后

use mysql

更改mysql密碼

update user set Password = PASSWORD('你的密碼') where User ='root';

然后設置外部ip訪問權限

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的密碼' WITH GRANT OPTION;
FLUSH PRIVILEGES;

這里完成后 重啟一下 改览,然后還需要修改一下配置文件中綁定的地址

vim /etc/mysql/mariadb.conf.d/50-server.cnf

找到這一行



直接注釋掉就可以了。最后需要注意一下缤言,如果是用的阿里云的服務器就需要配置一下安全組規(guī)則宝当,開放3306端口。
這樣就能完成數據庫的遠程連接了胆萧。
注意:
如果Django項目中用到Mysql的話庆揩,需要在服務器端的Python虛擬環(huán)境下安裝一下

pip install mysqlclient

可能會安裝出錯,因為缺少一些依賴包跌穗,安裝一下

apt-get install libmysqlclient-dev

然后重新安裝mysqlclient订晌,這樣配置就完成了。

uwsgi的安裝和配置

uwsgi也是一種web服務器蚌吸,這里就不多介紹了锈拨,直接開始安裝

pip install uwsgi

可以先來測試一下

uwsgi --http 0:80 --module DjangoTest.wsgi

然后使用配置文件的方式來啟動django項目,可以直接在項目的目錄下新建一個uwsgi.ini文件

# mysite_uwsgi.ini file
[uwsgi]
# Django-related settings
# 項目根目錄的路徑
chdir           = /你的路徑/DjangoTest
# Django's wsgi file
module          = DjangoTest.wsgi
# the virtualenv (full path)

# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 10
# the socket (use the full path to be safe
socket          = :8000
# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true
# 虛擬環(huán)境的目錄
pythonpath = /你的虛擬環(huán)境的路徑/lib/python3.6/site-packages/

配置文件寫好后,其實我們是可以直接用uwsgi就能完成部署的羹唠,使用命令

uwsgi -i uwsgi.ini

如果端口號被占用奕枢,就直接使用命令查看占用情況

lsof -i :8000

然后使用命令,銷毀這些進程

killall -9 uwsgi

但是為了提高擴展性肉迫,我們繼續(xù)下面的步驟

Nginx的安裝與配置

nginx是一個強大的中間件验辞,我們直接把它作為對外的服務接口。
開始安裝

apt-get install nginx

然后看看啟動喊衫、停止和重啟命令

/etc/init.d/nginx start
/etc/init.d/nginx stop
/etc/init.d/nginx reload

這里注意跌造,其它配置文件不要亂改!如果安裝完成不能正常啟動的話可以重啟服務器看看族购。沒問題的話壳贪,我們可以在項目目錄下新建一個nginx.conf文件,然后按照下面的方式配置

# the upstream component nginx needs to connect to
upstream django {
#django項目的端口號 和uwsgi里面的端口號保存一致
server 0.0.0.0:8000; # for a web port socket (we'll use this first)
}
# configuration of the server

server {
# nginx服務的端口號 不用修改
listen 80;
# the domain name it will serve for
# 這里可以填寫你的ip地址或者域名
server_name www.test.com;
charset     utf-8;

# max upload size
client_max_body_size 75M;   # adjust to taste

# Django media
location /media  {
    alias /你的路徑/DjangoTest/media;  # 指向django的media目錄
}

location /static {
    alias /你的路徑/DjangoTest/static; # 指向django的static目錄
}

# Finally, send all non-media requests to the Django server.
location / {
    uwsgi_pass  django;
    include     uwsgi_params; # the uwsgi_params file you installed
}
}

配置寫好后寝杖,就需要把它鏈接到Nginx的啟動配置文件中违施,

ln -s /你的目錄/DjangoTest/nginx.conf  /etc/nginx/conf.d/

配置完成后,再去加載一下uwsgi文件瑟幕。

總結

配置好后磕蒲,直接輸入IP地址或者解析到該IP的域名就能成功訪問到Django項目了留潦,這樣你也會發(fā)現(xiàn),通過nginx我們可以輕松地配置和部署多個環(huán)境不同的站點辣往,只需要把配置文件寫好后放入nginx的啟動文件中兔院。
最后來整理一下整個訪問的過程

1.使用nginx作為外部接口,直接處理發(fā)送過來的請求站削,如果是靜態(tài)請求坊萝,就直接根據配置的靜態(tài)文件目錄,返回相應的靜態(tài)資源许起。
2.如果是動態(tài)請求十偶,就通過配置文件將請求轉移到uwsgi,uwsgi又會將接受到的請求傳遞給wsgi(Django項目默認通過wsgi啟動服務的)园细,wsgi就會根據請求來調用Django項目中的邏輯來處理請求惦积。
3.處理完成后,又將結果返回給uwsgi珊肃,然后uwsgi又繼續(xù)將結果返回給nginx
4.最后Nginx將處理后的結果返回給用戶

雖然過程中遇到很多坑荣刑,但在多次的嘗試中更能加深自己的經驗和理解。
最后伦乔,祝大家在新的一年里厉亏,技術節(jié)節(jié)高升!A液汀爱只!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市招刹,隨后出現(xiàn)的幾起案子恬试,更是在濱河造成了極大的恐慌,老刑警劉巖疯暑,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件训柴,死亡現(xiàn)場離奇詭異,居然都是意外死亡妇拯,警方通過查閱死者的電腦和手機幻馁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來越锈,“玉大人仗嗦,你說我怎么就攤上這事「势荆” “怎么了稀拐?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長丹弱。 經常有香客問我德撬,道長铲咨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任砰逻,我火速辦了婚禮鸣驱,結果婚禮上,老公的妹妹穿的比我還像新娘蝠咆。我一直安慰自己,他們只是感情好北滥,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布刚操。 她就那樣靜靜地躺著,像睡著了一般再芋。 火紅的嫁衣襯著肌膚如雪菊霜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天济赎,我揣著相機與錄音鉴逞,去河邊找鬼。 笑死司训,一個胖子當著我的面吹牛构捡,可吹牛的內容都是我干的。 我是一名探鬼主播壳猜,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼勾徽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了统扳?” 一聲冷哼從身側響起喘帚,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎咒钟,沒想到半個月后吹由,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡朱嘴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年倾鲫,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腕够。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡级乍,死狀恐怖,靈堂內的尸體忽然破棺而出帚湘,到底是詐尸還是另有隱情玫荣,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布大诸,位于F島的核電站捅厂,受9級特大地震影響贯卦,放射性物質發(fā)生泄漏。R本人自食惡果不足惜焙贷,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一撵割、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辙芍,春花似錦啡彬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吃衅,卻和暖如春往踢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背徘层。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工峻呕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人趣效。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓瘦癌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親英支。 傳聞我的和親對象是個殘疾皇子佩憾,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內容