酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

Vagrant/AWS + AnsibleでCentOS/Nginx/MySQL/RVM/Ruby2.1.2環境を構築

久々にVagrantでRails鯖を構築する必要があったので、勉強がてらAnsibleで作ってみました。Chefに比べるとシンプルで学習コストが低いのが素敵です。 でもChefにせよ、Ansibleにせよ、ハマリポイントがしっかり用意されていて、ちょっと手こずりました。もうちょっとフレキシブルに書けるようになりたい!

7/31 11:50 AWSのAmazon LinuxでもAnsibleの動作確認をしました。Ansibleの良さを実感中!


バックエンドの選択

バックエンドはVagrantかAWSのどちらかを使えます。 (検証しているのがAWSのAmazon Linuxだけという意味です。実際は、CentOS系ならある程度使えると思うっす)

(A) Vagrantを使う場合

Vagrantのインストール

Vagrant 公式サイト
パッケージをDLしてインストール。

VirtualBox

VirtualBox 公式サイト
パッケージをDLしてインストール。

(B) AWSを使う場合

AWSでAmazon Linuxを使う場合はAWSのコンソールから、インスタンスを起動。 (CentOS系の鯖なら同様の方法でやれます)

Ansibleの導入

MacでAnsibleを使えるようにする最低限のコマンド。

1
2
3
4
5
6
7
8
# Pythonのインストール
brew install python

# pipのインストール
sudo easy_install pip

# Ansibleのインストール
sudo pip install ansible

もう少しPythonの開発環境をしっかり構築したい場合は、拙著『Python開発環境構築 徹底解説[pyenv, Mavericks]』を良かったらご覧ください!

Ansibleの実行部分。

バックエンドに(A) Vagrantを使う場合と、(B) AWSを使う場合の手順です。

まずは共通部分。『morizyun/vagrant-ansible-rails - GitHub』のコードを入手して、Vagrantでサーバを起動。 起動したサーバにAnsibleを実行するまでの一連の手順です。

1
2
3
git clone https://github.com/morizyun/vagrant-ansible-rails

cd vagrant-ansible-rails

(A) Vagrantの起動、Ansibleの実行

1
2
3
4
5
chmod a+x set_vagrant.sh && ./set_vagrant.sh

export ANSIBLE_HOSTS=./ansible/hosts_vagrant

ansible-playbook ./ansible/playbook_vagrant.yml

(B) AWS + Ansibleの実行。

ansible/hosts_vagrantを参考にしつつ、hosts_productionを作成して、AWSのIPとSSHキー(pem)のパスを設定。 設定画完了したら、以下のコマンドを実行。

1
2
3
export ANSIBLE_HOSTS=./ansible/hosts_production

ansible-playbook ./ansible/playbook_production.yml

Railsのサンプルプロジェクトの作成

1
2
3
4
5
6
7
8
9
vagrant ssh
cd /var/rails
rvmsudo gem install rails bundler --no-ri --no-rdoc
rails new sample --database=mysql
cd sample
echo "gem 'therubyracer', platforms: :ruby" >> Gemfile
bundle install
bundle exec rake db:create
rails s

ブラウザでのアクセス

http://192.168.33.10/にブラウザをアクセスするとapp/フォルダの中のファイルにアクセスできます。

Vagrant Share

Vagrant Shareを使うとグローバルなURLを取得する事もできます。

まずは『Vagrant Cloud』でユーザー登録。

次に以下のコマンドを実行。

1
2
3
4
5
# Vagrant Cloudのユーザー名/パスワードを入力
vagrant login

# Vagrant Shareを実行
vagrant share

最後に出てきたURLがグローバルにアクセスできるURL。『http://xxxx.vagrantshare.com』とか。

GitHubリポジトリ

今回のVagrantfileをGitHubにも作っておきました!

morizyun/vagrant-ansible-rails

Vagrant Upで「Failed to mount folders」が出る場合

Mountのエラーが出る場合はこちらを試してみるといいかもです。

1
2
3
4
5
6
7
8
# Vagrantにsshで接続
vagrant ssh
sudo /etc/init.d/vboxadd setup
exit

# ローカルに戻ってVMを再起動
vagrant halt
vagrant up

ちなみにこちらの記事を参照させて頂きました!

vagrantでmountエラーの解決方法

Special Thanks

Vagrantでvagrantのデフォの秘密鍵じゃなくて自分のいつもの秘密鍵を使えるようにするシェルスクリプト - Qiita

Vagrant CloudのVagrant Shareを試してみたら凄すぎて鼻血出た - 憂鬱な世界にネコパンチ!

Rails - CentOS6.xでbundle installが遅い場合の対処 - Qiita

おすすめの書籍