2013年8月10日土曜日

Vagrantドキュメントを意訳してみる Getting Started後篇

多分こんな感じなはず。(たぶん)
オリジナル: http://docs.vagrantup.com/v2/getting-started/index.html

前篇
中篇


VMをストップ!

前篇・中編を通して基本的なWeb開発に必要な機能を持ったVMができあがりましたが、
例えば、途中で別のプロジェクトにとりかからなければダメだったり、
ちょうどランチに行く時間だったり、家に帰る時間だったとすると、
(要はVMを止めたいということですね)
さっき作ったVMをどうしたらいいでしょう?

Vagrantだと、suspend・halt・destroyコマンドでVMの停止ができます。
それぞれ長所もあれば短所もありますので、
ケースバイケースで使いわければよろしいかと思われます。

1. vagrant suspend
 vagrant suspendコマンドは現状を保存しつつVMを停止することができます。
再びVMを使いたいときはvagrant upコマンドを実行するだけで、
VMは停止した時と同じ状態で再開します。
suspendする主なメリットは、むちゃくちゃ速いところです。5-10秒で停止&再開出来ます。
デメリットは、VMがディスクスペースを食うところです。
VMのメモリ上の情報もディスクに保存しなければならないため余分にディスクを食います。

2. vagrant halt
 vagrant haltコマンドはVMのOSをシャットダウンしてVMの電源を落とします。
vagrant upすることでもう一度ブートできます。
この方法のメリットは、VMのディスクを保存しつつ、きれいにシャットダウンできることです。
デメリットは、再起動するまでに少し時間がかかることと、
ホストマシンのディスクを食ってしまうことです。

3. vagrant destroy
 vagrant destroyすると、VMを作った痕跡を完全に消し去ります。
VMを止め、電源をOFFし、VMのハードディスクを完全に消し去ります。
ただし、再び作業を始めたいときはvagrant upするという点は他と一緒です。
メリットはディスクスペースを全く食わないという点です。
デメリットはもう一度OSをインストールしプロビジョンしなければならないので、
起動に時間がかかるところです。

VMの再構築(再開)

明日であろうと来週であろうと一年後であろうとVMを再起動するのはとても簡単です。

$ vagrant up

VMの環境はVagrantfileによって完全に管理されているので、
たったこれだけで再構築できるんです。

プロバイダー

このGetting Startedガイドでは、VirtualBoxをプロバイダーとして使いましたが、
Vagrantでは他にもVMware FusionやAWSなどを使うこともできます。

一度プロバイダーをインストールしたら、特にVagrantfileを修正する必要はありません。
↓のように適切なプロバイダーでvagrant upするだけです。

$ vagrant up --provider=vmware_fusion

クラウドを使いたいなら↓のようにawsを指定してやるだけ!
$ vagrant up --provider=aws

vagrant up時にプロバイダーを指定すれば、それ以降はどのvagrantコマンドを打つときも、
特にプロバイダーを指定する必要はありません。Vagrantが自動的に判定してくれます。
なので、SSHしたいときやdestroyしたいときなどなど、
ただいつもどおりコマンドを打つだけです。

プロバイダーに関するもっと詳しい情報はこちら

2013年8月3日土曜日

Vagrantドキュメントを意訳してみる Getting Started中篇

多分こんな感じなはず。(たぶん)
オリジナル: http://docs.vagrantup.com/v2/getting-started/index.html

前篇はこちら


同期フォルダ

VMを簡単に作れるのはとてもcoolなことですが、
たいがいの人はターミナルでコンフィグファイルをいじって
sshログインするだけではあまり魅力を感じないでしょう。
しかし、Vagrantの同期フォルダ機能を使えば
そんな人でも少しは魅力を感じるかもしれませんね。
Vagrantではホストマシンの特定のフォルダを
VMの特定のフォルダに自動的に同期してくれます。

デフォルトではホストマシンのプロジェクトディレクトリ(Vagrantfileがあるディレクトリ)と、
VMの/vagrantディレクトリが同期されます。

