読者です 読者をやめる 読者になる 読者になる

Vagrantのゆるい使い方 #vagrant #linux

VagrantはOSに依存しない開発環境を手軽に管理・配布することができるツールです。

私の環境の場合、開発環境にありがちな問題への対処としてVagrantを導入することにより、いくつかの問題を解決することができました。

  1. 開発環境構築の手順書を作成したいけど開発者のOSがバラバラ(WindowsでRubyのライブラリが動かない...)
  2. 複数案件を一台のPCで管理していて案件によりミドルウェアのバージョンが異なる
  3. 開発環境と本番環境のOSが異なるため各環境独自の不具合が発生してしまう

Vagrantは一般的にChefやPuppetと組み合わせることにより絶大な効果を発揮しますが、ChefやPuppetを使ったことのないエンジニアは覚えることが多くて少し敷居が高いと思っていました。

今回はChefやPuppetを使わずにゆるくVagrantを使う方法をご紹介します。

事前準備

必要なミドルウェアをインストールします。
Vagrant本体とVagrantのバックエンドで使用するVirtualBoxをインストーラの指示に沿ってインストールします。

VirtualBox Download
Vagrant Download

◎version

Vagrant 1.4.1

※余談ですが1.4.0にはRHEL系OSにプライベートIPが振れないバグがありました。

Vagrant Boxの導入

Vagrantはboxという単位でOSのイメージを管理します。
boxはココで確認できます。
CentOSDebian,Ubuntu,Gentoo, Archlinuxなど様々なOSのboxが公開されています。
今回はCentOS6.4のBoxをインストールします。

書式: vagrant box [処理] [box名] [box URL]
$ vagrant box add centos6_4 http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130731.box

CentOS6.4のboxをインストールすることができました。

Vagrantの基本

Vagrantの設定ファイルはVagrantfileというテキストファイルになります。このファイルに記載されている内容に沿ってミドルウェアのインストールやIPアドレスの設定などを行います。
まず手始めにCentOS6.4の開発環境を作ってみましょう。

Vagrantfileを配置するディレクトリを作成
$ mkdir ~/vagrant_tutorial
$ cd ~/vagrant_tutorial

Vagrantfileを作成
書式: vagrant init [box名]
$ vagrant init centos6_4

CentOS6.4を起動
$ vagrant up

これだけでCentOS6.4がVirtualBoxにインストールされました。
サーバへのアクセスにはSSHを使います。
VagrantではVagrantfileが配置されているディレクトリまで移動して「vagrant ssh」コマンドを実行することでSSHログインすることができます。

$ vagrant ssh

抜けるためにはexitコマンドを実行します。

$ exit

サーバをシャットダウンするにはhaltコマンドを実行します。

$ vagrant halt

サーバをまた起動するにはupコマンドを実行します。

$ vagrant up

ミドルウェアのインストール

Vagrantで作成した環境にどのミドルウェアをインストールするかは全てVagrantfileに設定します。
今回はmemcachedをインストールする設定を追記します。

Vagrantfileを開いてmemcachedのインストールコマンドとアクセスするためのIPアドレスを設定します。

本来はここでChefやPuppetを使うことが多いのですが、今回はゆるく使う方法なのでシェルでインストールコマンドを記述します。

$ vi Vagrantfile
~
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
~

# ここから
  # IPアドレスを設定
  config.vm.network :private_network, ip: "192.168.33.10"

  # 内部で実行するコマンドを設定
  config.vm.provision :shell, :inline => <<-EOS
    sudo chkconfig iptables off
    sudo yum -y install memcached
    sudo chkconfig memcached on
  EOS
# ここまでを追記

end

Vagrantを起動してprovisionを実行します。provisionはVagrantfileに記述したミドルウェアのインストールや設定などを仮想OS(今回はCentOS6.4)に適用する動作です。

$ vagrant up
$ vagrant provision

再起動
$ vagrant reload

これでVagrantfileに設定したコマンドが実行されmemcachedがインストールされました。

確認

VagrantにインストールしたOS外から接続を確認してみます。

$ telnet 192.168.33.10 11211

これで各OSで自由にインストールすることができる仮想OS上のmemcachedサーバができました。 Vagrantfileをプロジェクトのリポジトリにコミットしておくと、他の開発者はvagrant upで仮想OSを立ち上げるだけで、memcachedサーバをインストールすることができます。

Vagrant+シェルだけでもこれだけ簡単に環境を整えることができました。

参考

もっと高度に使用したい方はこちらの記事が参考になります。

nanapi勉強会でVagrant + Berkshelfについて発表しました | Engine Yard Blog JP