higehikiのブログ

iPhoneアプリ「ログ雀」の中の人です。

capistrano3でらくらくdeploy

AmazonLinux (CentOS6系) におけるcapistrano3の基本的構築手順です。

[ 前提条件 ]
phpアプリケーションサーバーを新規で構築します。
フレームワークはfuelphp1.6です。
webサーバーはapacheを利用します。
ソース管理はgitで行っています。
rubyは最新の2.1.0を利用します。

$ ruby -v
ruby 1.8.7 (2012-10-12 patchlevel 371) [x86_64-linux]

ruby 1.8.7がインストールされているところからスタート!

  • 必要なライブラリをインストールする
# wget http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm
# yum install php php-common php-mbstring php-pdo php-cli php-devel php-fpm php-mysqln php-devel php-mcrypt php-xml mod_ssl php-ldap php-odbc curl-devel php-pear pcre-devel gcc-c++ zlib-devel autoconf automake libtool bison readline-devel curl-devel libxslt-devel libxml2-devel libffi-devel openssl-devel httpd-devel ncurses-devel tk-devel bzip2 sqlite sqlite-devel make git libxslt-devel sqlite-devel httpd mod_ssl httpd-devel
# chkconfig httpd on
# exit
  • ruby最新版 2.1.0 を rvmでインストール
# curl -L https://get.rvm.io | bash -s stable
# rvm install 2.1.0
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-linux]
  • 一般ユーザーのrubyの向き先を変更
# rm /usr/bin/ruby
# rm /usr/bin/gem
# ln -s /usr/local/rvm/rubies/ruby-2.1.0/bin/ruby /usr/bin/ruby
# ln -s /usr/local/rvm/rubies/ruby-2.1.0/bin/gem /usr/bin/gem
# ln -s /usr/local/rvm/gems/ruby-2.1.0/bin/ruby_executable_hooks /usr/bin/ruby_executable_hooks
# gem install capistrano
# gem install capistrano-rvm
# cap install STAGES=development,staging,production

※デフォルトでは stagingとproductionの2環境の設定が自動生成されます。カスタムする場合は以下のように 環境変数にSTAGESで指定してあげればOKです。

    • Capfile
require 'capistrano/setup'
require 'capistrano/deploy'
require 'capistrano/rvm'
Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r }
    • config/deploy.rb
set :repo_url, 'git@github.com:XXXXXXX/YYYYYYY.git'
set :deploy_to, '/home/httpd/ZZZZZZZZ/'
set :scm, :git
set :rvm_ruby_version, "ruby-2.1.0-p0"
set :linked_files, %w{aaaaaa/public/.htaccess}
set :linked_dirs, %w{aaaaaa/fuel/app/logs aaaaaa/public/wordpress}

namespace :deploy do
  desc 'Restart application'
  task :restart do
    on roles(:app), in: :sequence, wait: 5 do
      execute :touch, "#{fetch :deploy_to}/tmp/restart.txt"
    end
  end
end
    • config/deploy/development.rb
set :stage, :development
set :branch, 'development'
set :deploy_to, '/home/httpd/XXXXXXXXX/'
role :web, 'localhost'
server 'localhost', user: 'user', roles: %w{web}

※今回はローカルに反映させるまでをゴールにした設定です。