Vagrant で仮想マシンを構築する(2) 仮想マシンへのプロビジョニング(shell script)
プロビジョニングとは、開発環境生成プロセスの一部として、仮想マシンへ自動的にソフトウェアのインストールや設定を行うことです。
Vagrant では、shell script、chef、puppet によるプロビジョニングをサポートしています。
今回は、shell script を使用したプロビジョニングを行います。
プロビジョニングはいつ実行されるか?
プロビジョニングは以下のタイミングで実行されます。
プロビジョニングで 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