Capistranoは、複数のリモートマシンでスクリプトを実行する、デプロイツール(管理ツールとしても使えるかも?)
Chefをちょっと勉強したので次はこっちかな、という程度の不純さで試してます。
まぁ、今の仕事で全く使わないであろうツールの1つですね。
結構いろんなサイトを参考にしました(途中で参照にいれてないやつ)
http://tech.aainc.co.jp/archives/3773
http://yakinikunotare.boo.jp/orebase2/capistrano
https://github.com/capistrano/capistrano
必要条件
- スクリプトの送信元にRuby、Capistranoのインストールが必要。
- 送信元からリモートマシンにSSHで接続できること。複数のリモートマシンがある場合、すべてのマシンに同じユーザ/パスワードで接続できる必要がある。
簡単に書くと下記のような感じ。
送信元(ruby、capistrano) → リモートマシン達 (sshd ※)
※同じユーザ/パスワード
コマンド
基本的なコマンド
今のところ、使っているコマンドは下記の2つ
-
capify .
ひな形の作成。下記のファイルが作成される
l Capfile
L config
+ deploy.rb
Capfile
を読めばわかると思うが、中でload config/deploy
が呼ばれている。
なので、別のrbファイルをconfigに記述して読み込んでも良いみたい。
設定ごとにrbファイル作っていいかもね。って下記サイトに書いてある。
http://shibayu36.hatenablog.com/entry/2013/02/15/113811
-
cap
タスクの実行
ひな形の状態ならdeploy.rb
が実行される。
deploy.rbの記述方法
下記のように記述していくようだ。
set :user, "rasenn"
set :password, "password"
set :use_sudo, true
role :web, "192.168.1.2" , "192.168.1.3"
role :db, "192.168.1.4"
role :db, "192.168.1.5" , :primary => true
task :task_name, :roles => [:web], :only => {:ruby => true} do
run "#{sudo} command_with_sudo"
run "command 1"
run "command 2"
upload("upload_file", "upload_path", :via => :sftp, :recursive => true)
end
実行方法
下記のコマンドで実行。引数はdeploy.rb
のtask
の第一引数。
cap task_name
deploy.rbの説明
set
で変数(環境変数も?)をセットして、
role
でデプロイするサーバーをセットして、
実行するtask
を記述する。
set
は第一引数(シンボル)が変数名、第二引数が値。
role
は第一引数がマシンの役割、第二引数がサーバのアドレス。
task
は第一引数はタスク名、:roles
はタスクを実行するマシンの役割、:only
は実行条件。タスク名以外は省略可能。
run
はコマンドを文字列で渡せばいいらしい。
下記サイトをみてみると、メソッドの実行結果でコマンド文字列を返すようにすることもできるみたい。便利そう。
http://tk0miya.hatenablog.com/entry/2013/02/19/131453
upload
はファイルをアップロードする設定、第一引数がローカルのアップロードファイル、第二引数がリモートのアップロードパス、:via
はアップロード方法(:scp
と:sftp
があるらしい)、recursiveは第一引数のディレクトリ以下のすべてのファイルを転送先フォルダに転送する。
task
内にrole
とかを入れることもOKみたい。
下記のサイトでは引数によって(testとproduction)でデプロイ先を変える、ということが例として上がっていた。便利。
http://shibayu36.hatenablog.com/entry/2013/02/15/113811
他にもtask
の順序がいろいろあるらしくて、下記の場合、他のタスクの前に実行される、とか出来るみたい。
task :default do ~~ end
下記サイト参照
http://kenkennote.com/blog/2012/06/06/deploy-with-capistrano/
capistranoで設定できる設定値も上記のサイトに記述されています。
これを使うような仕事をしたいなー
とりあえず、今のところこんなところです。
もうちょっと調べたら追記します。
ハマったところ
sudo
sudo を使う場合、下記の設定を記述しなければならなかった。
参考サイト
default_run_options[:pty]=true
upload
アップロードで、SSHをパスワードなしでログインできるように、~/.ssh/id_rsa.pub
をアップロードしようとしたら失敗した。
普通にSFTPでcd ~
をしようとすると失敗するし、そりゃそうですよね。って感じ。
エラーもinitialize': expected a file to upload (ArgumentError)
ですし・・・