SlideShare a Scribd company logo
恋に落ちる
デプロイツール
「Capistrano」
   2012-12-15
自己紹介
• 徳永 貴久(とくなが たかひさ)
 • Groovenauts 勤め、RBC 所属
• twitter
 • @totty_jp
• Facebook
 • /takahisa.tokunaga.jp
アジェンダ
• デプロイ? かぴすとらーの?
• 超簡単!Capデプロイ
• 超基礎!Capデプロイ
• 実運用!Capデプロイ
• えっと!Capデプロイ
• 恋に落ちる Capistrano
デプロイ?
かぴすとらーの?
デプロイって何?
• デプロイとは、主にWebアプリケーション
 などのシステム開発工程において、システム
 を利用可能な状態にすること

• デプロイはソフトウェアのリリースやインス
 トールも含んだ意味の広い言葉

• Webアプリケーションを
             デプロイする 際、
 通常はサーバーを再起動して内容を反映させる
 必要がある(サーバーが再起動いらずなら、
 ホットデプロイと呼んだりする)
Capistranoとは
• 複数のサーバ環境で、並行にスクリプトを
 実行してくれる便利なツール

• サーバ上では優先的にBashコマンドライン
  として実行される(これマメね)

• つまり、デプロイ作業を自動化できる
• WEBアプリケーションのデプロイが得意
• Linux/OpenBSD/OS X♪
• Rubyで実装されてる♪
• ちなみに、wikipedia で Capistrano を
 調べてみました
地名の Capistrano
              ミラノ

• イタリア共和国
 カラブリア州
 ヴィボ・ヴァレン           ローマ


 ツィア県のコムーネ
 (イタリアの自治体
 の最小単位)の一つ    ナポリ




• 人口、1,140人
                          カピストラーノ
• さて、Capistrano使うと何が嬉しい?
• デプロイ作業を自動化できる => 効率化
   • 複数のサーバーに並行でデプロイ!
   • リリース時間の削減!
   • リリースの世代管理!
      • ロールバックも出来る!
• では、さっそく少しだけご対面 ❤
ちょっとCapistrano

• 必要なもの
 • SSH
 • Ruby
 • Terminal
 • 恋ゴコロ
ちょっと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
ちょっと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
ちょっとCapistrano

• あれ、今のって、単なる。。

• そう!やったのは、
• ssh localhost echo rbc
  mac$	
  ssh	
  localhost	
  “echo	
  LoveRBC”



• と同じ
ちょっと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$
ちょっとCapistrano
• だけど、こういう作業をまとめてタスクとして
 実行してくれる

• ついでに接続先のサーバも設定しておける
• それが、Capistrano の良いトコロ!
• 「サーバにログインして、たくさん作業する」
   • これを Capistrano さんは自動化して
   やってくれる ❤
