Ruby on Rails + unicorn +ec2 + github + ansible 本番環境構築メモ

Ruby on Railsのファイルをそのままファイルアップロードしてはいけない

開発環境でRuby on Railsを構築したものをすべてgithubにプッシュするのはとても重くなるのでよくありません。特にvendor/bundleは重たいので本番環境で構築したほうがよいです。
Gemfileを更新したときは本番環境にも反映しそれ以外はansibleで簡単ファイルアップロードできるようにします。

railsのgitignore

railsのgitignoreサンプル

/.bundle
/log/*
/tmp/*
!/log/.keep
!/tmp/.keep
/storage/*
/node_modules
/yarn-error.log
/public/assets
.byebug_history
/config/master.key
vendor/bundle
/db/*.sqlite3
/db/*.sqlite3-journal
doc/
*.swp
*~
.project
.DS_Store
.idea
.secret
.keep

これぐらい削っておけばansible実行も軽くなりますし素早く本番リリースできます。

ansibleでec2にgithubでファイルをアップロードする

rolesを作ってansibleでgithubの内容をアップロードします。

rolesの/tasks/main.ymlの設定

- name: git clone hoge
git: >
repo=git@github.com:[git_user_name]/[repository_name].git
dest=[ec2のアップロード場所]
accept_hostkey=yes
key_file=[sshの鍵]
tags: hoge

ansibleを実行してec2にアップロードします。

ansible-playbook -i inventory hoge.yml --tags hoge

これで開発者が修正する部分のファイルのみ本番サーバーへアップロードが完了しました。

ec2でrailsの設定をする

実行したコマンド

1. sudo su
2. vi .bash_profile

export PATH
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

3. source .bash_profile
4. cd /var/www/html/example.com/
5. mkdir log
6. bundle install –path=vendor/bundle
7. bundle exec rake secret
8. export SECRET_KEY_BASE=`bundle exec rake secret`
9. bundle exec rake assets:precompile RAILS_ENV=production

説明

・2,3 rbenvを有効化しています。
・4 ansible実行しec2にファイルuploadしたディレクトリに移動します。
・5 logディレクトリはgitignoreで除外しているので本番で作成します。
・6 vendor/bundleを作成します。
・7 rake secretを生成します。
・8 7で生成したsecretを設定します。
・9 assetを設定します。
・最後にunicornを起動させれば完成です。
unicornの設定方法はWS+Nginx+Unicorn+Ruby on Railsでサーバー環境構築を参照してください。

一度本番環境を構築できればあとは
ansibleでファイルアップロードするだけなのでとても楽できます。