【Django】如何在apache上部署Django項(xiàng)目

根據(jù)官方描述,Django是一個(gè)web框架,而不是一個(gè)web服務(wù),因此計(jì)劃在apache部署Django項(xiàng)目

軟件及環(huán)境信息

? ? python3

? ? Django v1.11.8

? ? Apache v2.4.18

? ? libapache2-mod-wsgi-py3

? ? Ubuntu 16.04.4

安裝 apache2 和 mod_wsgi

mod_wsgi是一個(gè)Apache模塊,可以托管任何Python WSGI應(yīng)用程序,包括Django, Django能使用支持mod_wsgi的任何Apache版本。

另外之所以選擇mod_wsgi,而不使用mod_python,主要有2點(diǎn):

? ? 1. 高版本的Django已經(jīng)不再支持mod_python,而用mod_wsgi不影響以后的編碼;

? ? 2. 性能更好

執(zhí)行安裝

? ? sudo apt-get install apache2

? ? sudo apt-get install libapache2-mod-wsgi-py3

小提示:

? ? 查看apache版本: apachectl -v

? ? 對(duì)于python2用戶,安裝libapache2-mod-wsgi

檢查項(xiàng)目配置文件

部署在生產(chǎn)環(huán)境,特別需要檢查安全設(shè)置、資源訪問策略等,官方提供了一份檢查清單,見部署前的checklist,通過執(zhí)行python3 manage.py check --deploy 可得到檢測(cè)報(bào)告,在此之前,需要注意:

? ? DEBUG,默認(rèn)是True,當(dāng)報(bào)錯(cuò)時(shí)可得到詳情,部署在生產(chǎn)環(huán)境,容易暴露關(guān)鍵信息,因此一定記得設(shè)置為False

? ? ALLOWED_HOSTS ,限制請(qǐng)求中的host,以防止黑客構(gòu)造包來發(fā)送請(qǐng)求,只有在列表中的host才能通過,另外當(dāng)設(shè)置DEBUG=False時(shí),必須設(shè)置,否則報(bào)錯(cuò)

? ? STATIC_ROOT ,部署在生產(chǎn)環(huán)境,必須配置,然后通過執(zhí)行collectstatic 收集所有的靜態(tài)資源到該環(huán)境中,否則會(huì)發(fā)現(xiàn)找不到資源而報(bào)404錯(cuò)誤

? ? ? STATIC_URL,可理解成訪問靜態(tài)文件的URL前綴,類似別名,可簡短使用

? ? ? MEDIA_ROOT 和 MEDIA_URL,定義用戶上傳文件的路徑,對(duì)于上傳的文件,本身是不可信任的,例如上傳一個(gè).php 文件,服務(wù)器不應(yīng)該執(zhí)行

? ? ADMINS,是一個(gè)二元元組,記錄開發(fā)人員的姓名和email,當(dāng)view發(fā)生500錯(cuò)誤時(shí)通知

? ? AUTH_USER_MODEL,如果使用了auth的User的擴(kuò)展對(duì)象,需要告訴程序User模型在哪里,即引引用app.model形式

如何在Apache和mod_wsgi中使用Django

在/etc/apache2/sites-available目錄下(centos 用戶在 /etc/httpd目錄)新建網(wǎng)站配置文件,這里取名:myDjangoProject.conf

<VirtualHost *:80>#網(wǎng)站端口

? ? ServerName? *? #My site Name

? ? WSGIDaemonProcess * python-path=*? #Demon process for multiple virtual hosts

? ? WSGIScriptAlias / *#Pointing wsgi script to config file

? ? WSGIProcessGroup *

? ? #Your static files location

? ? Alias /static * #django對(duì)應(yīng)STATIC_ROOT路徑

? ? Alias /media? *? #django對(duì)應(yīng)MEDIA_ROOT路徑

? ? <Directory *> #對(duì)靜態(tài)資源文件的授權(quán)

? ? ? Require all granted

? ? </Directory>

? <Directory *>

? ? Require all granted

? </Directory>

? <Directory * >#項(xiàng)目目錄

? ? <Files wsgi.py>

? ? #Order deny,allow? aphache 2.2.* use

? ? #Allow from all

? ? Require all granted

? ? </Files>

</Directory>

????ErrorLog? *#定義錯(cuò)誤日志文件

????CustomLog *?common #定義接口請(qǐng)求記錄文件?

</VirtualHost>

設(shè)置目錄及文件權(quán)限

一般目錄權(quán)限設(shè)置為 755,文件權(quán)限設(shè)置為 644

? ? 設(shè)置項(xiàng)目權(quán)限(假設(shè)項(xiàng)目為mysite)

? ? sudo chmod -R 644 mysite

? ? sudo find mysite -type d -exec chmod 755 \{\} \;

/etc/apache2/envvars 是apache程序的參數(shù)配置文件,通過文件中的

????export APACHE_RUN_USER=www-data

????export APACHE_RUN_GROUP=www-data

可知,apache的用戶和組為www-data,上傳靜態(tài)資源時(shí),需要將文件夾授權(quán)為該組,否則會(huì)被拒絕

????設(shè)置上傳文件夾目錄【-R,包括子文件夾,因?yàn)樾枰獎(jiǎng)討B(tài)創(chuàng)建文件夾,所以使用了-R】

? ? sudo chgrp -R www-data **

? ? sudo chmod -R g+w **

激活新網(wǎng)站

????sudo a2ensite myDjangoProject或 sudo a2ensite myDjangoProject.conf#前面的編輯好的網(wǎng)站配置文件

重啟apache

????service apache2 restart

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容