Vagrant で仮想マシンを構築する(2) 仮想マシンへのプロビジョニング(shell script)

プロビジョニングとは、開発環境生成プロセスの一部として、仮想マシンへ自動的にソフトウェアのインストールや設定を行うことです。
Vagrant では、shell script、chef、puppet によるプロビジョニングをサポートしています。
今回は、shell script を使用したプロビジョニングを行います。

プロビジョニングはいつ実行されるか?

プロビジョニングは以下のタイミングで実行されます。

初回仮想マシン生成時にプロビジョニングしない場合は、vagrant up --no-provision を実行します。

プロビジョニングで Nginx をセットアップする

プロビジョニングに shell script を使って、nginx のインストール、ドキュメントルートの設定を行います。

1. 仮想マシン初期設定

$ mkdir -p vagrant_example
$ cd vagrant_example
$ vagrant init ubuntu/trusty64

2. Vagrantfile 設定

  • HTTP 通信のポートフォワード
  • 共有フォルダの設定
  • プロビジョニングの設定
$ vi Vagrantfile
Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.network "forwarded_port", guest: 80, host: 8888
  config.vm.synced_folder "./data", "/home/vagrant/data"
  config.vm.provision "shell", path: "./script/provision.sh"
end

3. プロビジョニング用 shell script 作成

$ mkdir -p script
$ cd script
$ vi provision.sh
#!/bin/bash

echo "Installing nginx and setting it up..."
aptitude update > /dev/null 2>&1
aptitude install -y nginx > /dev/null 2>&1
rm -rf /usr/share/nginx/html
ln -fs /home/vagrant/data /usr/share/nginx/html

4. 仮想マシン起動

$ vagrant up

起動した仮想マシンで nginx がインストールされていることを確認します。
仮想マシン起動時に default: stdin: is not a tty エラーになりますが、ubuntu の問題で動作には問題ないようです。

shell script によるプロビジョニング(補足)

プロビジョニング内容が単純な場合は、Vagrantfile に直接書くこともできます。

config.vm.provision "shell", inline: "aptitude install -y nginx"
  • 1度だけ実行したいプロビジョニング

1度だけ実行したいプロビジョニングは、初回にフラグファイルを作成して、フラグファイルがある場合はプロビジョニングしないようにします。

if [ -f "/var/tmp/provision" ]; then
  exit 0
fi

(処理)

touch /var/tmp/provision

Provisioning - Vagrant Documentation
Shell Scripts - Provisioning - Vagrant Documentation