capistranoのインストールと初期設定
SSHを利用してファイルのデプロイなどを含め構成管理ができるツールらしい
https://github.com/capistrano/capistrano/wiki/
今回はインストールと動作確認。
- インストール環境
CentOS5.5
ruby-1.8.7-p358(ソースから)
rubygems-1.8.10(ソースから)
その他依存関係は公式ページを参照して入れておく。
- capostranoのインストール
# gem install capistrano Successfully installed capistrano-2.12.0 1 gem installe
初期設定
適当なディレクトリを作成して以下のコマンドを実行する
# capify
すると以下のようなファイルが出来上がる。
Capfile config strace.txt
- 確認
# cap -T cap deploy # Deploys your project. cap deploy:check # Test deployment dependencies. cap deploy:cleanup # Clean up old releases. cap deploy:cold # Deploys and starts a `cold' application. cap deploy:create_symlink # Updates the symlink to the most recently deployed... cap deploy:migrate # Run the migrate rake task. cap deploy:migrations # Deploy and run pending migrations. cap deploy:pending # Displays the commits since your last : :
- configを修正して動作確認
ひとまずローカルホストで
# vim config/deploy.rb role :server, 'localhost' set :user, 'testuser' desc "test" task :dep_test, :roles => :server do run 'cat /etc/redhat-release'
# cap dep_test * executing `dep_test' * executing "cat /etc/redhat-release" servers: ["localhost"] [remote-host] executing command ** [out :: localhost] CentOS release 5.5 (Final) command finished in 6ms
うまく動いた。
リモートホストで行う場合はrole:serverの部分をリモートホスト名かIPにすればいい。
事前にSSH用に鍵をリモートホストに配布しておくこと。
- gitのレポジトリと連携してみる。
gitをインストールしてレポジトリを適当なところに作成する。
# mkdir /tmp/repo # cd /tmp/repo/ # git init >|| テストファイルを作成してgitにアップロードしておく。 >|| # touch /tmp/repo/test.rb # git add # git commit
設定を修正
# vim config/deploy.rb role :server, 'remote-host' set :scm, 'git' set :user, 'testuser' set :repository ,"ssh://hostname/tmp/repo" set :deploy_to ,"/tmp/dep" default_run_options[:pty] = true #sshでsudo関連エラーが出たので追加
- 事前準備
# cap deproy:setup
remote-hostへデプロイ先のディレクトリなどを作成してくれる。
- デプロイ実行
# cap deploy * executing `deploy' * executing `deploy:update' ** transaction: start * executing `deploy:update_code' executing locally: "git ls-remote ssh://testuser@hostname/tmp/repo HEAD" command finished in 122ms * executing "git clone -q ssh://testuser@hostname/tmp/repo /tmp/dep/releases/20120731084901 && cd /tmp/dep/releases/20120731084901 && git checkout -q -b deploy 7734ce1b3e0fca20f6a32eb2e6fbd6812e5ceb51 && (echo 7734ce1b3e0fca20f6a32eb2e6fbd6812e5ceb51 > /tmp/dep/releases/20120731084901/REVISION)" servers: ["remote-host"] [remote-host] executing command command finished in 169ms * executing `deploy:finalize_update' * executing "chmod -R g+w /tmp/dep/releases/20120731084901" servers: ["remote-host"] [remote-host] executing command : : : : command finished in 7ms * executing `deploy:create_symlink' * executing "rm -f /tmp/dep/current && ln -s /tmp/dep/releases/20120731084901 /tmp/dep/current" servers: [remote-host] [remote-host] executing command command finished in 6ms ** transaction: commit * executing `deploy:restart'
- remote-hostにログインして確認
# ls /tmp/dep current releases shared
いろいろ作成されている。テストファイルはcurrentの中にあった。
# ls /tmp/dep/current ls /tmp/dep/current log public REVISION test.rb tmp
- 参考文献
http://builder.japan.zdnet.com/virtualization/sp_open-source-software-moonlinx-2009/20396188/4/
http://doruby.kbmj.com/trinityt_on_rails/20080325/__Capistrano___1
http://aligach.net/diary/20081218.html