最近使用Django開(kāi)發(fā)一個(gè)小程序和后臺(tái)管理系統(tǒng) 强经,需要將這兩個(gè)不同的項(xiàng)目部署到同一個(gè)服務(wù)里面,然后使用不同的域名來(lái)訪(fǎng)問(wèn)不同的項(xiàng)目寺渗。Django默認(rèn)的只支持單服務(wù)訪(fǎng)問(wèn)匿情,要想實(shí)現(xiàn)不同域名,需要安裝django的第三方擴(kuò)展包:django-hosts信殊。
本文通過(guò)一個(gè)簡(jiǎn)單的demo來(lái)給演示炬称, 看本文的前提是需要對(duì)django有一定的認(rèn)識(shí),對(duì)項(xiàng)目環(huán)境的搭建以及Nginx有一定的了解涡拘。
一.搭建環(huán)境與項(xiàng)目:
平時(shí)習(xí)慣使用Anconda來(lái)管理Python包玲躯,所以本文也使用anconda管理環(huán)境,當(dāng)然大家要是習(xí)慣使用virtuallen管理環(huán)境也沒(méi)有問(wèn)題鲸伴。本文主要是演示怎么完整搭建一個(gè)單服務(wù)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)的流程府蔗,不涉及具體的業(yè)務(wù)流程晋控。
由于生成django項(xiàng)目需要先下載django包汞窗,所以我們先創(chuàng)建一個(gè)基本的虛擬環(huán)境,然后在虛擬環(huán)境中通過(guò)具體命令來(lái)生成項(xiàng)目文件赡译。
1仲吏、環(huán)境搭建:applite_web
conda create --name applite_web
創(chuàng)建完虛擬環(huán)境applite_web了,現(xiàn)在需要下載一些依賴(lài)包蝌焚。這里只需要單獨(dú)安裝django與django-hosts即可裹唆。
2、創(chuàng)建項(xiàng)目:applite_web
django-admin.py startproject applite_web
3只洒、創(chuàng)建app
說(shuō)明2點(diǎn):
- 根據(jù)項(xiàng)目的需要许帐,將原來(lái)Django項(xiàng)目結(jié)構(gòu)做了調(diào)整
- 至于創(chuàng)建4個(gè)app的用法后邊會(huì)具體涉及到
下面截圖是創(chuàng)建本文Demo項(xiàng)目結(jié)構(gòu),當(dāng)然這也是比較簡(jiǎn)單的一個(gè)項(xiàng)目結(jié)構(gòu)毕谴,實(shí)際項(xiàng)目開(kāi)發(fā)中成畦,還需要配置別的參數(shù)與文件距芬。
二. 在applite_web中配置django-hosts
創(chuàng)建好虛擬環(huán)境和項(xiàng)目之后,接下來(lái)重點(diǎn)就是在django中配置多域名循帐。為了方便起見(jiàn)框仔,本文只演示2個(gè)域名,多個(gè)域名按照2個(gè)域名的方式增加就行拄养。
1离斩、首先在settins.py同級(jí)增加一個(gè)hosts.py文件,配置如下:
2瘪匿、然后在django的settings配置文件增加3處配置:
在INSTALLED_APPS中增加下面幾個(gè)
需要在 MIDDLEWARE 的首行和末行增加2行配置
在ROOT_URLCONF下行增加如下2行參數(shù)配置
三. 配置url和view
上邊兩步操作完成跛梗,接下來(lái)就需要去app文件夾下,編寫(xiě)對(duì)應(yīng)的url和view棋弥。本文是演示2個(gè)域名茄袖,同時(shí)考慮到一般單個(gè)項(xiàng)目會(huì)有多個(gè)模塊,所以還需要分別配置兩個(gè)url嘁锯。具體的配置如下:
1宪祥、分別在app_1、app_2文件夾下創(chuàng)建urls.py文件家乘,并且增加對(duì)應(yīng)的url,代碼如下:
app_1的urls.py文件如下:
app_2的urls.py文件如下
2蝗羊、然后在app_1_demo、app_2_demo中分別增加對(duì)應(yīng)的url和views函數(shù)
在app_1中匹配成功之后仁锯,會(huì)直接跳轉(zhuǎn)到app_1_demo的urls耀找,再根據(jù)當(dāng)前的匹配跳轉(zhuǎn)當(dāng)前的views函數(shù)
1)、首先匹配app_1_demo的urls的路由:
2)业崖、urls匹配成功之后野芒,跳轉(zhuǎn)這里的視圖函數(shù),并返回響應(yīng)
同理双炕,app_2匹配成功之后狞悲,會(huì)直接跳轉(zhuǎn)到app_2_demo的urls,再根據(jù)當(dāng)前的匹配跳轉(zhuǎn)當(dāng)前的views函數(shù)
1)妇斤、首先匹配app_2_demo的urls的路由摇锋,匹配如下:
2)、urls匹配成功之后站超,跳轉(zhuǎn)這里的視圖函數(shù)荸恕,并返回響應(yīng)
四.域名綁定與測(cè)試
經(jīng)過(guò)上邊三步的操作,已經(jīng)完成了一個(gè)基本的演示功能死相。本文目的是通過(guò)Nginx負(fù)載單服務(wù)后融求,在一個(gè)服務(wù)里面來(lái)實(shí)現(xiàn)不同域名的訪(fǎng)問(wèn),所以在配置uwgi和Nginx參數(shù)算撮,還需要綁定域名生宛。
1施掏、這里是在同一個(gè)局域網(wǎng)下通過(guò)兩臺(tái)機(jī)器實(shí)現(xiàn)用戶(hù)的訪(fǎng)問(wèn):
訪(fǎng)問(wèn)機(jī)器IP: 192.168.2.17, 部署服務(wù)的IP: 192.168.2.200茅糜。在實(shí)際生產(chǎn)需要購(gòu)買(mǎi)真實(shí)的域名七芭,這里作為演示,可以通過(guò)在本機(jī)綁定服務(wù)器的ip的方式來(lái)實(shí)現(xiàn)對(duì)另一臺(tái)機(jī)器服務(wù)的訪(fǎng)問(wèn)蔑赘,具體修改如下:
2狸驳、綁定完之后,然后將本項(xiàng)目放到192.168.2.200機(jī)器上缩赛,測(cè)試當(dāng)前的服務(wù)配置沒(méi)有問(wèn)題耙箍。
項(xiàng)目放置路徑為: /home/yxy/payneli/applite_web/
進(jìn)入app文件夾下,然后運(yùn)行項(xiàng)目酥馍,命令如下:
python manage.py runserver 192.168.2.200:8000
瀏覽器輸入:app1.cc:8000/app1/辩昆,如果瀏覽器顯示如下結(jié)果,說(shuō)明項(xiàng)目配置與域名綁定成功
五.uwsgi參數(shù)配置與測(cè)試
前邊幾步成功之后旨袒,接下來(lái)就是配置uwsgi的參數(shù)汁针。熟悉Python后臺(tái)開(kāi)發(fā)的都應(yīng)該清楚,開(kāi)發(fā)的時(shí)候使用的 python manage.py runserver 來(lái)運(yùn)行服務(wù)器砚尽,這只適用開(kāi)發(fā)時(shí)的代碼調(diào)試施无,而實(shí)際項(xiàng)目部署的話(huà),django內(nèi)置的服務(wù)根本無(wú)法滿(mǎn)足需求必孤。而Uwsgi作為Python服務(wù)器不僅可以提供穩(wěn)定的服務(wù)猾骡,同時(shí)還可以提供大的并發(fā)量,所以在后臺(tái)開(kāi)發(fā)中敷搪,用的比較多兴想。
1、在項(xiàng)目文件夾下赡勘,創(chuàng)建一個(gè)uwsgi文件夾嫂便。進(jìn)入該文件夾,創(chuàng)建uwsgi.ini文件狮含,里面的配置參數(shù)如下:
2顽悼、配置完成后,運(yùn)行下面的命令几迄,啟動(dòng)服務(wù)。
# 在項(xiàng)目路徑下冰评,啟動(dòng)服務(wù)命令如下:
uwsgi --ini ./uwsgi/uwsgi.ini
啟動(dòng)完成后映胁,uwsgi文件夾里面就會(huì)多出兩個(gè)文件:uwsgi.pid uwsgi.sock
然后查看當(dāng)前服務(wù)是否啟動(dòng)成功:
# 命令如下
ps -ef|grep uwsgi
當(dāng)顯示如下圖所示的時(shí)候,說(shuō)明uwsgi已經(jīng)將項(xiàng)目啟動(dòng)成功
3甲雅、瀏覽器測(cè)試服務(wù)是否正常:
在瀏覽為直接輸入:app1.cc:8000/app1/,如果顯示如下解孙,說(shuō)明uwsgi配置成功
六. Nginx配置與測(cè)試
如果前邊5步?jīng)]有問(wèn)題的話(huà)坑填,那么恭喜你,就差最后一步就可以完成本demo的演示了〕诮現(xiàn)在就開(kāi)始最后一步脐瑰,配置Nginx參數(shù)。
1廷臼、首先安裝Nginx苍在,本文對(duì)nginx安裝不做講解,畢竟網(wǎng)上教程那么多荠商,可以找一個(gè)好的教程照著操作就可以寂恬。小編將Nginx安裝為默認(rèn)路徑,在:/usr/local/nginx莱没,進(jìn)入此文件下初肉,直接命令行啟動(dòng)。
/usr/local/nginx/sbin/nginx
查看Nginx是否啟動(dòng)成功饰躲,命令如下:
ps -ef|grep nginx
顯示如下圖牙咏,說(shuō)明Nginx啟動(dòng)成功
瀏覽器輸入:app1.cc,顯示如下所示嘹裂,說(shuō)明Nginx安裝成功
2眠寿、檢查Nginx配置沒(méi)有問(wèn)題之后,就是配置多域名了焦蘑。
注釋掉Nginx原有的配置server
增加如下一行參數(shù)盯拱,主要是為了方便單獨(dú)增加配置app1.cc、與app2.cc兩個(gè)域名的文件
分別在 /usr/nginx/conf/文件加下例嘱,創(chuàng)建一個(gè)新的multihosts文件夾狡逢,進(jìn)入該文件夾分別新建 app1.cc.conf、app2.cc.conf文件拼卵,具體的配置參數(shù)如下:
app1.cc.conf配置如下:
app2.cc.conf配置如下:
3奢浑、多域名的參數(shù)配置完成,但是此刻不要忘了腋腮,當(dāng)使用Nginx作為負(fù)載均衡時(shí)候雀彼,需要將uwsgi.ini里面的參數(shù)http改為socket具體如下:
4、到這里本文的參數(shù)已經(jīng)配置完成即寡,然后我們需要重新自動(dòng)Nginx徊哑,查看顯示如上邊啟動(dòng)效果,說(shuō)明啟動(dòng)成功聪富,接下來(lái)就是瀏覽器檢測(cè)多域名配置是否正確:
分別輸入:app1.cc莺丑、app2.cc顯示結(jié)果如下,說(shuō)明多域名已經(jīng)配置成功
到此為止,單服務(wù)實(shí)現(xiàn)多域名訪(fǎng)問(wèn)已經(jīng)演示完成梢莽。當(dāng)然萧豆,本文只是做了一個(gè)簡(jiǎn)單的demo版本,而實(shí)際項(xiàng)目開(kāi)發(fā)的過(guò)程中昏名,還需要根據(jù)實(shí)際需要評(píng)估涮雷,決定到底是nginx后臺(tái)負(fù)載多服務(wù),還是nginx負(fù)載單服務(wù)映射多域名轻局。