Posted at

Capistrano3.x 基本のキ

More than 3 years have passed since last update.


概要

デプロイ自動化のために使ったCapistranoについて、

基本的なところをまとめました :sunny:

最初すこしとっつきにくさのあるCapistranoのことが少しでもわかりやすくなればと思ってます :relaxed:


Capistranoの基本



  • cap installで初期設定ファイルを生成


  • cap [env] deployってするとデプロイしてくれる


  • cap [env] deploy:rollbackでロールバックしてくれる


Capistranoの構成

capistrano/ ディレクトリ以下の構成について解説します。

cap [env] deployはCapfileがあるところで実行します。

そのため、設定ファイルで指定するルートはCapfileがある位置なので、相対パスを書きたい人はそこから書くことになるはずです :eyes:

以下はcap installした時にできる基本構成です。


  • capistrano/


    • config/

    • deploy/


      • develop.rb

      • staging.rb

      • production.rb



    • deploy.rb

    • Capfile



それぞれどんな役割があるか解説します。


Capfile

独自タスクの設定を読んだり、必要なプラグインを読んだりする。


config/deploy.rb

各環境で共通の設定を書くところ。

最初からある程度コメントアウトとかでついてくるので、公式を見ながらやるのがオススメです。

以下に少しだけ紹介します。


  • :repo_url


    • gitリポジトリのURL



  • :application


    • アプリケーション名(合ってもなくてもあんまり困らないかも)



  • :deploy_to


    • デプロイ先のディレクトリ指定



  • :branch


    • デプロイするブランチ名




config/deploy/[env].rb

各環境で個別のデプロイタスクや、変数を設定するファイル

cap [env] deployすればその設定ファイルを読んでデプロイしてくれる。


  • develop.rb

  • staging.rb

  • production.rb


デプロイの設定

基本的には、hookを使って何かcapistranoが実行している間に自分のやりたいタスクを挟んでいく感じです。

cf. Capistrano - Flow

deploy:starting    - start a deployment, make sure everything is ready

deploy:started - started hook (for custom tasks)
deploy:updating - update server(s) with a new release
deploy:updated - updated hook
deploy:publishing - publish the new release
deploy:published - published hook
deploy:finishing - finish the deployment, clean up everything
deploy:finished - finished hook

例えば、deploy:finishedを使って、デプロイ後にファイルの権限を変えたい時は以下のようになります。


namespace deploy do
task :change_mode do
on roles(:web) do
execute :sudo, "chmod 777 /path/to/change_mode.txt"
end
end
end

after "deploy:finished", "deploy:change_mode"

roleなどの細かい設定は今回は割愛 :persevere:

また余裕と要望があれば書きたいなと思います。


デプロイ後の構成

デプロイを実行すると、:deploy_toで設定したパスへデプロイされます。

デプロイされたアプリケーションがどのような構成になるか、解説します。

※今回の解説では、repoディレクトリについては割愛します :persevere:

デプロイ時の構成は以下のようになります


  • :deploy_to/


    • current/ -> releases/latest

    • releases/


      • 20150521 -> current

      • 20150408

      • 20150321



    • shared/


      • log -> :deploy_to/current/log



    • repo/




current

デプロイした最新のソースがシンボリックリンクとして作成される。

eg. current -> releases/20150521

ここがデプロイのたびにreleasesに入る最新のソースと切り替わることで、デプロイしたソースを反映しています。


releases

ソースの実体が入っていくディレクトリ。デプロイ完了したらcurrentにリンクされます。

eg.)


  • releases/


    • 20150521/ -> current

    • 20150518/

    • 20150428/




shared

デプロイしたソース共通で持っておきたいものにsymlinkを貼ってくれます。

例えば、同じログがreleases以下のディレクトリごとにできちゃったりするのを防いでくれます。(便利!

注意点としては、デプロイしたソースと同じ構成で、shared以下に配置する必要があります。

eg.)

deploy_to/current/log -> deploy_to/shared/log


まめち

2.x系と3.x系は結構違うらしいので、探すときはバージョンもつけた方がいいです。

eg.) capistrano3 ssh


さいごに

Capistranoはデプロイ自動化をとても簡単にしてくれる素晴らしいツールだと思います :blush:

少しでもヒューマンエラーが減って、効率よくデプロイできるようになれば幸いです :relieved:

間違った情報などありましたら、ご指摘いただければ幸いです。