LoginSignup
49
44

More than 5 years have passed since last update.

Capistrano3でGithubにあるコードをデプロイ

Last updated at Posted at 2014-08-26

初期設定

Capistranoのインストール

local(デプロイを行う場所)にCapistranoをインストールします

me@local $ gem install capistrano

デプロイ用ユーザーの作成

チーム内で共通のリリースを行いたいので、remote(デプロイ先のホスト)にそれ用ののユーザーを作成

root@remote $ adduser deploy
root@remote $ passwd -l deploy #パスワードログインを禁止

deployユーザーのauthorized_keysに公開鍵を追加

deployユーザーのauthorized_keysにローカルの公開鍵(Githubに登録済み)を追加。

me@localhost $ ssh root@remote
    root@remote $ su - deploy
    deploy@remote $ cd ~
    deploy@remote $ mkdir .ssh
    deploy@remote $ echo "ssh-rsa AAAAB3NzaC1yc2EA***********#公開鍵" >> .ssh/authorized_keys
    deploy@remote $ chmod 700 .ssh
    deploy@remote $ chmod 600 .ssh/authorized_keys

これによって、deployユーザーでsshログインできるようになり

me@local $ ssh deploy@remote

deploy@remote $

さらに、-Aオプションをつけ、鍵を持ち回る設定にすることで、Githubの認証も可能となる

me@local $ ssh -A deploy@remote 'ssh git@github.com'
    Hi kiriki-qwt! You've successfully authenticated, but GitHub does not provide shell access

.ssh/configの設定

deployユーザーのssh設定ファイルに以下を追記。

StrictHostKeyChecking no

deployユーザーにパスワードなしsudoを許可

Capistranoのタスク内でsudoをできるように、visudoで以下の行を追加

deploy ALL=NOPASSWD:ALL

タスク設定

Capistranoの初期化

アプリのディレクトリに移動してCapistranoを初期化する

me@local $ cd path/to/aplication_dir
me@local $ cap install

すると、以下のように自動でファイルが生成される

├── Capfile
  ├── config
  │   ├── deploy
  │   │   ├── production.rb
  │   │   └── staging.rb
  │   └── deploy.rb
  └── lib
      └── capistrano
              └── tasks

testタスクの作成、実行

config/deploy/以下に開発環境用の設定ファイルを作成して、server、user、rolesを記述

me@local $ vi config/deploy/development.rb


#config/deploy/development.rb
server 'remote.server.name', user: 'deploy', roles: %w{web}

config/deploy.rbをすべてコメントアウトし、以下のようなテストタスクを記述

#config/deploy.rb

desc "テストタスクです"
task :test do
  on roles(:web) do
    execute "pwd"
  end
end

cap -T を実行すると、テストタスクが表示されているはず。そのまま実行してpwdが実行されればOK。

me@local $ cap -T
  *****
  *****
  cap test                           # テストタスクです

me@local $ cap development test
  INFO[2d7af785] Running /usr/bin/env pwd on remote.server.name
  DEBUG[2d7af785] Command: /usr/bin/env pwd
  DEBUG[2d7af785]   /www/devel/kiriki
  INFO[2d7af785] Finished in 0.853 seconds with exit status 0 (successful).

デプロイタスクの作成、実行

いよいよGithubからコードをチェックアウトしてきます。

#config/deploy.rb

set :application, 'tech.qwtt.jp'
set :repo_url, 'git@github.com:github-repo.git'
set :deploy_to, '/www'#環境によってパスが変わる場合は config/deploy/***.rbに定義する

set :pty, true #タスク内でsudoするためにこれが必要!!

desc "deploy tech.qwtt.jp"
task :deploy do
  on roles(:web) do
    application = fetch :application
    deploy_to = fetch :deploy_to

    execute "sudo chown deploy:deploy #{deploy_to}"

    if test "[ -d #{deploy_to}/#{application} ]"
      execute "cd #{deploy_to}/#{application}; git pull; sudo sh setup.sh"
    else
      execute "cd #{deploy_to}; git clone #{fetch :repo_url} #{application}; cd #{application}; sudo sh setup.sh"
    end
  end
end
49
44
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
49
44