Nginx+mod_wsgi+webpy

最近在做一个项目是以结伴开发的模式来作的,最终两个人讨论一两个人都相对熟悉而且开发效率较高的python来开发,在web框架上最终抛弃了较为原始的直接cgi和较为臃肿的django,而选择了介于之间的webpy,webpy在使用了一段时间后发现,我们两个人都很喜欢使用而且用的是相当的顺手,后台环境就使用Nginx+mod_wsgi+webpy,也是非常流畅。现在把这个简单的‘复杂’环境搭建记录一下:
重点参考了nginx的官方文档:http://wiki.nginx.org/NgxWSGIModule的说明安装吧

下载nginx mod_wsgi webpy
http://nginx.net/
http://hg.mperillo.ath.cx/nginx/mod_wsgi/
http://webpy.org

nginx下载nginx-0.8.54.tar.gz,太新的版本mod_wsgi还不支持,就这个版本的也还是要打补丁才可以的,补丁文件在:
http://www.thechikun.com/depo/patch-mod_wsgi.txt
mod_wsgi下载后mod_wsgi-8994b058d2db.tar.gz
webpy下载的版本是:webpy-webpy-webpy-0.34-43-gfd2be24.tar.gz这个我下的是最新的版本

根据补丁文件修改后即可进行配置编译,进入nginx目录:

./configure —add-module=/path/mod_wsgi-8994b058d2db/ —prefix=/usr/local/nginx
这里还需要修改一下目录下’objs/Makefile’文件,取消掉一些编译warning设置,不然编译器会把warning也认为是error来处理。
make
sudo make install

安装完niginx后,还要在mod_wsgi-8994b058d2db中去安装一下这个:

python setup.py –prefix=/usr/local/nginx –conf-path=/usr/local/nginx/conf –sbin-path=/usr/local/nginx/sbin

然后配置nginx配置文件,在nginx.conf的http外面加上

env HOME;
env PYTHON_EGG_CACHE=/tmp; #设置一下pythonegg文件的零时解压目录
http{
….
}

这样就可以设置好python的路径问题.
下面给出一个完整的虚拟主机配置:

server {
listen 80;# 这个端口不要和其它server的端口冲突哦
server_name test.zhwen
index index.html index.py;
root /home/helight/babycode/webpytest;
include wsgi_vars;

location / {
wsgi_pass /home/helight/babycode/webpytest/src/main.py;
#我是使用eclipse来开发的,所以这里把所有的py文件都放到了src下面
wsgi_pass_authorization off;
wsgi_script_reloading on;
wsgi_use_main_interpreter on;
}
#这里把静态文件都放到了‘/home/helight/babycode/webpytest/static/’下,所以也指定了这个目录的访问,这个目录下既可以放图片,js,css,html等文件了
location /static/ {
expires 12h;
}
}

接下来些/home/helight/babycode/webpytest/src/main.py这个文件,就以官方的demo为例吧

import os
import web

web.config.debug = False

urls = (
‘/.*’, ‘hello’,
)

class hello:
def GET(self):
return “Fuck The World…”
app = web.application(urls, globals())

curdir = os.path.dirname(__file__)
session = web.session.Session(app, web.session.DiskStore(os.path.join(curdir+”../”,’sessions’)),)
#这里是把sessions的位置指向了/home/helight/babycode/webpytest/
application = app.wsgifunc()

这样启动ngnix后就可以http://test.zhwen/ 访问了;
再新建一个目录/home/helight/babycode/webpytest/static/,然后创建一个test.html的文件:

Fuck the world!!


以http://test.zhwen/static/test.html 访问
对于要在main.py中引人自己的模块的,还要加入这样的语句

curdir = os.path.dirname(__file__)
sys.path.append(curdir)

即把当前目录加入module的搜索路径,负责会出现无法加载模块的错误。

One thought on “Nginx+mod_wsgi+webpy

Leave a Reply

Your email address will not be published. Required fields are marked *