以前作ったSumtimerをわけあってHerokuからAWS(EC2+RDS)に移したんだけど、git pushでのdeployは気に入ってたので頑張って設定した。その作業メモ。
やりたいこと
Railsアプリ(awesome-app)を、
Git Repository(git@example.com:awesome-app.git)にpushしたら、
自動的にhttp://awesome-app.example.com/にデプロイされる
手順
- サーバにユーザ’git’を作って公開鍵でsshログインできるようにしておく
- push先のリポジトリを作る
- 作ったリポジトリをリモートリポジトリとして登録しておく
- デプロイ先を作る。
- http://awesome-app.example.com/がデプロイ先を参照するようにしておく
- git pushにhookを仕掛ける
# サーバ側(example.com)での作業 # 事前にローカルPCの公開鍵(ここではid_rsa.pub)をRemoteの適当なところにコピーしておく sudo useradd -m -s /bin/bash git sudo su git mkdir /home/git/.ssh cat id_rsa.pub >> /home/git/.ssh/authorized_keys
# サーバ側(example.com)での作業。gitでログイン中。 mkdir ~/awesome-app.git cd ~/awesome-app.git git init --bare
# ローカルPC上での作業 git remote add production git@example.com:awesome-app.git
# サーバ側(example.com)での作業。gitでログイン中 mkdir ~/deployed cd ~/deployed git clone ~/awesome-app.git
(例:Apache/Passengerの場合)
<VirtualHost *:80> ServerName awesome-app.example.com DocumentRoot /home/git/deployed/awesome-app/public <Directory /home/git/deployed/awesome-app/public> AllowOverride all Options -MultiViews </Directory> </VirtualHost>
vi ~/awesome-app.git/hooks/post-receive chmod +x ~/awesome-app.git/hooks/post-receive
~/awesome-app.git/hooks/post-receiveの中身はこんな感じ。git pullしてbuild/migrateしてRailsをrestart
#!/bin/sh ( cd /home/git/deployed/awesome-app && git --git-dir=.git pull && bundle install --path vendor/bundler && RAILS_ENV=production bundle exec rake db:migrate && RAILS_ENV=production bundle exec rake assets:precompile && touch ./tmp/restart.txt )
以上で、git push production master
とやればデプロイされるようになりました。
Herokuみたいにちゃんとやるなら他にも色々やることありそうだけど、とりあえずヤッター!