1. 程式人生 > >把Django專案部署到Apache上

把Django專案部署到Apache上

部署環境:
本地為win10+python3+Mysql+Django自帶伺服器
雲端為阿里雲Ubuntu+python2.7+Mysql+Apache

①首先遇到的問題:瀏覽器直接訪問,沒有迴應,瀏覽器無限菊花,很明顯,這是雲伺服器沒有配置好安全組的原因,阿里雲預設的安全組為:


裡面並沒有我們熟悉的80、8080等埠,所以我們手動加上自己想要的埠(Django預設埠8000)

②然後繼續使用瀏覽器訪問,提示500,終端連線伺服器檢視error log得知Apache無法識別Django,不用多說,肯定是配置檔案的鍋了,結合網上的教程(比如這個http://code.ziqiangxuetang.com/django/django-deploy.html),修改版本專案目錄下的wsgi.py。

import os
 
from django.core.wsgi import get_wsgi_applicationPROJECT_DIR = dirname(dirname(abspath(__file__)))
import sys
sys.path.insert(0,PROJECT_DIR)
 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "helloworld.settings")
 
application = get_wsgi_application()
成功修復。
③再次訪問仍然提示500,error顯示了一個很奇怪的錯誤,“django cannot be loaded as Python module”,想了想應該是django模組的問題,但是使用pip重新安裝提示已經是最新版。。。嘗試直接使用python shell輸入import django,報了一樣的錯,之後檢視python版本,真叫人頭大,Ubuntu自帶python是2.7版本,而我安裝了py3版本的mod_wsgi。。。重灌,修復。
④還是500,“RuntimeError: populate() isn’t reentrant”查閱Stack Overflow,開啟了兩個Django???    reboot修復。
⑤最後遇到的問題,在開啟的Django的debug模式下,瀏覽器訪問提示“DisallowedHost at / Invalid HTTP_HOST header:”,這個簡單,在setting.py中修改為ALLOWED_HOSTS = [‘*’],修復。
ps:linux下Apache日誌路徑在Apache安裝目錄下的envvars(一般是/etc/apache2/下)檔案中有定義,可以找到一行export APACHE_LOG_DIR=/var/log/apache2$SUFFIX