Capistrano公式ののREADMEを読んで解釈したことをまとめます。
Capistranoとは
Capistranoはデプロイのためのフレームワークです。
Rubyで書かれていて、Railsアプリのデプロイに使われることが多いですが、JavaやPHPのデプロイに使うこともできます。
インストール使えるようになるcap
コマンドを使って、デプロイを行います。
$ cd my-capistrano-enabled-project
$ cap production deploy
CapistranoはサーバーにSSH接続をして、デプロイに必要なスクリプトを実行します。
スクリプトはRakeタスクを書いて自分で定義することも、Capistranoコミュニティが提供しているライブラリ(gemなど)を利用することもできます。
以下、Rakeタスクのサンプルです。
task :restart_sidekiq do
on roles(:worker) do
execute :service, "sidekiq restart"
end
end
after "deploy:published", "restart_sidekiq"
特長
ファイル構造が明確
デフォルトで生成されるファイルの構造が良い感じなので、どこにどんな記述を書くのか、迷うことがありません。
複数環境へのデプロイ
qa環境、ステージング環境、本番環境など複数の環境へのデプロイの設定をする時、同じような設定を複数書くことなく、IPアドレスなどの環境固有の情報を記述するだけで済みます。
同時デプロイ
複数環境へのデプロイを同時に行うことができます。
タグ付け
通常、アプリケーションには複数のサーバー(webサーバー、アプリケーションサーバー、DBサーバなど)があります。
それぞれのサーバーにタグ付けをし、どのタスクをどのタグのサーバーで実行するかを定義することができます。
コミュニティが活発
Capistranoはgemを使って拡張することができます。よく使うデプロイのタスクのほとんどがgemによって提供されているので、自分で記述する量が最小限で済みます。
シンプルなSSHによる接続
Capistranoでできる全てのタスクは、SSH接続で手動実行できるタスクです。
シンプルな構造になっています。
注意点
デプロイ後の操作
デフォルトでは、コードをデプロイすることしかできません。
例えばデプロイ時にサーバーを再起動する必要がある場合などには、別途タスクを記述するか、gemを探してインストールする必要があります。
公開鍵認証を使ったSSH接続
Capistranoを動かすためには、予め秘密鍵と公開鍵を使ってサーバーにSSH接続できる状態になっている必要があります。
プロビジョニング
デプロイしたコードを動かすためには、予めサーバーに言語やデータベースやwebサーバーをインストールしておく必要があります。
sudo
デプロイ時に実行するコマンドの中にsudo
が必要なコマンドがあると、設定が複雑になってしまいます。
できるだけsudo
を含めないようにしましょう。
Shells
基本的にサーバーではbash or shを使うことを想定しています。
クイックスタート
必要条件
- Ruby 2.0以上
- Git等のツールでバージョン管理をしている
- デプロイ先のサーバーにGit等のツールがインストールされている
- BundlerでGemを管理していることが推奨されている
インストール
Gemfileのdevelopmentグループにrequire: false
を付けて記述
group :development do
gem "capistrano", "~> 3.14", require: false
end
$ bundle install
設定ファイルを生成
$ bundle exec cap install
以下のファイルが生成されます。
├── Capfile
├── config
│ ├── deploy
│ │ ├── production.rb
│ │ └── staging.rb
│ └── deploy.rb
└── lib
└── capistrano
└── tasks
ステージング、本番以外の環境も必要な場合は、以下のようなコマンドを叩きます。
$ bundle exec cap install STAGES=local,sandbox,qa,production
デフォルトでは最低限の設定しか書かれていないので、deploy.rb
とdeploy
ディレクトリ内のファイルを、環境に合わせて編集しましょう。
その他使えるコマンド
# list all available tasks
$ bundle exec cap -T
# deploy to the staging environment
$ bundle exec cap staging deploy
# deploy to the production environment
$ bundle exec cap production deploy
# simulate deploying to the production environment
# does not actually do anything
$ bundle exec cap production deploy --dry-run
# list task dependencies
$ bundle exec cap production deploy --prereqs
# trace through task invocations
$ bundle exec cap production deploy --trace
# lists all config variable before deployment tasks
$ bundle exec cap production deploy --print-config-variables
その他ドキュメント
ドキュメント
- GitHubのdocsディレクトリ
- このディレクトリの記述を元にCapistranoの公式サイトが作られています。
- Stack Overflowのcapistranoタグ
- メーリングリスト
- CodersClan
関連リポジトリ
-
capistrano/sshkit
- capistranoがSSH接続をする際の仕組みが記述されています。(taskの中で
execute
を実行する時、SSHKitが動いています。)
- capistranoがSSH接続をする際の仕組みが記述されています。(taskの中で
-
capistrano/rails
- Railsアプリをデプロイする時によく使われるgemです。
-
mattbrictson/airbrussh
- capistranoのログをフォーマットする時に使われます