Posted at

Vagrant ゲストOSのWebサーバーにホスト名でアクセスする(Windows10)

More than 3 years have passed since last update.


Vagrantを使ってみた

会社のパソコンが一台余っていたので新しい開発環境として使うことにした。

それを機にWeb系の開発環境をXAMPPからVagrant+VirtualBoxに変えてみた。

とりあえず、ドットインストールを参考にVagrant、VirtualBox、puttyをインストールして仮想化環境を構築。

ゲストOSにはCentOSを選択、そこにApache、PHP、MySQLをインストールし、ホストOS(Win10)のブラウザからゲストOSのWebサーバーにアクセスするところまでできた。

インストール手順は上の講座や「vagrant php」「vagrant windows」などで検索してヒットしたサイトを参考にした。


Vagrantについて

https://www.vagrantup.com/

Vagrantは「仮想化環境構築ツール」の一つ。コマンドを実行することで仮想化環境の作成、起動ができるようになる。


Vagrantfile

VagrantにはVagrantfileというファイルがあり、ここで仮想化環境起動時の初期設定をすることができる。

例えば

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

と書くとゲストOSのIPアドレスが「192.168.33.10」になり、ブラウザで「http://192.168.33.10」と入力すればゲストOSのWebサーバーにアクセスできる。


ゲストOSにホスト名を定義する

ゲストOSにホスト名を定義するにはVagrantfileに以下の定義をする。

config.vm.hostname = "vagrant.local"

これでゲストOS内ではホスト名でアクセスできるようになるが、ホストOSからアクセスできるようにするにはホストOSのhostsに「vagrant.local 192.168.33.10」を追加する必要がある。

おそらく直接hostsをメモ帳などで修正しても問題ないと思うが、いいやり方は無いかと「vagrant hosts」で検索すると、ゲストOS起動時にホストOSのhostsを書き換えるプラグインがあることが分かった。

http://qiita.com/tag1216/items/0d10f67cb55651740df4

今回、上のページにあったvagrant-hostsupdaterとvagrant-hostmanagerを試してみた。

使い方は上に書いてある通りなんだけど、Windows10環境で実行したところhostsを更新するところで引っかかったのでその辺についてメモを残しておく。


vagrant-hostsupdater

https://github.com/cogitatio/vagrant-hostsupdater

プラグインをインストールする。

vagrant plugin install vagrant-hostsupdater

あとはそのままvagrantを起動するだけ。

ただし、Windows10で試したところ、C:\Windows\system32\drivers\etc\hosts に書き込み権限がなく、Permission deniedエラーになってしまった。

これはあらかじめvagrantを起動するコマンドプロンプトを管理者として実行しておくと回避できる。

ただし、コマンドプロンプトを管理者として実行するとカレントディレクトリがC:\Windows\system32になるのでvagrantの起動用ディレクトリに移動する必要がある。

vagrant halt

で終了するとhostsがもとにもどる。


vagrant-hostmanager

https://github.com/devopsgroup-io/vagrant-hostmanager

プラグインをインストールする。

vagrant plugin install vagrant-hostmanager

プラグインをインストール後、Vagrantfileに以下を追加する。

config.hostmanager.enabled = true

config.hostmanager.manage_host = true

上はゲストOSのhostsを更新し、下はホストOSのhostsを更新する。

こちらはPermission deniedエラーは出ないがユーザーアカウント制御の確認ダイアログ(「このアプリがPCに変更を加えることを許可しますか?」というメッセージ)が表示されるので、許可するとhostsが更新される。

vagrant destroy

でhostsが元に戻る。


余談

vagrant-hostsupdaterプラグインをインストールするときにエラーが出てインストールできない、

という問題があった。エラーメッセージを手掛かりにググってみたところstackoverflowの書き込みを発見。

以下超意訳:


質問者:vagrant-hostsupdaterをインストールしようとするとエラーが出るんだけど?

(エラーメッセージやOSバージョンを細かく記述)

回答者1:スペルミスじゃない?vagrant-hostsupdaterじゃなくてvagrant-hostupdaterになってるよ。

質問者:あ、ホントだ!直したら動いたよ。ありがとう!

回答者1:いえいえ :blush:

回答者2:同じエラー出て調べてたんだけど、俺もスペルミスだったよ!

質問者:よかったよかった :blush:


「あー、スペルミスとかあるあるだなぁ」と思って自分のPCのエラーが出ている画面を見てみると、

・・・自分もスペルミスが原因だった。