freeBSD下配置nginx+mongrel的rails部署环境 博客分类: ruby rails FreeBSDRailsnginxlighttpdMySQL
最近准备帮朋友开发一个小型的应用,考虑再三决定使用ROR,因为朋友提供的独立主机是FreeBSD6.1,只好研究在FreeBSD下怎么安装production级别的ROR部署环境。 至于基本的软件怎么安装我这里就不多说了,网上的资源、信息很多,我这里提一下的是由于对FreeBSD不熟悉,使用ports安装的软件总是无法正确配置(还有就是可安装的软件版本太低),所以全部源码安装最新版本的软件。最终安装组合是:Nginx+Mongrel+Rails+MYSQL。 小型应用,数据库就不说了MYSQL,重点就是WEB Server的前后端组合方案的的选择上了,查阅了大量网上资料,考虑了以下两种种备选方案: lighttpd + fcgi 或者 nginx +mongrel, 首先想优先考虑速度性能,毕竟都在传说ROR的速度性能差,准备挑选lighttpd+FastCGI方案,但大佬说FastCGI会因各种原因爆炸在发射台上(想必是一个难配置、难维护的翻案),还有lighttpd和FastCGI的通信是一个专有的通信协议(tcp/unix socket?fcgi协议?),想一想java WEB应用的ajp就有点怕,我等小虾米碰到通信出了问题只能抓瞎。还有rail装在什么上面(用后面来表达更好?)运行呀?协议还要一个东西接受转发给rails呀,估计配置肯定麻烦,我理解的ROR本质就是简单,不简单的肯定走不远。所以目前速度最优的方案放弃。 下面就选择通信性能较差的,但稳定,并且配置简便的使用proxy http通行的 nginx+Mongrel架构。备选方案中除了lighttpd+fcgi 就是nginx +mongrel主要是看了《Xen and the Art of Rails Deployment》中的:The year of the dog这句话,有点感想呀(也有人推荐 Swiftiply,说是性能更好,下一篇我会讲一下简单的配置过程)。 讲一下我对nginx +mongrel的理解,其实就是nginx 接受公网上的http请求,然后nginx通过反向代理用http协议再把这些请求转发给mongrel,mongrel上启动的Rails对请求进行处理完后再把响应逆向返回,如果如果在高负载的情况下还可以通过mongrel_cluster启动的mongrel集群,并且在nginx上启动负载均衡以成倍的提高处理请求的能力。 安装步骤: 1,首先在http://nginx.net/上下载nginx,并安装。(本例安装在 /usr/local/nginx),通过/usr/local/nginx/sbin/nginx 启动,测试,(这个地方我不知道怎么停止nginx服务,只有kill进程) 2,配置/usr/local/nginx/conf/nginx.conf,如下: 3,通过下面命令安装mongrel和mongrel_cluster 以上内容我就不用解释了,网上都有 首先测试mongrel是否安装成功。通过应用的主目录(本例/usr/local/depot)下通过mongrel_rails start 启动mongrel服务,用户应该在http://XXX.XXX.XXX.XXX:3000/ 下可以访问到ror的welcome aboard页面。 4,如果以上通过,通过一下命令配置mongrel集群。 这句执行后在/usr/local/depot/config目录下应该多一个mongrel_cluster.yml文件,其中内容应该是: 5,在应用主目录下通过命令mongrel_rails cluster::start启动mongrel集群,启动成功后netstat 应该可以看到127.0.0.1的8000和8001处于监听状态。最后启动nginx 6,提供一点简单的测试代码 编辑 depot/app/controllers/say_controller.rb 编辑depot/app/views/say/hello.rhtml 最后,说点自己的感受。 1,通过nginx.conf的配置你可以把http请求反向代理到任何一个内网的已在服务的web server上甚至web service上,很有点SOA的感觉 2,配置简单