Help us understand the problem. What is going on with this article?

10分でできる! Capistrano3とりあえず入門

More than 3 years have passed since last update.

Capistrano3を入れて、簡単なタスクを実行するまでやります。
とりあえず動かして感覚掴みたい人向け。

Capistrano概要

Ruby製デプロイツールです。

ただ、デプロイツールと言ってもその実態はSSH先の環境ごとに一連のRakeタスクを実行するだけです。
つまり必要な作業は

  • 鍵の作成、デプロイ先への登録
  • 環境ごとの設定
  • 実行したいタスク(任意のrubyまたはシェルコマンド)の記述

だけです。とっても簡単!

環境

以下環境で行いました
Ruby 2.1.1
Rails 4.0.3

鍵の作成

$ cd ~/.ssh/
# 鍵名capistrano(なんでもいいです)、パスフレーズ無しで作成
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/vagrant/.ssh/id_rsa): capistrano
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
...

今回はとりあえず実行ということでlocalhostにsshしようと思うので自身の~/.ssh/authorized_keysに先ほど作成した公開鍵を書き込みます

$ cat ~/.ssh/capistrano.pub >> ~/.ssh/authorized_keys

インストール

Capistrano3からはRails依存を辞め、bundlerやmigrateなどの各種機能をモジュールとして切り離しています。

Gemfileにcapistranoを追記

Gemfile
group :development do
  gem 'capistrano'
end

インストールしてひな形作成までします。

# capistranoインストール
$ bundle install

# ひな形作成
# cap はCaistranoの実行コマンド
$ bundle exec cap install
mkdir -p config/deploy
create config/deploy.rb
create config/deploy/staging.rb
create config/deploy/production.rb
mkdir -p lib/capistrano/tasks
create Capfile
Capified

作成したひな形をいじいじしていきます。

各種設定

Capfile

各種ライブラリをrequireする場所です。
最初からたくさんのrequireがコメントアウトされていますが、今回は関係ないのでこのままでOK!

config/deploy/環境名.rb

環境ごとの設定を記述します。

ひな形ではstaging.rbproduction.rbが生成されます。
ただRailsのデフォルトの環境はdevelopmentです。
なので今回はとりあえずstaging.rbをコピってdevelopment.rbを作成。

ここにdevelopment環境での設定を記述していきます。
が、今回は初期値のままでいきます。
localhostにsshする際の設定をしていきます。

development.rb
# 今ログインしているユーザをvagrantとした時の設定
# 'vagrant'とssh_optionsの鍵名'capistrano'は適宜自分の環境での名前に置き換えて下さい
role :app, %w{vagrant@localhost}
role :web, %w{vagrant@localhost}
role :db, %w{vagrant@localhost}

server 'localhost', user: 'vagrant', roles: %w{web app}, ssh_options: { keys: %w(~/.ssh/capistrano) }
  • role
    アプリケーションサーバー、Webサーバー、DBサーバーでの各ユーザ@ホスト名(or IPアドレス)を記述しておきます。
    タスクを記述する際にroleによって実行するタスクを振り分けて書くことができます。

  • server
    作業対象となるサーバーの情報を記述します。
    この場合localhostにwebとappのロールを付与して、vagrantユーザでログインするといった記述になってます。

config/deploy.rb

各環境で共通の設定を記述します。

gitのリポジトリのurlや出力するログレベルなどなどを書きますが、とりあえずこのままで。

タスクの作成

どこに記述してもいいんですが今回はdevelopment.rbに以下を記述します。

development.rb
desc 'my first capistrano task' # 無くてok
task :first_task do
  run_locally do
    # executeでシェルコマンド実行
    execute "echo hello wolrd"
  end
end

これ実はただのRakeタスクです。
:first_taskが実行時のタスク名。
でその中のブロック、ここではrun_locallyというのが、このタスクをどこで実行するかを示しています。
(他には例えばon role(:web)とするとwebロールを持つサーバーで実行されます。)

基本的にはさっきserverで指定したサーバーにsshでログインして、そこでタスクを処理していくのですが、
run_locallyとすることでsshせずcapコマンドを実行した場所(localhost)でタスクが走ります。

run_locallyにするとlocalhostにsshしてcapistranoを実行します。

Capistrano実行!

bundle exec cap 環境名 タスク名で実行します!

$ bundle exec cap development first_task
INFO [c812a6d9] Running /usr/bin/env echo hello wolrd on localhost
DEBUG [c812a6d9] Command: echo hello wolrd
DEBUG [c812a6d9]    hello wolrd
INFO [c812a6d9] Finished in 0.005 seconds with exit status 0 (successful).

色々出力されますが、どこかにhello worldと表示されてば成功です!

変更履歴

2016/03/09

環境を追記しました
当時Railsは4.0.3でした

2015/02/04

ssh周りを追記しました。
localhost(run_locally)で動かすときもlocalhostにsshして実行するがありました。

K_Yagi
webサービス作ってます 主な使用言語はruby
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした