PHPアプリをAWSにCapistranoで自動Deploy
最近インフラをコード化するのが流行りっぽい。
Chef、Capistranoとかjenkinsとか。
その中で自動DeployツールのCapistranoを使ってみた。
デプロイ先のサーバはAWSのEC2。
EC2は起動するたびに、IPが変わるのでElastic IP設定済みとする。
まずCapistranoをgemでインストール
・capistrano_colors
capistrano実行時の結果に色を付けてくれる
・capistrano-ext
deploy先の環境を切り分けることができる
・railsless-deploy
Rails以外のアプリをDeployするのに必要
インストール
$ sudo gem install capistrano $ sudo gem install capistrano_colors $ sudo gem install capistrano-ext $ sudo gem install railsless-deploy
ルートディレクトリで以下実行
$ capify .
Capfileと
configディレクトリと、その中にdeploy.rb、
が生成されます。
・実行結果
[add] making directory ‘./config’ [add] writing ‘./config/deploy.rb’ [add] writing ‘./Capfile’ [done] capified!
deploy先の環境を切り分けるための環境ファイルを作ります。
今回はproduction環境にdeployすると仮定します。
まず、configディレクトリの中にdeployディレクトリを作ります。
その中にproduction.rbを生成。
$ mkdir config/deploy $ touch config/deploy/production.rb
設定ファイルを書き換えます。
今回はgitを使用することを想定します。
deploy.rb
require "capistrano/ext/multistage" require "capistrano_colors" require "railsless-deploy" require "rubygems" # ↓アプリケーションのルートディレクトリ名となります set :application, "APP_NAME" set :user, "ec2-user" set :deploy_to, "/var/www/html/#{application}" set :deploy_via , :copy set :use_sudo, true set :scm, :git set :repository, "git@github.com:FOO/HOGE.git" set :ssh_options, :port=>22, :forward_agent=>true, :keys=>"PUBLIC KEY FILE", :passphrase => "PASSPHRASE" default_run_options[:pty] = true # deploy後、/var/www/html/にcpするのに、 # ディレクトリの所有者をec2-userに変える。↓ namespace :setup do task :fix_permissions do sudo "chown -R #{user}:#{user} #{deploy_to}" end end after "deploy:setup", "setup:fix_permissions"
なお、deployするディレクトリは先に作成しておく。
次に環境先ファイルの設定。
/config/production.rb
role :web, "Elastic IP" role :app, "Elastic IP" role :db, "Elastic IP", :primary => true set :branch, "master"
以上で設定終了。
1番最初だけ以下を実行
$ cap production deploy:setup
その後からは以下で可能
$ cap production deploy
するとターミナルにバーっと実行結果が流れて、deployできます。
あと適宜、ディレクトリの実行権限変更してください
nayamagu