[rails][apache][capistrano] capistranoを使ってmod_proxy_balancer+mongrelの環境にdeployが出来るようにする
まずはcapitranoやmongrelをインストール
$ sudo su - # gem install capistrano mongrel mongrel_cluster -y
apacheのmod_proxy_balancerの設定をする
ServerName rails_app.domainProxyPass / balancer://cluster/ timeout=2
ProxyPass /balancer-manager !
SetHandler balancer-manager
Order Deny,Allow
Deny from all
Allow from 192.168.11.0/24
Order Deny,Allow
Allow from all
BalancerMember http://localhost:10000 loadfactor=10
BalancerMember http://localhost:10001 loadfactor=10
BalancerMember http://localhost:10002 loadfactor=10
とりあえずapacheを再起動
# apache2ctl restart
railsのアプリケーションにcapistranoを追加する
$ cd ~/project/rails_app $ capify . [add] writing `./Capfile' [add] writing `./config/deploy.rb' [done] capified!
config/deploy.rbに設定を書く
require 'mongrel_cluster/recipes' set :application, "rails_app" set :repository, "svn://192.168.11.111/var/svn/rails_app/trunk" # If you aren't deploying to /u/apps/#{application} on the target # servers (which is the default), you can specify the actual location # via the :deploy_to variable: set :deploy_to, "/var/www/#{application}" # If you aren't using Subversion to manage your source code, specify # your SCM below: # set :scm, :subversion role :app, "192.168.11.111" role :web, "192.168.11.111" role :db, "192.168.11.111", :primary => true set :mongrel_conf, "#{current_path}/config/mongrel_cluster.yml" after "deploy:update_code" do run "cp #{shared_path}/system/*.yml #{latest_release}/config/" end
after "deploy:update_code"の部分は読んでそのままdeploy:update_codeを実行した後に実行される。今回は後で解説するdatabase.ymlをコピーするために使う。FastCGIなんかで動かす場合はパーミッションの変更とかが必要になるのでそういったこともここに書いておけばいい。
mongrel_cluster.ymlを作成する config/の下に作成する
user: rails group: rails cwd: /var/www/rails_app/current log_file: /var/www/rails_app/shared/log/mongrel.log port: 10000 environment: production pid_file: /var/www/rails_app/shared/pids/pid servers: 3
この設定だとport番号10000、10001、10002の3つをmongrelが使うことになる。
ここは空いているポート番号を使えばいい。mongrel_cluster.ymlもリポジトリに入れるのを忘れないように。
$ svn status | grep '?' | cut -c8- | xargs svn add $ svn ci -m "add deploy settings."
まずはここでいったん deploy:setup を実行する
$ cap deploy:setup
するとデプロイ先サーバーのデプロイ先ディレクトリ(上の場合だと192.168.11.111の/var/www/rails_app)にsharedとreleaseというディレクトリができる。
database.ymlにproduction環境のパスワードを記述するというのもあまりいいことではないので上のdeploy.rbのところで解説したようにデプロイ先サーバー、デプロイ先ディレクトリの shared/system/にdatabase.ymlを設置する
@dest_server: $ vi /var/www/rails_app/shared/system/database.yml production: adapter: mysql database: raiils_app_production username: user password: password socket: /var/run/mysqld/mysqld.sock
あとはデプロイを実行してmongrelをスタートさせる
$ cap deploy:cold $ cap deploy:migrate $ cap deploy:start
昨日やったことだけど確かこんな感じだったはず。