まっさらな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を動かしているグループ
$ 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
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