2012-04-30
■[CentOS][RoR] CentOS で Ruby on Rails
Cent OS 5.8(64bit版)にRuby on Railsをインストール。以下、方針。
CentOSのバージョン確認方法
% more redhat-release
パッケージ管理ソフト yum
% yum update
パッケージ検索
% yum search キーワード
インストール
% yum install パッケージ名
Ruby 1.9.xのインストール
ぷろぐらま:CentOSでのRails環境構築手順を参考にする。
LibYAMLからソースコードをダウンロードし、libyamlをインストールする。
% wget http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz % tar xvfz yaml-0.1.4.tar.gz % cd yaml-0.1.4/ % ./configure |& tee configure.log % make |& tee make.log % sudo make install
zlib、OpenSSLをパッケージでインストール。
% sudo yum install openssl-devel zlib-devel
オブジェクト指向スクリプト言語 Rubyより、Ruby 1.9.3-p194のソースコードをダウンロードする。
% tar xvfj ruby-1.9.3-p194.tar.bz2 % cd ruby-1.9.3-p194 % ./configure --prefix=/usr/local % make |& tee make.log % make test % sudo make install
alternativeでrubyを有効にする。
% sudo mv /usr/bin/ruby /usr/bin/ruby1.8 % sudo /usr/sbin/alternatives --install /usr/bin/ruby ruby /usr/local/bin/ruby 1000 % sudo /usr/sbin/alternatives --install /usr/bin/ruby ruby /usr/bin/ruby1.8 2000 % sudo /usr/sbin/alternatives --config ruby (これで/usr/local/bin/rubyを選ぶ) % ruby -v ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
rubygemのインストール
RubyGems.orgからソースコードダウンロードしてコンパイル。
% tar xvfz rubygems-1.8.24.tgz % cd rubygems-1.8.24 % sudo ruby setup.rb % which gem /usr/local/bin/gem % gem -v 1.8.24
Ruby on Railsのインストール
SQLite3をパッケージでインストール
% sudo yum install sqlite.x86_64 sqlite-devel.x86_64
SQLite3とrubyとのパッケージをインストール
% sudo gem install sqlite3
新しいプロジェクトを作成する
% rails new demo % cd demo % vi Gemfile
Gemfileに以下を付け加える。
gem 'execjs' gem 'therubyracer'
% sudo bundle install
nginxのインストール
事前準備。
% sudo yum install pcre-devel.x86_64
nginxをへびにっき:CentOS 5にNginxをインストールするを参考にソースファイルからコンパイルする(Rails用に使う予定なので、 --http-fastcgi-temp-path は省略)。
% sudo /usr/sbin/useradd -s /sbin/nologin -d /usr/local/nginx -M nginx % tar xvfz nginx-1.2.0.tar.gz % cd nginx-1.2.0 % ./configure \ --prefix=/usr/local \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --user=nginx \ --group=nginx \ --with-http_stub_status_module \ --with-http_ssl_module \ --with-http_gzip_static_module \ --with-http_realip_module \ --http-log-path=/var/log/nginx/access.log \ --http-client-body-temp-path=/var/tmp/nginx/client/ \ --http-proxy-temp-path=/var/tmp/nginx/proxy/ \ --with-cc-opt="-O3" |& tee configure.log % make |& tee make.log % sudo make install
nginxの起動確認。
% sudo /usr/local/sbin/nginx (起動) % sudo /usr/local/sbin/nginx -s quit (終了)
http://ホスト名/ でアクセスできなかったら、SU Linuxを疑う(私はそうだった)。以下のコマンドでHTTPとHTTPSを有効にする。
% sudo system-config-securitylevel-tui
起動スクリプトを作成する。Red Hat Nginx Init Scriptから起動スクリプトをダウンロードし、編集する。
% cp -p nginx nginx.org % vi nginx % % diff nginx.org nginx 22c22 < nginx="/usr/sbin/nginx" --- > nginx="/usr/local/sbin/nginx" 29c29 < lockfile=/var/lock/subsys/nginx --- > lockfile=/var/lock/nginx.lock
有効にする。
% sudo mv nginx /etc/init.d/ % sudo chmod 755 /etc/init.d/nginx % sudo /sbin/chkconfig --add nginx % sudo /sbin/chkconfig nginx on
ログローテートの設定(参考)
% cd /etc/logrotate.d
% sudo touch nginx
% sudo vi nginx
% more nginx
more nginx
/var/log/nginx/*log {
missingok
notifempty
delaycompress
sharedscripts
postrotate
/usr/local/sbin/nginx -s reopen
endscript
}
% sudo /usr/sbin/logrotate -d /etc/logrotate.conf (設定ファイルの確認)
unicornの設定
passengerではなくunicornを使ってみることに。
milk1000cc:nginx + Unicorn を試してみたを参考に設定する。
unicornをインストール
% sudo gem install unicorn
続いて、RailsアプリのGemfileに追加し、読み込ませる。 /path/rails_app にRailsアプリがあるとき
% vi /path/rails_app/Gemfile % cd /path/rails_app/ % bundle install
http://unicorn.bogomips.org/examples/unicorn.conf.rb をダウンロードし、 Tech Racho:次世代RailsサーバーUnicornを使ってみたとmilk1000cc:nginx + Unicorn を試してみたを参考に書き直した(ほとんどそのまま。ログの吐き出し先だけ違う)。
% wget http://unicorn.bogomips.org/examples/unicorn.conf.rb
% mv unicorn.conf.rb /path/rails_app/config/unicorn.rb.org
% cd /path/rails_app/config/
% cp -p unicorn.rb.org unicorn.rb
% vi unicorn.rb
% diff unicorn.rb.org unicorn.rb
24c24
< working_directory "/path/to/app/current" # available in 0.94.0+
---
> #working_directory "/path/to/app/current" # available in 0.94.0+
28c28
< listen "/tmp/.sock", :backlog => 64
---
> #listen "/tmp/unicorn.sock", :backlog => 64
35c35
< pid "/path/to/app/shared/pids/unicorn.pid"
---
> pid File.expand_path('log/unicorn.pid', ENV['RAILS_ROOT'])
40,41c40,41
< stderr_path "/path/to/app/shared/log/unicorn.stderr.log"
< stdout_path "/path/to/app/shared/log/unicorn.stdout.log"
---
> stderr_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT'])
> stdout_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT'])
64,71c64,71
< # old_pid = "#{server.config[:pid]}.oldbin"
< # if old_pid != server.pid
< # begin
< # sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
< # Process.kill(sig, File.read(old_pid).to_i)
< # rescue Errno::ENOENT, Errno::ESRCH
< # end
< # end
---
> old_pid = "#{server.config[:pid]}.oldbin"
> if old_pid != server.pid
> begin
> sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
> Process.kill(sig, File.read(old_pid).to_i)
> rescue Errno::ENOENT, Errno::ESRCH
> end
> end
稼働しているかどうかを確認する。ポート番号8080で動いていたらOK。
% unicorn_rails -c config/unicorn.rb -E development (開発環境&プロセスとして起動) % unicorn_rails -c config/unicorn.rb -E production -D (公開環境&デーモンとして起動)
nginxとunicornを連動させる
/etc/nginx.confの設定を該当部分だけ抜粋。
〜前略〜
http {
〜中略〜
upstream backend-unicorn{
server localhost:8080;
}
server {
listen 80;
server_name hogehoge.jp;
# keep less damage of XSS
# http://blog.monoweb.info/article/2012021823.html
add_header X-XSS-Protection "1; mode=block";
# keep less damage of Clicking jack
# http://blog.monoweb.info/article/2012021823.html
add_header X-Frame-Options DENY;
# Prevent sniffing of IE
# http://blog.monoweb.info/article/2012021823.html
add_header X-Content-Type-Options nosniff;
root /path/rails_app/public;
#charset koi8-r;
#access_log logs/host.access.log main;
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 off;
if (!-f $request_filename) { proxy_pass http://backend-unicorn; }
# proxy_passは上のupstreamで指定しているもの。
#アクセス制限
allow xxx.xxx.xxx.xxx/yy;
deny all;
}
# Asset pipelineの対応
# http://d.hatena.ne.jp/milk1000cc/20100804/1280893810
location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
expires 1y;
add_header Cache-Control public;
add_header Last-Modified "";
add_header ETag "";
}
〜中略〜
}
こうした上で起動。
% cd /path/rails_app/ % unicorn_rails -c config/unicorn.rb -E production -D % sudo /etc/init.d/nginx start
80番ポートで無事にアクセスできたら成功。サーバーの再起動時にunicornを自動起動させる方法を見つけないと。
PostgreSQL
続く。
- 371 http://b.hatena.ne.jp/
- 246 http://t.co/OAfye47U
- 214 http://t.co/kG48yAhV
- 90 http://b.hatena.ne.jp/hotentry/knowledge
- 84 http://www.hatena.ne.jp/
- 73 http://longurl.org
- 65 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CFcQFjAA&url=http://d.hatena.ne.jp/next49/&ei=zUieT9DyJKbemAWJq53GDg&usg=AFQjCNE3YAY7Szl5PwJ2MIa9NlT9kvW76w&sig2=WHeEChHYRMiUCgPEpa54Yw
- 58 https://www.google.co.jp/
- 49 http://reader.livedoor.com/reader/
- 48 http://t.co/D7Jd6Lw9