年中アイス

いろいろつらつら

vagrantを使った簡単仮想サーバ環境の準備

サーバ環境を作る時に、VirtualBoxを使って仮想サーバを作るとしても、GUI仮想マシン作って、起動してOSイメージ読み込ませて。。。とやってると非常に手間です。

そんなわけで、ちょっと前ぐらいから熱い感じのvagrantを使って、簡単に環境を作れるようにします。

環境(ちょっと前に試してたので、若干バージョンが古いです)

OS MacOS Mountain Lion(10.8.2)
VirtualBox 4.2.10 for MaxOSX)
vagrant 1.1.5

vagrantの1.0,1.1系で違うようなので、今最新の1.2系もまた変わっているところがあるんでしょうか。
Vagrantにちゃんと載ってたりするので、そこはちゃんと読めば大丈夫かも。

準備

MacOS版のVirtualBox.dmgをダウンロード
Downloads – Oracle VM VirtualBox

MacOS版のVagrant.dmgをダウンロード
Vagrant - Downloads

どちらも、dmgファイルを実行してインストールします。

まず、Boxを作ります。Boxは、あらかじめ作られた仮想サーバイメージです。下記のURLに、CentOSUbuntuなどがあります。
A list of base boxes for Vagrant - Vagrantbox.es

今回はUbuntuを使いたいので、'Ubuntu precise 64'を使いました。*1
vagrant add boxコマンドで、対象のイメージを読み込みます。

# vagrant add box 任意のBox名 BoxのURL
$ vagrant add box base http://files.vagrantup.com/precise64.box

このあと、任意のBox名(base)は、Vagrantfileという設定ファイルで使用します。
いくつも作れるので、いくつか取り込んでおいてもいいと思います。

仮想サーバの作成

任意のディレクトリを作成します。

$ mkdir vagrant
$ cd vagrant

その中でまず、vagrant initを実行して、Vagrantfileを作成します。

$ vagrant init
$ ls
Vagrantfile

$ vi Vagrantfile
Vagrant.configure("2") do |config|
  #...設定例がたくさん...
end

たった2行書くだけで、すぐ使えます。

Vagrant.configure("2") do |config|
  # 使用するBoxの指定。ここで先ほどvagrant add boxで追加した'任意のBox名'を指定します。
  # config.vm.box="使用したいBox名"
  config.vm.box="base"

  # プライベートネットワークアドレスを割り当てます。これはそのままですね。
  config.vm.box.network :private_network, ip:"192.168.50.12"
end

仮想サーバの起動

そして、起動!

$ vagrant up
  # 長い起動ログ。少し時間かかります。

特に失敗無く起動すると、もう使えるようになります。

$ vagrant ssh
  • もしくは、プライベートアドレスで割り当てたIPに直接sshもできます。
# ユーザ名とパスワードはvagrant
$ ssh vagrant@192.168.50.12
  • ちなみにSSHでパスワードなしの鍵ログインも可能です。

~/.vagrant.d/insecure_private_keyに鍵が作成されるので、~/.ssh/configに以下を追加しておくと、ssh aliasnameだけで繋ぐことも出来ます。

# ~/.ssh/config
Host aliasname
  hostname 192.168.50.13
  Identifer_file ~/.vagrant.d/insecure_private_key

仮想サーバの停止

仮想サーバを止める時は、以下のコマンドで止めます。

$ vagrant halt

感想

これだけで、すぐ新しいサーバが準備できます。便利です!今まで、VirtualBox入れて、isoイメージからインストールしてたのは何だったんでしょう。これなら開発環境の準備や、検証などがすぐ出来ます。失敗できる環境があるのは怖くなくてよいです。

複数サーバも作れるので、Web/DBサーバ構成を試したり、サーバ間での動作を確認するのにも使えます。また、vagrantにはプラグイン機能があります。*2
各所で紹介されている、Saharaというサーバのある時点の状態を記録しておいて、ロールバックできるプラグインが便利です。

そのあたりはまた今度。

参考

Vagrant

*1:これサーバ版なのかよくわからず

*2:vagrantのバージョンがあがってから、対応しているのがどのぐらいあるのかわかりませんが