チュートリアルの続き
共有フォルダの話から

共有フォルダについて – SYNCED FOLDERS

簡単に仮想マシンをつくれるのはとってもクールだけど、その後で、SSHでつないでターミナル上でファイルの編集がしたいって人はそうたくさんいるもんじゃない。Vagratを使うと幸運にもそんなことをする必要はない。共有フォルダでVagrantが勝手に同期してくれる。

ゲストは/vagrantで共有する。これデフォルト。vagrant sshでログインしたときのホームディレクトリは/home/vagrant。これは共有ディレクトリの/vagrantとは違うので注意。

ターミナル上にguest addtions(virtual boxのあれ)に関するエラーがでていたら、boxをアップデートするか、別のboxを選ばないといけないかもしれない。 vagrant-vbguest pluginをいれると、エラーが解消されることもあるらしい。ただ、公式のサポート外になりますので。

vagrant upしてvagrant sshでログインした仮想マシン上の/vagrantディレクトリを見てみる。信じるか信じないかはあなた次第ですが、見えているVagrantfileはホスト上のVagrantfile(vagrant upしたディレクトリにあるやつ)と同じ。

vagrant@precise64:~$ ls /vagrant/
Vagrantfile
vagrant@precise64:~$ 
vagrant@precise64:~$ ls /vagrant/
Vagrantfile
vagrant@precise64:~$ 
vagrant@precise64:~$ touch /vagrant/foo
vagrant@precise64:~$ ls /vagrant/
foo  Vagrantfile
vagrant@precise64:~$ 

証明するために、適当に何かファイルでも作ってみるといい。ワォ!!fooファイルはたった今作ったやつじゃないか!これでホストマシンのお気に入りのエディタが使えるぞ。(ワオ!だって)

次、パッケージインストール、ユーザー追加、などのプロビジョニングについて

プロビジョニングについて – PROVISIONING

仮想マシンができて、ホスト上で編集したファイルをゲストに同期することもできる。で、webサーバーを作ってみる。

sshでログインしてwebサーバー用のパッケージをインストールするいつものやり方で構築はできるし、Vagrantoを使うときも同じことをしなくっちゃならない。いつものやり方の代わりにVagrantには自動プロビジョニングのためのビルトインサポートがある。この機能のおかげで、vagrant upをすればソフトウェアが自動的にインストールされる。だから、繰り返し同じゲストマシンを、すぐに使える状態で作ることができる。

apacheをインストールしてみる – INSTALLING APACHE

apacheのセットアップをしてみる。シェルスクリプトを使って。Vagrantfileがあるフォルダに、下の内容のシェルスクリプトをbootstrap.shという名前で作る。

#!/usr/bin/env bash

apt-get update
apt-get install -y apache2
if ! [ -L /var/www ]; then
  rm -rf /var/www
  ln -fs /vagrant /var/www
fi

次に、Vagrantを起動したときにこのシェルスクリプトを実行するようにVagrantfileを編集する。下のように,provision行を追加する。

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise64"
  config.vm.provision :shell, path: "bootstrap.sh"
end

上のようにprovision行を書くことで、Vagrantはbootstrap.shを使ったshellプロフィジョニングを行い、仮想マシンをセットアップする。bootstrap.shのパスは、ルートディレクトリ(Vagrantfileのあるディレクトリ)からの相対パスで指定する。

プロビジョニングしてみよう – PROVISIONING

設定を終えて、vagrant upを実行すれば、自動的に仮想マシンが作成される。ターミナル上にshellの出力が表示される。すでに仮想マシンが動いているときは、provisionフラグをつけてreloadコマンドを実行する[vagrant reload –provision]ことで仮想マシンがすぐに再起動されて、プロビジョンニングされた仮想マシンが起動する。

==> default: Running provisioner: shell...
・・・
==> default: Get:1 http://us.archive.ubuntu.com precise-updates InRelease [55.7 kB]
==> default: Get:2 http://security.ubuntu.com precise-security InRelease [55.7 kB]
・・・
==> default: The following extra packages will be installed:
==> default:   apache2-mpm-worker apache2-utils apache2.2-bin apache2.2-common libapr1
==> default:   libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap ssl-cert
・・・
==> default: Setting up apache2-mpm-worker (2.2.22-1ubuntu1.11) ...
==> default:  * Starting web server apache2

ゲストが起動するとwebサーバーの起動も完了しているはず。まだブラウザからは確認できないけれど。仮想マシン内にSSHでログインしてファイルを読み込んでみれば、プロビジョニングがうまくいって、webサーバが動いていることがわかる。

$ vagrant ssh
...
vagrant@precise64:~$ wget -qO- 127.0.0.1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
 <head>
  <title>Index of /</title>
・・・

ちゃんと動いているのは、さっきのシェルでapachのインストールとapacheのドキュメントルートの設定(デフォルトの共有ディレクトリである/vagrantに)が終わっているから。デフォルトの/var/wwwのシンボリックリンクを/vagrantにはっている。

