Django 雖然建議以 Apache+mod_python 進行佈署,但對負載不大的網站來說,以 mod_python 佈署有一些不便之處;另外,絕大多數的 shared web hosting 不會支援 mod_python 佈署,因此這種方式並不適合非自有伺服器的使用狀況。

次之的選擇是 FastCGI (FCGI)。我參考 Dreamhost wiki 上的資訊,在我自己的 Apache2 上進行 Django 佈署。

FastCGI 是一種與語言無關的 CGI 強化 API;這裡是它的文件。在 Debian 下,請安裝 libapache2-mod-fastcgi 套件,即可獲得 FastCGI 支援。使用 FastCGI 的目錄應該要有以下的權限:

<Directory /your/fastcgi/binary>
    Options +ExecCGI
    #SetHandler fastcgi-script
    AddHandler fastcgi-script fcgi
</Directory>

而為了讓 mod_fastcgi 可與 Python 程式溝通,我們還需要 fcgi 模組;把這個 .py 檔抓下來以後,請與 .fcgi 檔放在一起 (若依照上面的設定例,即 /your/fastcgi/binary 目錄)。

然後,我們要撰寫 FastCGI 執行檔:

#!/usr/bin/env python
import sys
sys.path += ['/path/to/your/django/project']
from fcgi import WSGIServer
from django.core.handlers.wsgi import WSGIHandler
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'yourprogject.settings'
WSGIServer(WSGIHandler()).run()

把這個檔放在 /your/fastcgi/binary 裡,取名為 yourproject.fcgi。如果 /your/fastcgi/binary 是你的 DocumentRoot,那麼此時 http://your.domain/yourproject.fcgi/ 就是這個 Django project 所佈署的位置了。

此時 Django project 雖然可以動作,但佈署得還不完整。我們通常會想要以下的 mod_rewrite 規則:

RewriteRule ^(/media/.*)$ - [L]
Alias /media/ /path/to/your/media
RewriteCond %{REQUEST_URI} !(yourproject.fcgi)
RewriteRule ^(.*)$ /yourproject.fcgi$1 [L]

這些 RewriteRules 可能要視不同的佈署而調整。最後,我們會讓網站出現在 http://your.domain/,不必讓使用者看見我們的 .fcgi wrapper。

Posted by yungyuc at 22:52, 0 comment, 0 trackback.
Change to page (10 entries in each page): 1
© hover year to navigate month: powered by django