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。
- Previous: UltraNav on Debian @2006/02/25
- Next: GPLed game @2006/03/01
Please send trackback to: http://blog.seety.org/everydaywork/2006/2/26/474/trackback/.