vagrant@precise64:~$ ll /var/www
lrwxrwxrwx 1 root root 8 Dec 28 03:59 /var/www -> /vagrant/
vagrant@precise64:~$

次はネットワークの設定をして、ホストのブラウザからアクセスできるようにしてみる。

シェルプロビジョニングを使うことで、いろんなパッケージを都度導入して構築するのではなく、インストールしたいパッケージとVagrantボックスをまとめておくことができる。詳細はこのガイドでは触れないので、「packaging custom boxes」ドキュメントを参照すること。

ネットワーキング – NETWORKING

いま時点で、共有フォルダ上のファイルを編集し、シェルプロビジョニングを実行してWEBサーバーを立てたところ。でも、WEBページへのアクセスはターミナルで確認しただけで、それじゃちっとも満足しない。これから、Vagrantのネットワーク機能を使って、ホストから仮想マシンにアクセスできるようにオプションを追加していく。

ポートフォワーディング – PORT FORWARDING

ひとつめはポートフォワーディングオプション。この機能で、ゲストがホストとシェアするポートを指定することができる。フォワーディングするポートを設定すれば、ゲストのAPACHEにアクセスできる。Vagrantfileをちょっと編集すればオッケー。下のようにnetwork行を追加する。

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise64"
  config.vm.provision :shell, path: "bootstrap.sh"
  config.vm.network :forwarded_port, guest: 80, host: 4567
end

編集したら、vagrant reloadかvagrant upを実行すれば変更が反映される。

==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 80 (guest) => 4567 (host) (adapter 1)
    default: 22 (guest) => 2222 (host) (adapter 1)

ゲストが起動し終わったら、http://127.0.0.1:4567にブラウザからアクセスしてみる。Vagrantが自動的にセットアップしたwebページが見えるはずだ。
キャプチャ
見えた。

他のネットワーク設定 – OTHER NETWORKING

Vagrantで他にもネットワークの設定はできる。例えば、固定IPを割り当てたり、既存のネットワークに仮想マシンを繋いだり。興味があるなら「networking」ページを見てみて。

次へ

共有 – SHARE

開発環境ができました。さらなる開発環境とするために、Vagrantは環境の共有・共同が簡単にできる。そのための機能として、Vagrantは「Vagrant Share」と呼ばれる機能を持っている。

「Vagrant Share」で自分のVagrant環境につながるURLが生成されるので、インターネットを介して世界中の人たちと、あらゆるデバイスを介して環境を共有できる。

ATLASにログイン – LOGIN TO HASHICORP’S ATLAS

共有する前に、HashiCrop’s Atlasのアカウントが必要。無料だから安心して。アカウントを作って、vagrant loginしてみる。

vagrant_getting_started $ vagrant login
In a moment we will ask for your username and password to HashiCorp's
Atlas. After authenticating, we will store an access token locally on
disk. Your login details will be transmitted over a secure connection, and
are never stored on disk locally.

If you do not have an Atlas account, sign up at
https://atlas.hashicorp.com.

Atlas Username: xxxxxx
Password (will be hidden): 
You are now logged in.
vagrant_getting_started $ 

ログインできたので、vagrant shareを実行する。

vagrant_getting_started $ vagrant share
==> default: Detecting network information for machine...
    default: Local machine address: 127.0.0.1
    default:  
    default: Note: With the local address (127.0.0.1), Vagrant Share can only
    default: share any ports you have forwarded. Assign an IP or address to your
    default: machine to expose all TCP ports. Consult the documentation
    default: for your provider ('virtualbox') for more information.
    default:  
    default: Local HTTP port: 4567
    default: Local HTTPS port: disabled
    default: Port: 2222
    default: Port: 4567
==> default: Checking authentication and authorization...
==> default: Creating Vagrant Share session...
    default: Share will be at: anxious-raccoon-7666
==> default: Your Vagrant Share is running! Name: anxious-raccoon-7666
==> default: URL: http://xxxx-xxxx.vagrantshare.com
==> default:  
==> default: You're sharing your Vagrant machine in "restricted" mode. This
==> default: means that only the ports listed above will be accessible by
==> default: other users (either via the web URL or using `vagrant connect`).

vagrant shareをしてでてきたURLに飛んでみると、さっきたてたapacheのページがでてくる。でてきたー。

共有フォルダの中身を編集したら、またvagrant shareをしてURLを更新すれば、更新が反映された状態が見える。飛び先のURLは自分のvagrant環境だけのもの。インターネットにつながっていれば、どんなデバイスでもみることができる。

セッションをきるときはCtrl+C。vagrant shareでURLを更新してしまえば共有されることもない。

vagran shareは商用レベルのトラフィックに耐えうるよう設計されていないので、使う際は開発環境かあるいはQA環境での利用に止めることを推奨する。

次は、teardown