Django是一个鼓励快速开发和简练设计的基于Python的高级网络框架。这篇文章详细记录了我在本地部署Django的过程,服务器是支持FastCGI的Lighttpd,操作系统是Gentoo Linux。条条大路通罗马,网上也有很多Django的教程,但这可能是更适合Django本地学习和更有效率的一条捷径。欢迎FIX-ME
开读之前,请注意一下时效性:Django版本:0.96,Lighttpd版本:1.4.18,日期:2007年9月。
一、安装Lighttpd
无论什么时候,在Gentoo上安装软件都是一件愉快的事情,因为我们可以通过USE flags来选择需要安装的包。如果你和我一样记不住这些USE flags的具体意义,不妨用euse查看一下,例如:
# euse -i fastcgi
Lighttpd包括下列USE flags:
- bzip2 - 为mod_compress提供bzip2支持
- fastcgi - 提供FastCGI支持,使用Django或PHP都需要FastCGI来提升性能
- gdbm -提供GNU数据库支持
- ipv6 - 提供IPv6支持
- lua - 为mod_cml提供Lua支持
- memcache - 为for mod_cml提供内存缓存支持
- mysql - 为mod_mysql_vhost提供MySQL的设定支持
- pcre - 为Lighttpd配置文件中正则表达式提供PCRE支持
- php - 提供mod_fastcgi/php的设定支持
- rrdtool - 为一些统计图形提供RRDtool支持
- ssl - 为HTTPS提供OpenSSL支持
- doc -提供安装文档支持
- fam - 为减少stat()的响应数,提供fam/gamin支持
- ldap - 提供LDAP支持
- minimal - 最小化安装,不包括安装文档和不使用的模块
- webdav - 提供WebDAV支持
- xattr -提供额外的属性支持
和Apache有内嵌的Python解释器(mod_python)不同,Lighttpd只能通过CGI或者FastCGI方式执行Python脚本。CGI的先天不足导致它在大型Web应用上效率不佳。FastCGI在设计上继承了CGI不受操作系统、服务器和开发语言的限制,又利用一个类似常驻型CGI的设计大幅提高了执行效率。所以,我们在安装Lighttpd的时候,需要把fastcgi选入USE flags。至于其他选项,大家就各取所需了。
# echo "www-servers/lighttpd fastcgi ssl fam" >> /etc/portage/package.use
# emerge -av lighttpd
二、安装Django
接下来安装Django。本地安装Django很轻松,直接emerge就可以了:
# echo "dev-python/django examples sqlite" >> /etc/portage/package.use
# emerge -av django
emerge完以后,我们试试Django是否安装正确。运行Python,输入:
>>> from django.core.handlers.wsgi import WSGIHandler
也可以把其他Django的组件导入Python。如果没有出错信息,表示Django安装完成了。
三、安装flup
flup是一个基于Python的架设FastCGI服务器的模块,这也是需要安装的。
# emerge -av flup
然后,我们试试flup是否安装正确。运行python,输入:
>>> from flup.server.fcgi_fork import WSGIServer
如果没有出错信息,表示flup安装完成。
四、配置Lighttpd和FastCGI
Lighttpd自带的配置相当完整,只需要稍作修改就可以让Lighttpd支持FastCGI。
首先修改lighttpd.conf,自定义Lighttpd的主目录和日志目录等。
# {{{ variables
var.basedir = "/var/www/localhost"
var.logdir = "/var/log/lighttpd"
var.statedir = "/var/lib/lighttpd"
# }}}
你可以把所有的配置都塞到lighttpd.conf中,但是,Lighttpd默认你把CGI和FastCGI的配置文件分别放到了mod_cgi.conf和mod_fastcgi.conf文件中,并在lighttpd.conf中include它们。这样的结构更加简洁明白,本文也采用这种方法配置Lighttpd。
# {{{ includes
include "mime-types.conf"
include "mod_cgi.conf"
include "mod_fastcgi.conf"
# }}}
为2.6核心版本的Linux优化性能。
# for >= linux-2.6
server.event-handler = "linux-sysepoll"
指定用mod_fastcgi处理.py文件。
static-file.exclude-extensions = (".php", ".pl", ".py", ".cgi", ".fcgi")
在lighttpd.conf中,我们还可以设定一些其他参数,比如server.max-worker、server.max-keep-alive-requests、server.max-keep-alive-idle等,来优化Lighttpd的性能,让Lighttpd在大型的Web应用中表现更好。
接下来,修改mod_cgi.conf。
server.modules += ("mod_cgi")
alias.url = (
"/cgi-bin/" => var.basedir + "/cgi-bin/"
)
$HTTP["url"] =~ "^/cgi-bin/" {
# disable directory listings
dir-listing.activate = "disable"
# only allow cgi's in this directory
cgi.assign = (
".pl" => "/usr/bin/perl",
".py" => "/usr/bin/python",
".cgi" => "/usr/bin/perl"
)
}
修改mod_fastcgi.conf。
server.modules += ("mod_fastcgi")
fastcgi.server = (
"/main.fcgi" => (
"main" => (
"socket" => var.basedir + "/htdocs/tmp/django.socket",
)
),
)
最后,我们重新启动Lighttpd,并把lighttpd加入启动项。
# /etc/init.d/lighttpd restart
# rc-update add lighttpd default
这样子就万事OK了,我们已经成功的把Django部署在支持FastCGI的Lighttpd服务器上了。接下去就可以开始设计自己的Django项目了。
2 条评论:
是也乎!赞个先,一个优秀作品的推广就是靠这种实作经验的积累和分享!
超同意~谢谢大妈鼓励啊~
发表评论
指向此文章的链接:
创建链接
<< 主页