#初期設定
##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