では、もう一度、vagrant upしてvagrant sshしてVMにログインします。
$ vagrant up
$ vagrant ssh
...
vagrant@precise32:~$ ls /vagrant
Vagrantfile

VM上にもVagrantfileがありますね?これはホストマシンにあるVagrantfileと同じものです。
実際にtouchして確かめましょう。

vagrant@precise32:~$ touch /vagrant/foo
vagrant@precise32:~$ exit
$ ls
foo Vagrantfile

はぅ!"foo"がホストマシンにできましたね。
ということで同期されていることを確認できました。

同期フォルダを使うことで、
ホストマシンで好きなエディタを使って編集したあと、VMと同期することだってできます。


プロビジョニング

UbuntuをベースにしたVMもすでに作ったし、ホストとVMの同期もテストしたので、
次は、Webサーバを作ってみましょうか!

では、早速SSHでVMにログインして、Webサーバをインストール・・・することもできますが、
そうすると、このVagrantfileを使う他のユーザーも同じ作業をしなければなりません。
Vagrantにはビルトインのプロビジョニング機能があるので、それを使いましょう。
プロビジョニング機能を使うとvagrant upしたときに、
Vagrantは自動的にWebサーバなどのソフトウェアをインストールしてくれます。
(なので各ユーザーがWebサーバをインストールする必要がありません)

Apacheのインストールシェルの作成


シェルスクリプトを使ってApacheをインストールしてみましょう。
↓のbootstrap.shを作って、Vagrantfileと同じディレクトリに置きます。
#!/usr/bin/env bash

apt-get update
apt-get install -y apache2
rm -rf /var/www
ln -fs /vagrant /var/www

次に、vagrant upしたときにこのスクリプトを実行するように、
Vagrantfileを↓のように編集します。

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

"config.vm.provision"の行が新しく追加した行です。
マシン起動時に実行すべきシェルをこの行で設定してます。
ファイルパスはVagrantfileがあるディレクトリからの相対パスで指定します。

プロビジョン!!


↑の準備が整ったら、vagrant upするだけで、自動的にプロビジョニングをしてくれます。
シェルスクリプトからの出力がターミナルで確認できます。
もし、VMをすでに起動しているなら、vagrant reloadコマンドを実行ししてください。
vagrant reloadコマンドは、最初のimport処理(?)をスキップして、すぐにリスタートします。

VMが起動したら、Webサーバも起動しています。
まだ、Webサイトを見ることはできませんが、
プロビジョニングが動いたかどうかはVMにSSHでログインして確認できます。

$ vagrant ssh
  ...
vagrant@precise32:~$ wget -qO- 127.0.0.1
シェルスクリプトでApacheのDocumentRootを/vagrantディレクトリにしたので、
なにがしかを返してくれます。

別のファイルを作ったり、他のソフトをインストールしたりして遊ぶこともできますが、
VMのWebサーバをVMの外から参照するために、
次のステップではネットワークの設定を説明します。


ネットワーク設定

現時点では、Webサーバが起動してて、
ホストとVMで同期しているフォルダをDocumentRootにしている状態ですね。
しかし、VM上からしかアクセス出来ないというのはかなりイマイチな感じですね。
このセクションでは、Vagrantのネットワーク設定について説明します。

ポートフォワーディング


ポートフォワーディングは選択肢のひとつです。
ポートフォワーディングすると、ホストマシンの指定したポートへのアクセスは
VMの指定したポートへ転送されるようになります。

ということで、さっそくVMのApacheにアクセスできるように設定してみましょう。
といっても、Vagrantfileを少しいじるだけです。

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

↑のように"config.vm.network"の行をつけたして
vagrant reloadかvagrant upすれば完了です!

VMが再起動したら、http://127.0.0.1:4567/にブラウザでアクセスしてみましょう。
VMのApacheが表示しているページが見えているはずです。

その他のネットワーク設定


Vagrantはその他にもネットワーク設定方法があります。
例えば、VMにIPを静的に割り当ててみたり、
既存のネットワークを使ったブリッジ設定をしてみたりです。
もし、他のネットワーク設定の興味がある場合は、こちらをご参照のこと。