请教django lighttpd的多后端部署问题?

a-zhu 2008-10-23
1. 软件环境
我的机器ip为192.168.1.183。
在此机器上安装了lighttpd1.4.20、python2.5、以及django1.0、flu1.0。

2.创建工程
在/work/sites下创建一个django工程mysite,如:pwd/django-admin.py startproject mysite
在mysite里添加一个py文件first.py

from django.http import HttpResponse
def index(request):
    return HttpResponse('first django page .....')

修改url.py,在patterns里添加:
(r'^mysite/$','mysite.first.index')


3.在mysite下添加一个文件mysite.cgi
#!/usr/bin/python
import sys,os
sys.path.inert(0, "/work/sites/mysite")
os.environ['DJANGO_SETTING_MODULE'] = 'setting'

from django.core.servers.fastcgi import runfastcgi
    runfastcgi(method='threaded', daemonize='fase', socket='/work/sites/mysite/django.sock')


4.配置lighty
server.modules= ("mod_rewrite","mod_redirect","mod_alias","mod_access","mod_fastcgi","mod_accesslog")

#添加如下信息(采用load balance),采用tcp方式通讯:
$HTTP["remoteip"] == "192.168.1.183"{
    server.document-root = "/work/sites/mysite/"
    fastcgi.server = (
       "/mysite.fcgi" => (
          ("host" => "127.0.0.1",
           "port" => 8100,
           #"socket" => "/work/sites/mysite/django.sock",
           "check-local" => "disable"),
          ("host" => "192.168.1.183",
           "port" => 8101,
           "check-local" => "disable"),
        ),
    )
   
    alias.url = (
        "/media/" => "/work/sites/mysite/media/",
    )   

    url.rewrite-once = (
        "^(/media.*)$" => "$1",
        "^/favicon.ico$" => "/media/favicon.ico",
        "^(/.*)$" => "/mysite.fcgi$1",
    )
}

启动lighty

5.启动2个fastcgi服务(注意host区别,在前端分发时会匹配)
sudo python manage.py runfcgi host=127.0.0.1 port=8100 method=threaded
sudo python manage.py runfcgi host=192.168.1.183 port=8101 method=threaded

6.访问
http://192.168.1.183/mysite
页面输出为:first django page .....

而且观察请求被正常分发到127.0.0.1:8100和192.168.1.183:8101上(不同的fastcgi server)。


7.疑问请教各位
    这个测试中可谓一切正常,由于我都是部署在同一台机器上掩盖了一些事实,
对于一个稍有规模的网站不可能这样。一般把lighty和fastcgi server都是独立部署在不同的机器上,fastcgi server也可能部署在多台机器上。如:

X.X.X.1 lighty #web server
X.X.X.2 django #fastcgi server
X.X.X.3 django #fastcgi server
X.X.X.4 django #fastcgi server

此时该怎么配置?
a) 在1上需要安装python吗?(我怎么觉得不需要)
server.document-root写什么(并不在该机器上,似乎没意义)?
在这种情况下mysite.fcgi还需要吗?
lighttpd.conf该怎么配置?
b) 在2,3,4上安装flu吗?


虽然看了lighttpd文档,有些概念还比较模糊(例如flu具体干什么)。
多谢!!
bohemia 2008-10-31
不是特别熟悉,应该是这样:

在1上需要安装python吗?(我怎么觉得不需要)
   不需要.lightTPD已经是WEB服务了.
server.document-root写什么(并不在该机器上,似乎没意义)?
   相对地址,或者LightTPD配置地址即可;
在这种情况下mysite.fcgi还需要吗?
mysite.fcgi应该在每台CGI服务端配置. 是需要的.lighttpd.conf该怎么配置?
你现在已经配置好了.多台服务的时候,只是IP不同而已

在2,3,4上安装flu吗?
需要安装flu,才能将Python服务输出FCGI接口.
a-zhu 2008-10-31
非常感谢bohemia,你的回答正是我所想的。

在1上安装lighty,
2,3,4上安装flu以及django,当然每台机器上都可以起多个fastcgi服务。
由1负责负载分发。

这种方法应该是很普通的做法。
但在lighty的配置上让人费解,尤其是mysite.fcgi,是一个python脚本,放在哪?
圈中700多的圈友就没有更多的解答吗?
shaotaost 2009-05-16
今天刚加入圈子,看到了这个问题,貌似mysite.fcgi这个文件可以不要,在运行的时候它自动给你生成一个mysite.fcgi(而且一直是空的)。。。。
Global site tag (gtag.js) - Google Analytics