capistrano+gitでソースコードのデプロイサーバ構築④(capistranoの設定)


これまでにデプロイサーバにgitサーバのインストール、capistranoのインストールを行い、デプロイ先のWebサーバを構築してきました。

今回は、gitに登録されたファイルをデプロイサーバからWebサーバにcapistranoを使用してデプロイする簡単な設定を行います。

■設定前の前提条件
前回までのデプロイサーバ・デプロイ先サーバの構築を行っている
・gitサーバには仮に下記の状態でリポジトリにコミットされているものとする

git@git.example.com:/home/git/repos/test.git
public_html
┗index.html

■capistranoの初期化
deployユーザーにてデプロイサーバで下記のコマンドを実行

$ cap install

自動的に下記のファイルが生成されます

┣Capfile
┣config/
┃┗ deploy/
┃ ┣ production.rb
┃ ┣ staging.rb
┃ ┗ deploy.rb
┗lib/
 ┗capistrano/
  ┗tasks/

■デプロイ先サーバの鍵認証秘密鍵を設置
デプロイ先サーバのdeployユーザーのid_rsaファイルをデプロイサーバに設置します。

/home/
┗deploy/
 ┗.ssh/
  ┣id_rsa ←このファイルをデプロイサーバに設置
  ┗id_rsa.pub
$ cat ~/.ssh/id_rsa
デプロイサーバで
$ vi ~/config/web_deploy.id_rsa
上記の表示内容を貼り付けて保存
$ chmod 600 ~/config/web_deploy.id_rsa

ログインできるか確認

$ ssh -i /home/deploy/config/web_deploy.id_rsa deploy@デプロイ先サーバ名

■capistranoの設定
・config/deploy/production.rbの設定

role :app, %w{deploy@example.com}
role :web, %w{deploy@example.com}
role :db,  %w{deploy@example.com}
          ↓ ↓
role :app, %w{deploy@デプロイ先サーバ名}
#role :web, %w{deploy@example.com}
#role :db,  %w{deploy@example.com}

server 'example.com', user: 'deploy', roles: %w{web app}, my_property: :my_value
         ↓ ↓
server 'デプロイ先サーバ名', user: 'deploy', roles: %w{web}

#  set :ssh_options, {
#    keys: %w(/home/rlisowski/.ssh/id_rsa),
#    forward_agent: false,
#    auth_methods: %w(password)
#  }
     ↓ ↓
   set :ssh_options, {
     keys: %w(/home/deploy/config/web_deploy.id_rsa),
     forward_agent: true,
   }

・config/deploy.rbの設定

set :application, 'my_app_name'
set :repo_url, 'git@example.com:me/my_repo.git'
         ↓ ↓
set :application, 'test'
set :repo_url, 'git@デプロイサーバ名:/home/git/repos/test.git'
set :branch, 'master'

# set :deploy_to, '/var/www/my_app_name'
        ↓ ↓
set :deploy_to, '/var/www/html'

# set :scm, :git
        ↓ ↓
set :scm, :git

# set :format, :pretty
    ↓ ↓
set :format, :pretty

# set :log_level, :debug
    ↓ ↓
set :log_level, :debug

# set :keep_releases, 5
    ↓ ↓
set :keep_releases, 5

■デプロイ
デプロイ元deployユーザーにて

$ cap production deploy

上記により下記の様な構造が出来上がる

/var/www/html/
┣ current -> /var/www/html/releases/20150103144422
┣ releases
┃ ┗ 20150103144422
┃    ┣ public_html
┃    ┣ ┗index.html
┃    ┗ REVISION
┣ repo
┃ ┣ branches
┃ ┣ config
┃ ┣ description
┃ ┣ FETCH_HEAD
┃ ┣ HEAD
┃ ┣ hooks
┃ ┃┣ applypatch-msg.sample
┃ ┃┣ commit-msg.sample
┃ ┃┣ post-update.sample
┃ ┃┣ pre-applypatch.sample
┃ ┃┣ pre-commit.sample
┃ ┃┣ prepare-commit-msg.sample
┃ ┃┣ pre-push.sample
┃ ┃┣ pre-rebase.sample
┃ ┃┗ update.sample
┃ ┣ info
┃ ┃┗ exclude
┃ ┣ objects
┃ ┃┣ info
┃ ┃┗ pack
┃ ┃  ┣ pack-305bb921b5ec84044fc753f63d09681b6e2f73a4.idx
┃ ┃  ┗ pack-305bb921b5ec84044fc753f63d09681b6e2f73a4.pack
┃ ┣ packed-refs
┃ ┗ refs
┃   ┣ heads
┃   ┗ tags
┣ revisions.log
┗ shared

/var/www/html/currentは最新のリビジョンのディレクトリへシンボリックリンクが貼られている
そのため、/var/www/html/current/public_html/ をドキュメントルートとして再設定する

■ドキュメントルートの再設定

# vi /etc/httpd/conf/httpd.conf
DocumentRoot "/var/www/html"
     ↓ ↓
DocumentRoot "/var/www/html/current/public_html"

<Directory "/var/www/html">
     ↓ ↓
<Directory "/var/www/html/current/public_html">

Apacheの再起動

# service httpd restart

デプロイ先サーバにブラウザからアクセスし、index.htmlの内容が表示されることを確認

次回post-receiveを使いPUSHと同時にデプロイされる仕組みを検討する

■参考

投稿者:

nikuatsu

大学時代にWebアプリ開発を中心とした会社を企業し、約15年経営した末に倒産。現在はとあるインターネット上でのビジネスを展開する企業の開発部門で、あらゆる技術関連について対応している。 スキルの範囲: ・主にPHPを中心としたWebアプリケーション開発 ・Linuxサーバを中心としたインフラストラクチャー全般 ・MySQL、PostgreSQLを中心としたRDBMSの設計、運用 ・Objective-CによるiPhoneアプリの開発 などなど。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です