edo1z blog

プログラミングなどに関するブログです

capistrano3でさくらレンタルサーバにGItHubのリポジトリをデプロイする

さくらレンタルサーバは環境変数設定ができず、capistrano3のデフォルトでgitリポジトリをデプロイしようとすると、GIT_ASKPASSという環境変数を設定しようとしてエラーになります。なのでデフォルトの機能を使わずにやってみます。

やることは、デプロイするサーバにsshで入って、pull用のディレクトリに移動して、githubリポジトリをpullします。データベース設定ファイルなどを入れ替えて、tmpディレクトリ内の不要ファイルなどを削除します。最後にドキュメントルートディレクトリに、pull用ディレクトリのシンボリックリンクをはります。まあ、これだともはやpull用とドキュメントルートを分ける必要がないと思いますが、capistranoのデフォルトの仕組みをつくるのが今めんどくさいですし、あくまで開発サーバなのでいいことにします。

mkdir hoge cd hoge cap install vim config/deploy.rb

デフォルトの内容を削除して、下記だけにします。

framework_tasks = [:starting, :started, :updating, :updated, :publishing, :published, :finishing, :finished]

framework_tasks.each do |t|
  Rake::Task["deploy:#{t}"].clear
end

Rake::Task[:deploy].clear

set :application, 'hoge'
set :repo_url, 'git@github.com:hoge/hoge.git'
set :log_level, :debug

vim config/deploy/staging.rb

set :user, "hoge"
set :pull_path, "/home/#{fetch :user}/cap/#{fetch :application}"
set :deploy_path, "/home/#{fetch :user}/www/#{fetch :application}"
server "hoge.com", user: fetch( :user), roles: %w{web}

set :ssh_options, {
  keys: %w(/hoge/.ssh/id_rsa),
  forward_agent: true,
}

task :git_pull do
  on roles(:web) do
      execute "cd #{fetch :pull_path}; git pull"
  end
end

task :deploy => :git_pull do
  on roles(:web) do
    execute "ln -sf #{fetch :pull_path} #{fetch :deploy_path}"
    execute "cp -f #{fetch :pull_path}/database.php #{fetch :pull_path}/app/Config/"
    execute "touch #{fetch :pull_path}/app/tmp/logs/empty; rm -rf #{fetch :pull_path}/app/tmp/logs/*"
    execute "touch #{fetch :pull_path}/app/tmp/cache/models/empty; rm -rf #{fetch :pull_path}/app/tmp/cache/models/*"
    execute "touch #{fetch :pull_path}/app/tmp/cache/persistent/empty; rm -rf #{fetch :pull_path}/app/tmp/cache/persistent/*"
  end
end

cap staging deploy

かなり色々な事前準備というか、特定の環境を前提にしたものでもあり、本番サーバとかだと絶対使えませんが、一応動きました。開発サーバにsshで入ってgit pullってやればいいことだし、githubのpushに連動もしてないので、これだけだとほぼ無意味かなと思いますが、capistrano3の使い方が大体分かってよかったです。

参考;入門 Capistrano 3 ~ 全ての手作業を生まれる前に消し去りたい超分かりやすかった。