Vagrant/AWS + AnsibleでCentOS/nginx/MySQL/RVM/Ruby 2.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を使えるようにする最低限のコマンド。

# 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を実行するまでの一連の手順です。

git clone https://github.com/morizyun/vagrant-ansible-rails
cd vagrant-ansible-rails

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

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)のパスを設定。
設定画完了したら、次のコマンドを実行。

export ANSIBLE_HOSTS=./ansible/hosts_production
ansible-playbook ./ansible/playbook_production.yml

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

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』でユーザー登録。

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

# 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のエラーが出る場合はこちらを試してみるといいかもです。

# Vagrantにsshで接続
vagrant ssh
sudo /etc/init.d/vboxadd setup
exit
# ローカルに戻ってVMを再起動
vagrant halt
vagrant up

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

vagrantでmountエラーの解決方法

🐡 参考リンク

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

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

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

📚 おすすめの書籍