轉載註明出處,個人博客:http://www.cnblogs.com/wdfwolf3/ Django首要的部署平臺是WSGI,它是Python Web伺服器和應用的標準。使用Apache和mod_wsgi部署Django是一個使Django投入到生產環境中成熟的方式,mod_wsgi是一個Apac ...
轉載註明出處,個人博客:http://www.cnblogs.com/wdfwolf3/ Django首要的部署平臺是WSGI,它是Python Web伺服器和應用的標準。使用Apache和mod_wsgi部署Django是一個使Django投入到生產環境中成熟的方式,mod_wsgi是一個Apache模塊,它可以host任何Python WSGI應用。其他知名的模塊如mod_python和FastCGI,mod_python在Django1.5中被徹底刪除,FastCGI也不被支持並且在Django1.9中被刪除。下麵我們開始進行配置。
1.
從路徑/etc/apache2/下,打開文件apache2.conf,並加入下列代碼。第一行的第一個路徑為的基礎URL路徑,第二個路徑為你項目wsgi.py文件的完全路徑,這句話告訴Apache使用這個WSGI應用來響應這個URL下的任何請求。第二行為項目的路徑,確保你的項目可以被正確導入,第三行為wsgi.py所在文件夾的路徑,Directory部分是用來使Apache可以定位到wsgi.py文件。如果Apache版本低於2.4的話,將Require all granted替換為Allow from all併在它上面一行加入Order deny,allow。
WSGIScriptAlias / "/home/wdf/mysite/mysite/wsgi.py" WSGIPythonPath /home/wdf/mysite <Directory /home/wdf/mysite/mysite> <Files wsgi.py> Require all granted </Files> </Directory>
2.
如果從調試環境變為生產環境的話,還需要將DEBUG從True變為False。此時無法像之前那樣使用127.0.0.1打開網頁,需要更改一下項目的settings文件,打開django項目中的settings.py文件,加入下麵這行代碼,
ALLOWED_HOSTS = ['127.0.0.1']
列表中再加入一項‘localhost'也可以用來調試。
3.
如果啟動Apache(命令sudo service apache2 start)報錯,
AH00558: apache2: Could not reliably determine the server's fully qualified domain name,
using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
那就在配置文件apache2.conf中加入下麵這行代碼,
ServerName localhost
預設埠80,可以不寫。
4.Apache錯誤日誌error.log
此時我打開網頁依然不能訪問到我django項目,Apache正常啟動沒問題,那就需要打開錯誤日誌文件/var/log/apache2/error.log(如果路徑不同通過http://www.cnblogs.com/wdfwolf3/p/5438379.html的方法尋找),發現瞭如下錯誤,
[Wed Apr 27 11:30:42.632076 2016] [:error] [pid 10808:tid 140055750682368] [client ::1:60449]
SyntaxError: Non-ASCII character '\\xe5' in file /home/wdf/code/mysite/mysite/wsgi.py on line 15,
but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
這個比較常見了,編碼問題,我們回到wsgi.py文件中,文件開頭加入代碼即可解決。
#-*- coding:ut-8 -*-
5.配置靜態文件static
Django本身不能處理文件,它把這個工作交給了它使用的Web伺服器,在這裡我們就是用Apache來處理靜態文件。網路上很多方法,但是版本比較靠前,也比較雜,我針對1.9的官方文檔和自己的實踐來簡單實現顯示靜態圖片,至於更深入的內容以後我實現了再繼續更新。
在apache2.conf中加入代碼,同上面如果Apache版本低於2.4換成另外兩行代碼。
Alias /abc/ /home/wdf/mysite/app/static/ <Directory /home/wdf/mysite/app/static> Require all granted </Directory>
在這裡聲明別名/abc/就是你存放靜態文件的目錄,之所以使用abc(正常設置成/static/就很好)這麼沒有意義的名字,是為了說明後面的東西,防止混淆。在html模板中圖片的地址就可以使用這個別名,比如
<img src="/abc/WDF.JPG" />
當然在項目的settings.py文件中還要加一個定義,將static目錄的路徑賦給STATIC_URL
STATIC_URL = os.path.join(BASE_DIR, '/app/static/')