これまでにデプロイサーバに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と同時にデプロイされる仕組みを検討する
■参考