CentOS5にrubygems+Capistrano(カピストラーノ)を入れてSVNからデプロイ設定
CentOS5にrubygems+Capistrano(カピストラーノ)を入れる
(参考)
スライド
http://www.slideshare.net/T2J/capistrano-tips-tips
deploy.rbが分りやすい!
http://d.hatena.ne.jp/yamada6789/20110108/1294450383
オープンソーシャルゲームの「5秒ルール」に対抗する為に
アプリケーションサーバー台数を増やそうと計画中。
リリース作業の手間を減らすために、デプロイツールを導入したので
手順と運用をメモメモ。
http://ncloud.cocolog-nifty.com/blog/2011/05/capstranochef15.html
によるとCapistranoでニフティクラウドのOS設定〜ミドルウェアのセットアップまで
行えるようですが、今回は
SVN上のソース-->本番サーバーへリリース
の流れのみを行う予定!
インストール編
※yumでインストールできるrubyで動かないので、1.8.6をソースからインストール。
0)古いrubyを削除
yum remove ruby-libs
1)ruby1.8.6のインストール
# wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6.tar.gz # tar zxvf ruby-1.8.6.tar.gz # cd ruby-1.8.6 # ./configure --prefix=/usr # make # make install
2)gem1.3.1のインストール
# wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz # tar xzf rubygems-1.3.1.tgz # rm rubygems-1.3.1.tgz # cd rubygems-1.3.1 # ruby setup.rb
3)capistoranoインストール
# sudo gem install capistrano -y Successfully installed highline-1.6.9 Successfully installed net-ssh-2.2.1 Successfully installed net-sftp-2.0.5....... Successfully installed capistrano-2.9.0 1 gem installed
4)バージョン確認
cap -v
[/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- openssl (LoadError)]
OpenSSLが入っていないというエラーが出力。
5)opensslをいれる
yum -y install gcc zlib-devel openssl-devel
6)RubyにOpenSSL対応でコンパイル
cd /tmp/ruby-1.8.6/ext/openssl <-rubyのソースがある場所へ移動 ruby extconf.rb --with-openssl make install
7)capistoranoインストール
sudo gem install capistrano -y
8)cap -v
運用編
[別のサーバーに入ってディスク容量をチェックするコマンド]
cd /var/www/ mkdir capfile <-CAP用ディレクトリ cd capfile vim Capfile
------------------------------------- role :server, '192.168.0.1' set :user, 'root' set :password, 'XXXXXXX' desc "reporting disk usage with 'df -h'" task :check_disk, :roles => :server do run 'df -h' end ------------------------------------- #cap check_disk
[別のサーバーにファイルをアップロードするコマンド]
cd /var/www/ mkdir capfile <-CAP用ディレクトリ cd capfile vim Capfile
role :server, '192.168.0.1' set :user, 'root' set :password, 'test' desc "reporting disk usage with 'df -h'" task :check_disk, :roles => :server do run 'df -h' end role :ap1, "192.168.0.2" # アプリケーションサーバ(deploy先) task :upload_, :roles => [:ap1] do upload("/var/www/html/aaa.txt", "/var/www/html/aaa.txt", :via => :scp) end #cap upload_
[SVNから本番環境へ自動デプロイ]
※http://d.hatena.ne.jp/yamada6789/20110108/1294450383
を参照しました。ありがとうございました。
1点。apacheを利用したsvnの場合、下記の
SVNパスワードは適当で動く様子。
------------------------------------- # 基本定義 set :application, "sample_app" # アプリケーション名 set :user, "root" # sshでログインするユーザー(要sodo権限) set :password, "XXXXXX" # パスワード set :svn_repo, "http://192.168.0.1/svn/repos/bank/trunk" #svnリポジトリ #set :svn_pass, "XXXXXX" # svnパスワード set :checkout_dir, "/home/deployer/checkout" # checkout先ディレクトリ (*注意:ここで指定したディレクトリは一旦'rm -rf'で全消去されます) set :tar_dir, "/home/deployer" # 圧縮ファイル置場 set :upload_dir, "/home/deployer" # 圧縮ファイルupload先ディレクトリ。このディレクトリを予めつくっておかないとupload時にエラーとなる set :deploy_dir, "/var/www/sample_app" # deploy先ディレクトリ (*注意:ここで指定したディレクトリは一旦'rm -rf'で全消去されます) set :own_user, "root" # deploy後のown設定 set :own_group, "root" # deploy後のown設定 # サーバ定義 role :cap, "localhost" # ファイル管理サーバ role :ap1, "192.168.0.2" # アプリケーションサーバ(deploy先) # check outタスク task :checkout_, :roles => [:cap] do sudo "rm -rf #{checkout_dir}" sudo "mkdir #{checkout_dir}" sudo "svn co --username #{user} --password #{svn_pass} #{svn_repo} #{checkout_dir}" sudo "chown -R #{user} #{checkout_dir}" sudo "find #{checkout_dir} -name \".svn\" -type d | xargs rm -rf" end # 圧縮タスク task :tar_, :roles => [:cap] do sudo "tar cvfz #{tar_dir}/dep.tar.gz -C #{checkout_dir} ." sudo "chown #{user} #{tar_dir}/dep.tar.gz" end # uploadタスク task :upload_, :roles => [:ap1] do upload("#{tar_dir}/dep.tar.gz", "#{upload_dir}/dep.tar.gz", :via => :scp) sudo "rm -rf #{deploy_dir}" sudo "mkdir #{deploy_dir}" sudo "tar xvfz #{upload_dir}/dep.tar.gz -C #{deploy_dir}" sudo "chown -R #{own_user}:#{own_group} #{deploy_dir}" sudo "rm #{upload_dir}/dep.tar.gz" end task :deploy_, :roles => [:cap] do checkout_ tar_ upload_ end -------------------------------------