More Related Content Similar to 恋に落ちるデプロイツール (20) 恋に落ちるデプロイツール2. 自己紹介
• 徳永 貴久(とくなが たかひさ)
• Groovenauts 勤め、RBC 所属
• twitter
• @totty_jp
• Facebook
• /takahisa.tokunaga.jp
8. 地名の Capistrano
ミラノ
• イタリア共和国
カラブリア州
ヴィボ・ヴァレン ローマ
ツィア県のコムーネ
(イタリアの自治体
の最小単位)の一つ ナポリ
• 人口、1,140人
カピストラーノ
13. ちょっとCapistrano
• まずは、capistrano インストール
#
for
mac
mac$
mkdir
~/foo
&&
cd
~/foo
mac$
rvm
gemset
create
lovecap
mac$
rvm
gemset
use
lovecap
mac$
gem
install
capistrano
-‐-‐no-‐ri
-‐-‐no-‐rdoc
14. ちょっとCapistrano
• Capfile
#
for
mac
mac$
touch
Capfile
mac$
mac$
cap
HOSTS=localhost
COMMAND="echo
LoveRBC"
invoke
*
2012-‐12-‐14
20:31:54
executing
`invoke'
*
executing
"echo
LoveRBC"
servers:
["192.168.1.158"]
[192.168.1.158]
executing
command
**
[out
::
192.168.1.158]
LoveRBC
**
はリモート上
command
finished
in
19ms
mac$ での実行結果
#
for
mac
mac$
cap
HOSTS=192.168.1.158
-‐s
user="rbc"
COMMAND=”echo
LoveRBC”
invoke
16. ちょっとCapistrano
• タスク化
#
Capfile
desc
"echo
message"
task
:echo_msg
do
run
"echo
#{msg}"
end
#
for
mac
mac$
cap
HOSTS=localhost
-‐s
msg="LoveRBC"
echo_msg
*
2012-‐12-‐15
14:15:10
executing
`echo_msg'
*
executing
"echo
LoveRBC"
servers:
["localhost"]
[localhost]
executing
command
**
[out
::
localhost]
LoveRBC
command
finished
in
182ms
mac$
19. 準備(Rails)
• まずは、rails アプリ
#
for
mac
mac$
rvm
gemset
use
lovecap
mac$
gem
install
rails
-‐v
3.2.1
-‐-‐no-‐ri
-‐-‐no-‐rdoc
mac$
rails
new
lovecap
mac$
cd
lovecap
mac$
rails
s
• http://localhost:3000
• で起動しますね?
20. 準備(Capistrano)
• いよいよ、Capistrano ❤
#
for
mac
mac$
capify
.
[add]
writing
'./Capfile'
[add]
writing
'./config/deploy.rb'
[done]
capified!
mac$
• さっきは、自分で作った「Capfile」と
設定用のファイルが生成された
23. 設定(deploy.rb)
• config/deploy.rb
#
config/deploy.rb
set
:application,
"lovecap"
set
:repository,
"."
set
:scm,
"none"
set
:user,
"rbc"
set
:password,
"password"
set
:deploy_to,
"/var/#{application}"
set
:deploy_via,
:copy
set
:copy_compression,
:zip
set
:bundle_dir,
"./vendor/bundle"
default_run_options[:pty]
=
true
role
:web,
"192.168.1.158"
role
:app,
"192.168.1.158"
role
:db,
"192.168.1.158",
:primary
=>
true
24. 設定(Capfile)
• ./Capfile
#
Capfile
load
'deploy'
load
'config/deploy'
require
"bundler/capistrano"
25. デプロイ
• デプロイの実行!
#
for
mac
mac$
cap
deploy:setup
mac$
cap
deploy:cold
• かんりょー!超簡単!
31. デプロイの流れ
• さっきのデプロイ実行
#
for
mac
mac$
cap
deploy:setup
mac$
cap
deploy:cold
• SSHでデプロイ先にログイン
• 最新ソースコードの取得&配置(git, svn, ..)
• db:migrateを実行
• Apacheの起動
32. デプロイの流れ
✤ deploy:setup #
cap
deploy:setup
#
で生成されるディレクトリ
• 初回のみ実施
• デプロイに必要な /u/apps/xxx/
ディレクトリ生成 /u/apps/xxx/releases
/u/apps/xxx/shared
• 生成されたディレクトリの /u/apps/xxx/shared/system
パーミッション変更 /u/apps/xxx/shared/log
/u/apps/xxx/shared/pids
• releases
• デプロイ先
• shared
• アプリ共有
33. デプロイの流れ
✤ update_code #
cap
deploy:cold
でデプロイ
• ソースコードの取得 ・deploy:cold
・deploy:update
• release dir に展開
✤ bundle install
==
transaction:
start
==
・deploy:update_code
• 必要なgemをインスコ
・bundle
install
(opt)
✤ finalize_update
・deploy:finalize_update
• sharedのシンボリック
・deploy:create_symlink
==
transaction:
finish
==
✤ create_symlink
・deploy:migrate
• currentのシンボリック
・deploy:start
•
34. Capistranoタスク
• Capistrano 標準で用意されてるタスク
• deploy タスク -> setup, cold, start, ...
• db タスク -> backup, export, restore, ...
• utility タスク -> invoke, shell
• https://github.com/capistrano/capistrano/
wiki/Capistrano-Tasks
35. DSL - Action Module
• DSLで利用できるアクションModule
• 実行系 -> run, sudo, parallel
• 確認系 -> capture, stream
• 転送系 -> put, get, upload, download
• https://github.com/capistrano/capistrano/
wiki/2.x-DSL-Documentation-Action-
Module
36. DSL - Config Module
• DSLで利用できる設定Module
• 役割 -> role, server
• 宣言 -> desc, namespace, task, before, ...
• 変数 -> set(), fetch(), ...
• 実行 -> transaction(), on_rollback(), ...
• https://github.com/capistrano/capistrano/
wiki/2.x-DSL-Documentation-
Configuration-Module
37. DSL - Config Variables
• DSLで利用できる設定変数
• :application (必須)
• :user (sshユーザ), :password (sshパスワード)
• :scm (デフォ:Git), :scm_name, :scm_password
• :repository (レポジトリURL)(必須)
• :deploy_to (デプロイ先)
• :deploy_via (デプロイ方式) (デフォ:checkout)
• -> checkout, export (デプロイ先で), copy (デプロイ元で)
• https://github.com/capistrano/capistrano/wiki/2.x-
Significant-Configuration-Variables
39. プラグイン
• 出力される表示に色付け
• gem install capistrano_colors
• 複数環境に対応
• gem install capistrano-ext
• # 共通の設定
• config/deploy.rb
• # 環境毎の設定
• config/deploy/development.rb
• config/deploy/production.rb
40. Redmineをデプロイ
• config/deploy.rb
#
for
mac
mac$
mkdir
~/redmine
&&
cd
~/redmine
mac$
rvm
gemset
use
lovecap
mac$
cap
deploy:setup
mac$
cap
deploy:cold
• ( 実際のファイルを表示します)
• https://github.com/totty/redmine_deployer/blob/master/config/
deploy.rb
• 前提
• デプロイ先のサーバにパッケージ入ってる
• subversion(git), apache, sqlite, ruby
• gem: bundler, passenger
•