Django, 在 apache2, wsgi 設定

一開始讀著官方的 Tutorial 在學Django的時候,發現一開始的例子裡面並沒有說明怎麼設定才能用 apache2 來跑Django的project。後來才在比較後面的章節裡面發現這一類的教學,這著實讓我花了一番時間才找到...Orz..。

最基本的就是要讓 apache2 可以直接運行python程式,所以要在apache2上安裝可以跑python的模組,像是mod_wsgi, mod_python...等等有的沒的。這麼多方法當然不可能全都用一次吧,所以我就選擇比較推薦的mod_wsgi來用了,為何官方比較推薦這個模組我就不得而知了。

所以大原則就是指定apache2 server去跑你寫的一個python執行擋來運作Django。



=====================
安裝apache2的mod_wsgi:
=====================

安裝mod_wsgi的方法在Debian下很簡單:

sudo apt-get install libapache2-mod-wsgi


======================================
寫一個會去跑Django Project的python 執行檔
======================================

在這裡假設已經開始一個django project,名稱為"website",而此project在"/home/user"底下。

也就是說project的設定檔為"/home/user/website/setting.py"

寫一個python script檔叫apache2去執行它,在這裡假設檔名為 "app.wsgi",而裡面的內容就如下:


#-*- coding: utf-8 -*-
import os
import sys

path = '/home/user'
# 上面這個path是django project的位置

if path not in sys.path:
sys.path.append(path)

os.environ['DJANGO_SETTINGS_MODULE']= 'website.settings'
# 上面這個website就是django project的名稱

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

然後把app.wsgi放在"/home/user/apache2/"底下。(非限定,要放哪就放哪,只是對應的apache2設定檔要設定好)

然後接下來就要設定apache2去跑這個python script檔。去設定/etc/apache2/httpd.conf這個檔,加入以下內容:



WSGIScriptAlias /app /home/user/apache2/app.wsgi
# http://你的主機位址/app 就會出現你的django所呈現的網頁

<Directory /home/user/website/apache2>
Order deny,allow
Allow from all
</Directory>




然後重新sudo /etc/init.d/apache2 restart應該就ok了...



Reference:
https://docs.djangoproject.com/en/1.3/howto/deployment/modwsgi/

留言

熱門文章