まっさらなDebian環境にRails2.0環境を構築メモ(本番HTTPサーバー編

Lighttpdをデーモンとして動かし、手前にSquidをキャッシュサーバーとして置く。

# apt-get install lighttpd
# apt-get install libfcgi-ruby

# emacs /etc/lighttpd/lighttpd.conf

server.modules              = (
       ...略...
            "mod_accesslog",
                "mod_fastcgi",   #<=追記
       ...略...
 )


server.document-root       = "/ railsのルートDIR /public"
server.error-handler-404 = "/dispatch.fcgi"

fastcgi.server = ( "dispatch.fcgi" =>
                     ( "rails" =>
                         (
                           "min-procs" => 2,
                           "max-procs" => 3,
                           "socket" => "/tmp/pagmo-web-rails.socket",
                           "bin-path" => "/ railsのルートDIR /public/dispatch.fcgi",
                           "bin-environment" => ( "RAILS_ENV" => "production" )
                         )
                     )
                 )

WINでRailsを構築している場合public/dispatch.fcgiの一行目をrubyのパスに書き換える

#!/usr/bin/ruby


railsのプロジェクトのパーミッションLighttpdと合わせる必要がある。
基本はwww-dataというユーザーグループでアクセスしてくるのでWWW-data


# gpasswd -a www-data railsを動かしているグループ

  • Railsを動かしているユーザーで、パーミッションを775にし、WWW-dataユーザーからもアクセスできるようにする。

$ chmod -R 775 ./*

更新後は必ずlighttpdを再起動しないといけないっぽい
# /etc/init.d/lighttpd restart

Squidのインストール

ここまででとりあえずlighttpdで動くようになった。
ただ、このままだと静的なファイルをLighttpdがくそまじめに全部返さなくてはいけなくなるので手前にSquidを立てる

                     +---------+              +------------+  +---------+
Internet <---->Port80|  Squid  |<---->Port8080|  Lighttpd  |--|  Rails  |
                     +---------+              +------------+  +---------+

とりあえずLighttpdは8080で待ち受けてもらうことにする
# emacs /etc/lighttpd/lighttpd.conf

 server.port               = 8080

# apt-get install squid

# emacs /etc/squid/squid.conf

http_port 80 vhost vport vport=8080

cache_mem 32 MB
cache_dir ufs /var/spool/squid 1000 16 256

acl CONNECT method CONNECT
acl all src 0.0.0.0/0.0.0.0
acl localhost src 127.0.0.1/255.255.255.255
acl homenet src 192.168.0.0/255.255.255.0
http_access allow all

cache_access_log /var/log/squid/access.log

logformat combined %{Referer}>h -> %ru
logformat agent "%{User-Agent}>h"

access_log /var/log/squid/referer.log combined
access_log /var/log/squid/agent.log agent

cache_peer サーバーのIP parent 8080 0 no-query

これでポート80にきたアクセスは8080にフォワードされ、静的なデータはSquidのキャッシュから返されるため非常に高速
RubyはPOSTリクエスト等の重要なアクセスのみを相手するようになる。

ちなみにRailsでかいてそのままではSquidは拾ってくれないのでSquidに拾わせるには以下を参照
http://d.hatena.ne.jp/sakusan_net/20080411/1207932815