vagrant で仮想サーバ構築

vagrant について触れてみたので基本的な使い方をまとめてみました。

vagrant とは

仮想の開発環境を簡単に構築、配布できる開発環境作成ツール。例えば、開発環境を構築する際に「○○の環境では動いているけど、xxの環境では動かない」なんてことで、その問題解決のために時間を費やしてしまったという人も多いかと思います。また、MacWindows で構築手順が異なり、それぞれの環境について手順をまとめなければならないということも考えられるかと思います。vagrant では仮想サーバを簡単に構築できることでそういった問題を解決する事ができます。さらに、サーバを構築し Box を作成、配布することで、どの環境でも作成した Box を追加してあげれば簡単に開発環境構築することができます。

使ったもの

仮想サーバの立ち上げ

今回は vagrantbox.es から Box を取得し、仮想サーバを立ち上げてみました。Box とは環境を構築するためのテンプレートになります。Box は以下のように vagrant コマンドを使って取得できます。

vagrant box add centos 
https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box

取得後、Box のリストを確認すると、 

vagrant box list

centos のBox があることが確認できます。ではサーバを立ち上げていきます。適当にディレクトリを作成して移動してから

vagrant init centos

とすると、Vagrantfile という設定ファイルができます。

サーバの起動は以下のコマンドを実行。

vagrant up

"vagrant status"、もしくは VirtualBox でサーバが実行中となっていることが確認できます。サーバを停止させたいときは "vagrant halt" とすれば停止します。他にもスリープは "suspend"、解除は "resume"、再起動は "reload" となります。

 仮想サーバに接続しWeb画面の表示

 仮想サーバに ssh で接続し、簡単にWeb画面を表示させてみます。

vagrant ssh

Web 画面表示させるため Web サーバをインストールし起動させます。

sudo yum -y install httpd
sudo service httpd start

ここで、vagrant を起動させるたびに Web サーバも毎回起動していては手間なので、vagrant 起動時に Web サーバも起動されるように設定しておきます。

sudo chkconfig httpd on

また外部からアクセスする際にファイアウォールの設定が ON になっていると何かと不便であることと、ローカル環境であるためファイアウォールは切っておきます。

sudo service iptables stop
sudo chkconfig iptables off

これで設定完了し Web サーバが起動したので html 作成してみます。

cd /var/www/html
sudo vi index.html

最後に作成した html を表示させてみます。その前に一度 exit し仮想サーバを reload させておきましょう。Web 画面にアクセスするには Vagrantfile の中身を確認します。

 # Create a private network, which allows host-only access to the machine



 # using a specific IP.



 config.vm.network :private_network, ip: "192.168.33.10"

いくつか手段はありますが、一つの方法として private_network を用いてアクセス、ここだと"192.168.33.10"で先ほど作成し index.html の中身が表示されます。

Macから仮想サーバのファイル編集

仮想サーバを用いて画面を表示出来るようになりましたが、毎回仮想サーバに入ってファイル編集、ファイルアップも面倒なので、Mac 上から仮想サーバのファイルを編集してみます。Vagrantfile の置かれたディレクトリは仮想サーバ内の /vagrant ディレクトリと同期されています。vagrant ディレクトリを見ると、Vagrantfile が置かれているはずです。そのため、先ほど作成した html ディレクトリにシンボリックリンクをはってあげれば、仮想サーバに入らなくてもファイル編集ができます。こんな感じです。

sudo ln -fs /vagrant /var/www/html

その他

今回、仮想サーバを立ち上げたあとに Web サーバをインストールし起動しましたが、Vagrantfile 内に config.vm.provision の設定を加えればサーバが立ち上がった際にprovisionが実行され、必要な設定を行ってくれます。この辺りは Chef 等で行っていくのがよいかと思います。

またこれらの設定を行った仮想サーバを box 化し、配布できる形にすればどんな開発環境に依存せず環境構築できます。box は以下のコマンドで簡単に作成できます。

vagrant package