超簡単!
Capデプロイ
準備(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
 • で起動しますね?
準備(Capistrano)
• いよいよ、Capistrano ❤
 #	
  for	
  mac
 mac$	
  capify	
  .
 [add]	
  writing	
  './Capfile'
 [add]	
  writing	
  './config/deploy.rb'
 [done]	
  capified!
 mac$




• さっきは、自分で作った「Capfile」と
 設定用のファイルが生成された
capコマンド

• capistrano の実行コマンド
 • cap!
 • cap!
 • cap!
Capfile

• cap コマンドで読み込まれるファイル
• capyfi で生成された Capfile は・・
 • capistrano ビルトインのデプロイレシピ
  と 設定用ファイル を load する内容に!

 • (ビルトインのデプロイレシピの内容は
   後ほど説明します)
設定(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
設定(Capfile)
•   ./Capfile
    #	
  Capfile
    load	
  'deploy'
    load	
  'config/deploy'

    require	
  "bundler/capistrano"
デプロイ
• デプロイの実行!
 #	
  for	
  mac
 mac$	
  cap	
  deploy:setup
 mac$	
  cap	
  deploy:cold




• かんりょー!超簡単!
デプロイ(イメージ)
超基礎!
Capデプロイ
Capistrano?

• Capistrano
 • 旧 switchtower
 • because of a trademark conflict.
 • March 2006
作業範囲
• Capistranoで出来るのは、SSHでの作業を
 タスクとして定義して実行すること

 • タスク化しなくてもできるけど。。
• SSHでやれることは出来る
• Shellスクリプト や Batchの代用に?
 • 複数サーバ(ローカルも含む)への
  並列実行が可能なShellスクリプト
Railsアプリのデプロイ
• Capistranoには、Railsアプリをデプロイ
 する便利なタスクのレシピが準備されている

• cap -T
 • 実行できるタスクが確認できる
 #	
  for	
  mac
 mac$	
  cap	
  -­‐vT




 • 何にもタスク作ってないよねー ❤
デプロイの流れ
• さっきのデプロイ実行
 #	
  for	
  mac
 mac$	
  cap	
  deploy:setup
 mac$	
  cap	
  deploy:cold




• SSHでデプロイ先にログイン
• 最新ソースコードの取得&配置(git, svn, ..)
• db:migrateを実行
• Apacheの起動
デプロイの流れ
✤ 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

     •   アプリ共有
デプロイの流れ
✤ 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
 •
Capistranoタスク

• Capistrano 標準で用意されてるタスク
 • deploy タスク -> setup, cold, start, ...
 • db タスク -> backup, export, restore, ...
 • utility タスク -> invoke, shell
• https://github.com/capistrano/capistrano/
  wiki/Capistrano-Tasks
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
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
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
実運用!
Capデプロイ
プラグイン
• 出力される表示に色付け
 • gem install capistrano_colors
• 複数環境に対応
 • gem install capistrano-ext
   • # 共通の設定
    • config/deploy.rb
   • # 環境毎の設定
    • config/deploy/development.rb
    • config/deploy/production.rb
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

        •
その他のデプロイツール


• Mina (http://nadarei.co/mina/)
 • もう少し成熟しないと使えないかも
 •
恋に落ちる
Capistrano
恋に落ちる要素


1. 第一印象

 アイコンタクト、無意識の動作や表情、
 オーラや雰囲気
恋に落ちる6つの要素


2. 共通点

 性格、趣味、なんでもイイ何か一つでもピンと
 くるもの
恋に落ちる6つの要素


3. 具体的価値

 自分に対して何をしてくれるか?
恋に落ちる6つの要素
4. エゴ

 自分自身が強みと感じているキャラクターや特
 技、容貌などを見つけて褒め称えることができ
 るか相手があなたの存在価値をとても大切にし
 てくれているという事もエゴを満たす条件

 「わたしにとって、あなたの存在が何よりも大
 切」と相手のエゴに訴えるのは効果的
恋に落ちる6つの要素

5. 男女の違いに対する理解

 多くの人が、恋愛関係に落ちる時に「あ、この
 人だけは、他の人とは違うかもしれない!」

 相手の気持ちを理解してくれることが大事
恋に落ちる6つの要素

6. (削除)

 公開向けとしては不適切な表現があった為、

 削除しました
考察

恋に落ちるかどうかは、あなた次第!

More Related Content

PDF
PHPとJavaScriptの噺
PDF
PHPデプロイツールの世界
PPTX
PHP x AWS でスケーラブルなシステムをつくろう
PPTX
Re: WebServer BenchMarking
PDF
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
PPTX
PHP7実環境ベンチ2016春
PDF
PHPの今とこれから2015
PDF
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS
PHPとJavaScriptの噺
PHPデプロイツールの世界
PHP x AWS でスケーラブルなシステムをつくろう
Re: WebServer BenchMarking
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai
PHP7実環境ベンチ2016春
PHPの今とこれから2015
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS

What's hot (20)

PDF
Laravel5.1 Release
PDF
いまどきのPHP開発現場 -2015年秋-
KEY
Composer による依存管理 と Packagist によるライブラリの公開
PDF
apachehereというPHPのBuiltin Serverっぽいやつをつくった
PPTX
今日から始めるLaravel
PDF
Laravel 5.1 LTSでサービスを作る
PPTX
誰にでもできるパフォーマンスチューニング
PDF
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
PDF
いまさらComposer
PPTX
Taming robotframework
PDF
誰でも出来るosxでのローカルなウェブ開発環境構築
PDF
Php非同期の技法
PDF
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
PPTX
Behat Driven Development
PDF
Cake php + php unitによる実践的ユニットテスト
PDF
Webフレームワークを作ってる話 #osakapy
PDF
PHPカンファレンス2014の懇親会飛び込みLT資料
PDF
php開発で使うタスクランナー gulp
PDF
フレームワークを使うべき 3 つの理由
PPTX
活動報告9 laravel5入門-
Laravel5.1 Release
いまどきのPHP開発現場 -2015年秋-
Composer による依存管理 と Packagist によるライブラリの公開
apachehereというPHPのBuiltin Serverっぽいやつをつくった
今日から始めるLaravel
Laravel 5.1 LTSでサービスを作る
誰にでもできるパフォーマンスチューニング
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
いまさらComposer
Taming robotframework
誰でも出来るosxでのローカルなウェブ開発環境構築
Php非同期の技法
脆弱性もバグ、だからテストしよう PHPカンファンレス2015
Behat Driven Development
Cake php + php unitによる実践的ユニットテスト
Webフレームワークを作ってる話 #osakapy
PHPカンファレンス2014の懇親会飛び込みLT資料
php開発で使うタスクランナー gulp
フレームワークを使うべき 3 つの理由
活動報告9 laravel5入門-
Ad

Similar to 恋に落ちるデプロイツール (20)

PDF
Capistrano in practice - WebCareer
PDF
Capistrano
PDF
Mina 20130417
PPTX
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
PDF
はてなにおける継続的デプロイメントの現状と Docker の導入
PDF
Capistranoで自動デプロイ
PDF
Capistrano紹介 at kawasaki.rb #002 #kwskrb
PDF
130207 kyotorb
PDF
capistrano-colorized-stream
PPTX
第7回 初心者向け Ruby on Rails勉強会 in 門前仲町
PDF
成長を加速する minne の技術基盤戦略
PDF
130412 kayac-cinnamon
KEY
Itcamp長崎2012 capistrano
PPTX
Capistrano introduction
KEY
Real world rails
PDF
AWS Black Belt Tech シリーズ 2015 - AWS CodeCommit & AWS CodePipeline & AWS CodeD...
PDF
WordPress CI/CD 入門 ~ GitHub Actions と AWS CodePipeline で実現する自動デプロイ~
KEY
Bundler kanazawa.rb meetup #2 2012/09/19
PDF
Cinnamon - simple deploy tool
PDF
Gaming cicd-pipeline gaming-technight-2
Capistrano in practice - WebCareer
Capistrano
Mina 20130417
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
はてなにおける継続的デプロイメントの現状と Docker の導入
Capistranoで自動デプロイ
Capistrano紹介 at kawasaki.rb #002 #kwskrb
130207 kyotorb
capistrano-colorized-stream
第7回 初心者向け Ruby on Rails勉強会 in 門前仲町
成長を加速する minne の技術基盤戦略
130412 kayac-cinnamon
Itcamp長崎2012 capistrano
Capistrano introduction
Real world rails
AWS Black Belt Tech シリーズ 2015 - AWS CodeCommit & AWS CodePipeline & AWS CodeD...
WordPress CI/CD 入門 ~ GitHub Actions と AWS CodePipeline で実現する自動デプロイ~
Bundler kanazawa.rb meetup #2 2012/09/19
Cinnamon - simple deploy tool
Gaming cicd-pipeline gaming-technight-2
Ad

恋に落ちるデプロイツール