teketeke_55の日記

技術メモとか

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をインストールしてレポジトリを適当なところに作成する。

 # 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