Capistrano 実践Tips集

24
Capistrano 実実 Tips 実 2009/09/07 実実 実実

Transcript of Capistrano 実践Tips集

Page 1: Capistrano 実践Tips集

Capistrano 実践 Tips 集

2009/09/07

高倉 利明

Page 2: Capistrano 実践Tips集

目次

これだけは入れとけ!便利な gemこう記述しろ!設定ファイル意外と知らない?注意点

Page 3: Capistrano 実践Tips集

1.これだけは入れとけ!  便利な gem

・ capistrano_colors・ capistrano-ext

※ インストール方法は割愛。 ググれ!

Page 4: Capistrano 実践Tips集

capistrano_colors

使用前 使用後

何ができる?→capistrano の実行コマンド、 コメントなどを色づけしてくれる。 地味だけど便利。

Page 5: Capistrano 実践Tips集

capistrano-ext

何ができる?→ 環境に応じた capistrano 設定を差分ファイルで 上書きする事が可能になる。

Page 6: Capistrano 実践Tips集

capistrano-ext フォルダ構成

Root └ /config   └ deploy.rb ( 共通設定 )   └ /deploy    └ staging.rb ( staging 差分)    └ production.rb ( production 差

分)

Page 7: Capistrano 実践Tips集

capistrano-ext環境ごとの「 user 」を置き換えたいなら。。。

#config/deploy.rbset :user, “hogehoge“

#config/deploy/staging.rbset :user, “fugafuga“

#config/deploy/production.rbset :user, “piyopiyo“

Page 8: Capistrano 実践Tips集

capistrano-ext

ステージング環境へデプロイ

本番環境へデプロイ

$ cap staging deploy

$ cap production deploy

Page 9: Capistrano 実践Tips集

2.こう記述しろ!設定ファイル

(1) deploy.rb デフォルト記述(2) Passenger との連携設定(3) パスワードなどの動的入力(4) プッシュ式デプロイ

Page 10: Capistrano 実践Tips集

(1) deploy.rb デフォルト記述

Q. deploy.rb ファイル書くの面倒だよ!  何かいい手ない?

A. AP サーバで以下のデフォルトルールに従えば~ Rails の実行ユーザは「 app 」 アプリ設置場所は「 /u/apps 」 「 app 」ユーザに「 /u/apps 」以下のファイル

作成・削除権限を与える サーバに公開鍵などでの パスワード無し ssh ログイン可能

Page 11: Capistrano 実践Tips集

(1) deploy.rb デフォルト記述

7 行で済みます。#config/deploy.rbset :application, “test “set :scm, “subversion“set :scm_user, “hogehoge“set :scm_password, “fugafuga“

role :web, “web.test.com“role :app, “app.test.com“role :db, “db.test.com “

Page 12: Capistrano 実践Tips集

(2) Passenger との連携設定Q.Capistrano を Passenger と 連携させたいんだけど、 何か記述しておいた方が良い?

A.Passenger は「 tmp/restart.txt 」 にファイルがあると、自動的に そのアプリのみ再読み込みするので~

Page 13: Capistrano 実践Tips集

(2) Passenger との連携設定以下のように再起動タスクを記述しておくと便利。

#config/deploy.rbnamespace :deploy do task :restart, :roles => :app do run "touch #{current_release}/tmp/restart.txt” end

# 以下タスクは Apache 自体の起動 / 停止に使用。複数アプリを # 単一 Apache で公開している場合は使用しない方が良い task :start, :roles => :app do run "sudo /etc/rc.d/init.d httpd start " end task :stop, :roles => :app do run "sudo /etc/rc.d/init.d httpd stop " endend

Page 14: Capistrano 実践Tips集

(3) パスワードなどの動的入力

Q.capistrano でセキュリティ要件が厳しいとき、 以下のような要望が出てくる。 さあどうしよう?

セキュリティ要件でパスワードを設定ファイル上にベタ書きするのは NG

Subversion サーバのパスワードをデプロイ担当者ごとに使い分けたい

AP サーバのパスワードをデプロイ担当者ごとに使い分けたい

...etc

Page 15: Capistrano 実践Tips集

(3) パスワードなどの動的入力A.Capistrano::CLI を使用すれば

 動的入力できる!

#config/deploy.rb

# 入力(エコーバックあり)set :scm_user do Capistrano::CLI.ui.ask (“scm user:”)end

# パスワード ( エコーバックなし )set :scm_password do Capistrano::CLI.password_prompt(“scm pass:”)end

Page 16: Capistrano 実践Tips集

(4) プッシュ式デプロイ

AP サーバ

Capistrano 実行サーバ

Subversion サーバ

Q. セキュリティ上 AP サーバから Subversion リポジトリに アクセス出来ないんだって! これではデプロイできない。。。助けて!

Page 17: Capistrano 実践Tips集

(4) プッシュ式デプロイ

A. 「 deploy_via, :copy 」オプションを 使うことで、プッシュ式デプロイを行い

ましょう。

#config/deploy.rb

set :deploy_via, :copy

Page 18: Capistrano 実践Tips集

(4) プッシュ式デプロイ

AP サーバ

Capistrano 実行サーバ Subversion サーバ

deploy_via :copy を設定すると  1. capistrano 実行サーバにチェックアウト  2. AP サーバに gzip 圧縮して scp アップロード  3. AP サーバ上で展開して配置という流れでデプロイを行う事ができます。

Page 19: Capistrano 実践Tips集

3.意外と知らない?注意点

・ role:db の意味・ユーザのアップロード画像などは どこに置くべき?

Page 20: Capistrano 実践Tips集

role:db の意味

Q. role :db に指定するサーバは、 DB サーバで良いんだよね?

A. いいえ。  × : DB サーバ ○: Migration を実行するサーバ (ほとんどの場合 AP サーバと同じで良い)

Page 21: Capistrano 実践Tips集

ユーザのアップロード画像置き場所

Q. ユーザがアップロードした画像とか  doc ファイルとかって、 どこに配置しておくのが良いのかな?

Page 22: Capistrano 実践Tips集

ユーザのアップロード画像置き場所A.shared/system 以下にに置き、 capistrano で  public 以下へシンボリックリンクを 張りましょう。

myapp └ current └ releases---20091122010101( 最新アプリ ) └ shared └log  └ log └public  └ system └ user_img └ user_img

シンボリックリンク

シンボリックリンク

シンボリックリンク

Page 23: Capistrano 実践Tips集

ユーザのアップロード画像置き場所シンボリックリンクを張る例:#config/deploy.rb

after “deploy”, “deploy:link_images”

namespace(:deploy) do task :link_images do run <<-CMD cd #{release_path} && ln –nfs #{shared_path}/user_images #{release_path}/public/user_images CMD endend

Page 24: Capistrano 実践Tips集

ご静聴ありがとう

ございました。