IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Puma 替换 Unicorn 跑 Gitlab

    icyleaf (icyleaf.cn@gmail.com)发表于 2014-01-27 02:14:37
    love 0

    前篇介绍到如何在《CentoOS 上面安装 Gitlab》一文,gitlab 默认使用的是 unicorn 作为内部的 app server,再用 nginx 做代理转发。之前是在公司内部搭建了一个平台,用着还算可以。有打算在 Linode 购买的 VPS 上面,使用 unicorn 跑服务的时候 ruby 的进程居然占了 400-500M 左右,对于 Linode 刚刚免费升级之后才有 1G 内存的环境上,我还真有点放弃安装它的欲望。于是在想是否可以使用 puma 替换掉原先的。

    puma

    简单介绍下 puma,它是一个由 ruby 编写的转为 rack 设计的 app server,在性能和资源占有上却有极大的优势(下表数据来自官方)

    PUMA - 78 Mb
    RAINBOWS! (1X16) - 120 Mb
    UNICORN - 1076 Mb
    RAINBOWS! (16X32) - 1138 Mb
    

    而且集成也非常的简单,若使用 rails 或者 sinatra(及 padrino)都已经支持,直接 gem install puma,然后跑默认的 rails/padrino server 会自动加载。

    教程

    Okay,经过一番查找,官方在收集的 repices 里面有关于 puma 的一些配置。他们也是收集的非官方资料,里面的资料只有借鉴意义,真正拿来用的时候各种问题,所以才有了本篇文字。

    首先是关闭启动的 gitlab 服务

    $ (sudo) service gitlab stop
    

    关闭之后,添加 puma gem,打开 Gemfile

    group :unicorn do
        gem 'unicorn', '~> 4.6.3'
        gem 'unicorn-worker-killer'
    end
    

    找到上面的这段 group 替换成:

    gem 'puma'
    

    再者修改 config.ru,把下面这段代码做下替换,删除 unicorn 的代码,加载 puma:

    unless defined?(PhusionPassenger)
          require 'unicorn'
          # Unicorn self-process killer
          require 'unicorn/worker_killer'
    
          # Max memory size (RSS) per worker
          use Unicorn::WorkerKiller::Oom, (200 * (1 << 20)), (250 * (1 << 20))
    end
    

    更新成

    unless defined?(PhusionPassenger)
          require 'puma'
      end
    

    替换完毕更新 gem

    # mysql 数据库
    bundle install --without development test postgres --path vendor/bundle --no-deployment
    
    # postgres 数据库
    bundle install --without development test mysql --path vendor/bundle --no-deployment     
    

    最后还有两处需要修改,添加 config/puma.rb(替代 config/unicorn.rb) 以及替换 /etc/init.d/gitlab 服务脚本代码。

    config/puma.rb的代码在这里可以下载,无需做任何的修改。

    /etc/init.d/gitlab 服务脚本:CentOS | Debian(Ubuntu)

    服务脚本需要设置下执行权限: chmod +x /etc/init.d/gitlab

    最后开启服务应该就完美了

    $ (sudo) service gitlab start
    

    我想用 Apache 怎么办?

    嗯,我没尝试过,官方有提供收集的资料,[自己查看下吧](https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/web-server),记得要活学活用,直接套肯定会出问题的。
    


沪ICP备19023445号-2号
友情链接