linux下lighttpd + fcgi的ROR环境搭建?? ?由于家里断网了,只有在办公室把这篇文章搞一搞,这篇文章只是自己
linux下lighttpd + fcgi的ROR环境搭建
?? ?由于家里断网了,只有在办公室把这篇文章搞一搞,这篇文章只是自己的一个随笔总结,robbin对lighttpd和fcgi的环境搭建阐述的已经非常详细,建议大家去熟读下,他对lighttpd + fcgi进行了高度的评价,并且从javaeye的事实运营过程当中我们也看到了确实这2个服务器的搭配显得非常的默契,是现今ROR最好的,性能最高的服务器搭配组合。另外一种组合则是nginx + mongrel,同样是ROR服务器优选方案之一,nginx是俄国人搞出的一个轻量级,在处理静态页面时候速度高于apche几十倍的web服务器,同lighttpd + fcgi相比,用robbin的话来说就是nginx不是为mongrel量身定做的,而lighttpd则相反,它和fcgi算是天生一对。对这两种性能都非常好的搭配方式,可以参读robbin的文章,在这里我只是简单的介绍一下这个环境搭建过程。
?? ?我选用的是linux是redhat5,ruby、rubygems、rails的版本分别是1.8.7、1.3.7和2.2.2,数据库用的是mysql,也需要安装数据库适配器ruby-mysql.相关的安装过程参考我的另外一篇《linux下mongrel + nginx的ROR集群环境搭建》。
1、安装fcig库和ruby-fcgi支持库使用fcgi必须要安装ruby-fcgi支持库,而fcgi支持库必须要依赖于fcgi的独立库,所就先安装fcgi的独立库下载fcgi-2.4.0.tar.gzmkdir fcgitar xzvf fcgi-2.4.0.tar.gzcd fcgi-2.4.0./configure -prefix=/data/fcgimakemake install随后安装ruby-fcgi支持库下载fruby-fcgi-0.8.7.tar.gztar xzvf?ruby-fcgi-0.8.7.tar.gzcd?ruby-fcgi-0.8.7ruby install.rb config -- --with-fcgi-include=/data/fcgi/include --with-fcgi-lib=/data/fcgi/libruby install.rb setupruby install.rb install到这里,ruby-fcgi的支持库已经搞定。
2、安装lighttpd先前我已经说过nginx依赖pcre库,同样的lighttpd也依赖,按照之前我所讲述的安装过程安装pcre,之后一定要设置pcre的环境变量,不然lighttpd的安装不会成功下载lighttpd-1.4.26.tar.gzmkdir lighttpdtar xzvf?lighttpd-1.4.26.tar.gzcd?lighttpd-1.4.26./configure -prefix=/data/lighttpdmakemake install这里出列出一些需要用到的module,看到mod_rewrite则基本没有什么问题了,如果没有看到,请回过头去看看你的pcre是否有正确安装,必须正确安装pcre和设置了pcre环境变量之后才能使得lighttpd安装成功.我在这里下载的是lighhttpd-1.4.26,当前时间最新的版本是1.4.28,我之前下载的是1.4.28进行安装,后来发现里面的配置文件内容和他的一些目录结构跟之前的版本不太一样,网上也没有太多这方面的信息,配置了几个小时后没有办法和fcgi进行通讯,并且出现了错误,所以就改用了1.4.26,这个版本的目录结构跟robbin介绍的是一样的,我基本也是按照robbin给出的步骤来进行,最终顺畅的开启了服务器。
3、配置lighttpd进入解压后的lighttpd文件夹(不是lighttpd安装目录)cp doc/sysconfig.lighttpd /etc/sysconfig/lighttpdmkdir /etc/lighttpdcp doc/lighttpd.conf /etc/lighttpd/lighttpd.conf我用的是redhat,接下来的步骤为:cp doc/rc.lighttpd.redhat /etc/init.d/lighttpd如果你用的是其他linux发行版,参照robbin的文章进行配置把/etc/init.d/lighttpd文件中的lighttpd=/usr/sbin/lighttpd 改成:lighttpd=/data/lighttpd/sbin/lighttpd
修改/etc/lighttpd/lighttpd.conf取消用到的模块注释:mod_rewrite,mod_access,mod_fastcgi,mod_simple_vhost,mod_cgi,mod_compress,mod_accesslog
指定server.document-root, server.error-log,accesslog.filename的目录,我指定server.document-root的目录是/srv/www/htdocs/server.error-log的目录是/data/lighttpd/logs/error.logaccesslog.filename的目录是/data/lighttpd/logs/access.log记住一定要事先创建好相应的文件夹和文件,不然启动lighttpd会报错
指定用户:server.username ???????????= "nobody"server.groupname ??????????= "nobody"我这里为了方便用的是root,真实环境当中最好是指定单独的用户权限
静态文件的压缩处理:compress.cache-dir ????= "/tmp/lighttpd/cache/compress"compress.filetype ?????= ("text/plain",?"text/html","text/javascript","text/css")先去掉文件的注释然后再修改成如上
最后配置连接你的rails工程在文件中的某一处单独的地方加入:$HTTP["host"] == "192.168.1.100" {server.document-root = "/data/myProject"?server.error-handler-404 = "/dispatch.fcgi"??fastcgi.server = (".fcgi" =>??????("localhost" =>????????("min-procs" => 1,??"max-procs" => 1,"socket" => "/data/myProject/tmp/lighttpd/socket/rails.socket",???????????"bin-path" => "/data/myProject/public/dispatch.fcgi","bin-environment" => ("RAILS_ENV" => "production")??????)????))}server.document-root指定你的rails工程目录server.error-handler-404指定的是如果lighttpd找不到相应的静态页面处理URL则交给rails的dispatch.fcgi处理min-procs为启动fcgi的最小数目,max-procs为最大数目,我这里启动了一个fcgi进程socket指定产生的socket文件(lighttpd和fcgi通过unix/socket进行通讯),需要指定目录,目录中需要我们自己手动创建文件夹,文件可以不用创建bin-path指向rails工程的public/dispatch.fcgibin-environment指定是生产环境,也可以是development
至此lighttpd的配置已经完成
启动lighttpd会同时启动rails工程:/etc/init.b/lighttpd start 启动/etc/init.b/lighttpd stop 停止/etc/init.b/lighttpd restart 重启启动lighttpd之后,访问本机80端口,如果出现404错误,则把/etc/lighttpd/lighttpd.conf下的:dir-listing.activate ??????= "enable" 的注释解开
如果在某些情况下,关闭lighttpd的时候没有关闭掉fcgi,不用慌张,杀掉即可:killall -9 fcgi做好之后就能够正确访问了,其间一定要注意自己rails工程的public/dispatch.fcgi必须要有执行权限,并且如果你是在windows下创建的工程,部署到linux上的时候要改掉dispatch.fcgi里面的ruby解析器路径:第一行:#!/data/ruby/bin ----linux下 #!E:\ruby\bin ---windows下注意要修改这个地方,然后用./dispatch.fcgi来运行一下,如果能运行,则说明此处没有问题
如果需要查看lighttpd + fcgi集群的相关信息可以参照robbin的问题解答,关于linux下lighttpd和fcgi的ROR环境搭建就是这样。
?
?
?