vagrantを使ってubuntuでrails環境を自動構築

vagrantrails環境を作る

チーム開発でRails環境が必要になったので, vagrantで環境構築の自動化をやってみた.
今回は, vagrantとshellscriptを使って, VM作成~Railsプロジェクト作成までを自動化してみた.

必要なソフトウェアのインストール

僕が使ったのは以下の2つ

Virtualbox 8.0.28
Vagrant 1.8.6

rails環境を作る

github.com

このリポジトリgit cloneしてvagrant upするだけで, 以下の作業が行われる.

  1. VMの作成(ubuntu14.04 64bit)
  2. Railsプロジェクトの作成

構成はこんな感じ.

f:id:namu_r21:20161203212846p:plain

VirtualboxUbuntuを動かして, ruby, railsをインストールするという流れ.
vagrantを使うと, プロジェクト作成まで自動化することが出来るなんてすばらしい.

Vagrantfileの読み方

VMの構成を設定する

vm.boxでは, OSを指定する. 今回はubuntuの有力boxであるubuntu/trusty64を利用した.
vm.networkでは, VMが使用するIP, portを指定する.
VMとホストで通信するときはこのIP, PORTを利用する.
memoryやstorage, name, hostnameなどは適宜設定して欲しい.

VM上の環境を設定する

vm.provisionを使うことで, VM上の環境設定を行うことができる.
今回は, shellscriptを使って, 環境設定を行った.

config.vm.provision :shell, :path => "general_setup.sh", privileged: true
config.vm.provision :shell, :path => "rbenv.sh", privileged: false
config.vm.provision :shell, :path => "rails_practice.sh", privileged: false

vm.provision :shellとすることで, :pathに指定したスクリプトをshellscriptとして実行してくれる.
スクリプトの実行権限はprivilegedによって変更できる.
privileged: trueは, 管理者権限を表す. defaultはtrueである.

つまり, general_setup.shは管理者権限で実行され, rbenv.shは一般ユーザで実行される.

Vagrantでやることはこれだけ.
あとは, VM上で実行するコマンドをshellscriptに逐次書いていく.

shellscriptの書き方

注意したいのは, privilegedtrue/falseに関係なく, ルートディレクトリがsuのルートになることだ. script内部でpathを指定する場合や一般ユーザでインストールを行ったソフトの実行は絶対パスを指定する必要がある.
※ 僕はこれでめっちゃハマった

僕のVagrantfileでは, 3つのscriptに設定手順を書いている. Vagrantfileに記述した順番にscriptを実行していく.
つまり, general_setup -> rbenv -> rails_practiceの順に実行されていく.

shellscriptの内容は上記のgithubShuzoN/rails_practiceを参考にして欲しい.

vagrantの基本コマンド

www.vagrantup.com

cmd function
vagrant up VMの起動, VMが存在しない場合はVM作成. 初回はprovision自動実行
vagrant halt VMの停止
vagrant destroy VMの削除
vagrant ssh VMSSHで接続
vagrant status VMの状態を表示

vagrantを使ってみて

vagrantを使うことで, railsの環境設定を自動化した.

これまで環境設定にはかなりの時間を要してきた.
vagrantfileの共有だけでその問題が解決できるのはかなり便利だ.

あとは, もう少し効率的にやる方法を知りたいな...