设为首页 收藏本站
查看: 477|回复: 0

[经验分享] freeBSD下配置nginx+mongrel的rails部署环境

[复制链接]

尚未签到

发表于 2016-12-27 06:11:17 | 显示全部楼层 |阅读模式
    最近准备帮朋友开发一个小型的应用,考虑再三决定使用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,如下:

  • worker_processes  1;   
  • error_log  logs/error.log debug;   
  • #error_log  logs/error.log  notice;   
  • #error_log  logs/error.log  info;   
  • #pid        logs/nginx.pid;   
  • events {   
  •     worker_connections  1024;   
  • }   
  • http {   
  •   include       conf/mime.types;   
  •   default_type  application/octet-stream;   
  •   sendfile        on;   
  •   #tcp_nopush     on;   
  •   keepalive_timeout  65;   
  •   tcp_nodelay        on;   
  •   gzip  on;   
  •   gzip_min_length  1100;   
  •   gzip_buffers     4 8k;   
  •   gzip_types       text/plain;   
  •   upstream mongrel {   
  •     server 127.0.0.1:8000;   
  •     server 127.0.0.1:8001;   
  •   }   
  •   server {   
  •     listen       80;   
  •     server_name  XXX.XXX.XXX.XXX;  #你可以用你的域名代替以可以是你的对用户发布的IP   
  •     root /usr/local/depot/public;   
  •     index  index.html index.htm;   
  •     location / {   
  •       proxy_set_header  X-Real-IP  $remote_addr;   
  •       proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;   
  •       proxy_set_header Host $http_host;   
  •       proxy_redirect false;   
  •       if (-f $request_filename/index.html) {   
  •         rewrite (.*) $1/index.html break;   
  •       }   
  •       if (-f $request_filename.html) {   
  •         rewrite (.*) $1.html break;   
  •       }   
  •       if (!-f $request_filename) {   
  •         proxy_pass http://mongrel;   
  •         break;   
  •       }   
  •     }   
  •     error_page   500 502 503 504  /50x.html;   
  •     location = /50x.html {   
  •         root   html;   
  •     }   
  •   }   
  • }   

  3,通过下面命令安装mongrel和mongrel_cluster 以上内容我就不用解释了,网上都有

  • youserver#gem install --include-dependencies mongrel   
  • youserver#gem install --include-dependencies mongrel_cluster   

  首先测试mongrel是否安装成功。通过应用的主目录(本例/usr/local/depot)下通过mongrel_rails start 启动mongrel服务,用户应该在http://XXX.XXX.XXX.XXX:3000/ 下可以访问到ror的welcome aboard页面。
  4,如果以上通过,通过一下命令配置mongrel集群。

  • mongrel_rails cluster::configure -e development -p 8000  \    
  • -a 127.0.0.1 -N 2 -c /usr/local/depot   

  这句执行后在/usr/local/depot/config目录下应该多一个mongrel_cluster.yml文件,其中内容应该是:

  • ---    
  • cwd: /usr/local/depot   
  • log_file: log/mongrel.log   
  • port: "8000"  
  • environment: development   
  • address: 127.0.0.1  
  • pid_file: tmp/pids/mongrel.pid   
  • servers: 2  

  5,在应用主目录下通过命令mongrel_rails cluster::start启动mongrel集群,启动成功后netstat 应该可以看到127.0.0.1的8000和8001处于监听状态。最后启动nginx
  6,提供一点简单的测试代码

  • rugy script/generate controller Say  

  编辑 depot/app/controllers/say_controller.rb
ruby 代码

  • class SayController < ApplicationController   
  •   def hello   
  •   end  
  • end  

  编辑depot/app/views/say/hello.rhtml

  • <html>  
  • <head>  
  • <title>Hello,Rails!title>  
  • head>  
  • <body>  
  •     <h1>Hello from Rails!h1>  
  •     <p>  
  •         It is nwo <%=Time.now %>  
  •     p>  
  • body>  
  • html>  

  最后,说点自己的感受。
  1,通过nginx.conf的配置你可以把http请求反向代理到任何一个内网的已在服务的web server上甚至web service上,很有点SOA的感觉
  2,配置简单

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-319772-1-1.html 上篇帖子: 【转】nginx+tomcat集群负载均衡(实现 session复制) 下篇帖子: 通过Nginx架设灵活的网站静态化方案
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表