最近在课上做动态网页的作业,虽然要求用JSP完成,但是我实在是不想碰Java,于是跟老师商量了一下决定用Django来做。
程序还没写完,却已经开始琢磨着怎么部署Django,Django Book上建议使用Apache+mod_python的方式实现,但是我在编译mod_python时却总是会出错,Google了一通也没找出原因,索性弃之不用而改用FastCGI。
一点准备工作
- 安装Apache,虽然更偏爱Nginx,但是这次想尝试一下使用Apache作为Web Server
- 安装mod_fastcgi,mod_fastcgi是Apache的FastCGI模块
- 安装flup,flup是一个用来处理FastCGI的Python库
配置Apache
为了让Apache能够使用FastCGI模块,需要编辑httpd.conf,添加一行
LoadModule fastcgi_module modules/mod_fastcgi.so
其次,为了使得目录中的.htaccess文件有效,需要将中的参数
AllowOverride None
改为
AllowOverride All
最后,需要修改参数
Options FollowSymLinks
在此之后添加+ExecCGI,成为
Options FollowSymLinks +ExecCGI
这是为了允许执行目录中的CGI脚本,之前尝试过很多次都无法执行CGI脚本,直到看到这篇文章才明白其中的原因。
部署Django Project
假设/srv/http
为网站的根目录,而Django Project的目录为mysite
,则将mysite
目录直接放置在/srv/http
目录中,编辑mysite.settings
,将DEBUG
置为False
关掉DEBUG模式即可。
为mysite编写CGI脚本
在/srv/http
中新建CGI脚本mysite.fcgi
#!/usr/bin/python2
import sys, os
# Add a custom Python path.
sys.path.insert(0,'/srv/http')
# Switch to the directory of your project. (Optional.)
os.chdir('/srv/http')
# Set the DJANGO_SETTINGS_MODULE environment variable.
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
from django.core.servers.fastcgi import runfastcgi
runfastcgi(method='threaded', daemonize='false')
.htaccess文件的配置
在网站根目录内新建.htaccess
文件,定义Rewrite规则,将所有的请求都交给mysite.fcgi
脚本处理
AddHandler fastcgi-script .fcgi RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ mysite.fcgi/ [QSA,L]
更多关于使用FastCGI运行Django的资料,可以参考Django Project网站上的文档 How to use Django with FastCGI, SCGI, or AJP
UPDATE:更推荐使用uWSGI部署Django应用
Leave a Comment