Capistranoとは
CapistranoとはRubyで記述されたDSLを用いて複数のリモート環境を操作するためのツールである。
主な用途としてはアプリのデプロイで使われることが多い。
cap production deploy
RailsアプリをデプロイするときはCapistranoを整備して↑コマンドでデプロイすることが多いが、あまりにこの用途で使うことが多いため、
Capistranoはデプロイ専用ツールだと昔は思っていた。
が、実際にはCapistranoはデプロイ専用ツールではなく
“リモート環境を操作”するための汎用的ツールなので、デプロイ以外にもさまざまな用途で使うことができる。
ちなみにリモート環境への接続にはsshを使うため、クライアント、サーバともにsshに対応していないと使用はできないのは注意
Capistranoを試してみる
一度使ってみるとイメージがわくはずである
Capistranoはgemパッケージになっているので、gemコマンドを使ってインストールする。
capディレクトリを作成し移動
mkdir cap
cd cap
gemパッケージをダウンロード
gem install capistrano
設定ファイル等を作成
設定ファイル等のgeneraterが用意されているので、以下コマンドで作成
cap install
確認
tree
├── Capfile
├── config
│ ├── deploy
│ │ ├── production.rb #Capistrano3からは環境ごとに設定するのでこのようにファイルが分かれている
│ │ └── staging.rb #Capistrano3からは環境ごとに設定するのでこのようにファイルが分かれている
│ └── deploy.rb #基本の設定ファイル
└── lib
└── capistrano
└── tasks # 独自タスクなどを入れる
設定の前にコマンドの形式を見る
Capistranoは以下のようなコマンドの形式でタスクを実行することができる。
例)
cap [実行する環境] [実行するタスク]
cap production deploy
はproduction環境でdeployタスクを実行するを意味する。
(これによるproduction環境にデプロイすることができる)
ということは、先程作成した設定ファイルには、実行する環境の情報(接続環境のIP、PORT、ログインするUSERなど)や、実行するタスク(デプロイしたい場合、githubからgitリポジトリ取得…)などを記述していくことが想像できる。
今回はHello Capistrano タスクを作って、リモート環境としてローカルサーバでタスクを実行してみる。
(ローカルからローカルへタスクを実行してみる)
タスクを作成する
以下をdeploy.rbに追加する
desc ‘echo at remote server’
task :hello_capistrano do
on roles(:app) do
execute ‘mkdir created_cap_task’
end
end
execute ‘mkdir created_cap_task’なので
created_cap_taskディレクトリを作成する、というタスクである。
タスクを実行する
タスクを実行する前にはじめに述べたようにcapistranoはsshでリモート環境に接続する。
よってlocalhostで実行する場合はlocalhostへのsshを許可しておく必要がある。
Macの場合は
システム環境設定 < 共有 < ...
(実際にリモートサーバーでは実行するには、鍵登録等が必要になる)
準備ができたので、以下のコマンドを実行する
cap production hello_capistrano
(パスワードを求められるかもしれないので、その場合はsshのパスワードを入力)
00:00 hello_capistrano
01 echo "Hello, Capistrano!"
Password:
01 Hello, Capistrano!
✔ 01 localhost 3.262s
02 mkdir created_cap_task
✔ 02 localhost 0.011s
これにより、~/にcreated_cap_taskディレクトリが新規作成された。
まとめ
これが基本的な使い方である。
この使い方を応用すれば、操作したい(タスクを実行したい)リモート環境と独自タスクを定義しておくだけで、ワンライナーで色々実現することができる。
例えばRailsアプリのデプロイであれば、必要なタスクは、githubから最新のリポジトリを取得してサーバに配置、gemのインストール、マイグレーション、webサーバー再起動など、必要なタスクを定義しておけば良い。
これらのタスクをdeployという名前でまとめておけば、
以下のように1コマンドでアプリを公開できる。
cap production deploy
実際にはこれらもgemが用意されていて、ワンライナーでのデプロイ実行環境を比較的簡単に構築することができる。
cap -T
で登録されているタスクの一覧を見ることができる