読者です 読者をやめる 読者になる 読者になる

ゆきばた

ゆきばたの果てしない戯言

windows+vagrantを使ってバーチャルドメイン構築のチェックポイント

 

vagrantでローカル環境構築でハマった点がいくつかありました。

ローカル環境構築の方法は、また別途記載するとして

今回は、構築中にハマった点を記載します。

同様につまづいた方は、チェックポイントとしてご利用ください。

 

f:id:yukibata:20160922175719p:plain

 

 

 

環境について

 

今回の環境はこんな感じです。

 

   windows10

   vagrant 1.8.5

   VirtualBox 5.1.4

   centos7

 

まず前提として、上記がインストールされていることとします。

 

 

問題とゴール

 

問題は、ホストOS(windows)からゲストOS(centos)のドメインに

何故かアクセスできないこと。

 

ゴールは、アクセスし、ゲストOS側の access_log でアクセスが確認できること。

f:id:yukibata:20160922160451p:plain

とします。

(写真は403ですが、アクセスできることをゴールとします。)

 

 

最初に概要の説明

 

ゲストOSのドメインにアクセスが流れるためには

ざっくりいうと

 

  ・ブラウザが外(インターネット)にいかず、内部に接続が向かうこと

  ・その接続がゲストOSに向かうこと

  ・ゲストOSが正しくドメインをさばくこと

 

です。

今回は「ちゃんとそれぞれが正しい設定になっていますか」という

点で1つずつみていこうと思います。

 

そして今回は

 

  IP:192.168.33.10 (vagrantのデフォルトIP)

  バーチャルホスト名:local.yukibata.com

 

という条件で進めていこうと思います。

 

 

ポイント1: windows の hosts ファイル

 

ホストOS(windows)側の設定です。 

hostsファイルは、ブラウザが処理をする際にチェックするファイルです。

ここに、記載をすることで「この IP or バーチャルホスト は外に行かない」

ということが実現されされます。

 

つまり、このように記載しましょう。

”C:\Windows\System32\drivers\etc” にある hosts というファイルに

 

 192.168.33.10    local.yukibata.com

 

という1行をファイルの最終行に加えます。

(このような大事なファイルは、編集する前にバックアップを取りましょう)

 

これで、ブラウザが http(s)://local.yukibata.com とうアクセスを受け取った際、

外にアクセスしなくなります。

 

 

ポイント2:Vagrantfile の記載は正しいか?

 

vagrant が起動する際に、参照される設定ファイルが Vagrantfile です。

ここにある設定を読み込んで環境が起動します。

 

ここで大事な設定は3つです

 

 ・vm.boxの名前が正しいか?

 ・port forward は正しいか?

 ・ネットワークのIPは正しいか?

 

です。初期設定ではコメントアウトされているので、注意してください。

私の場合 box の名前が centos7 としてあります。

(boxの名前は、"vagrant box list" コマンドで確認できます。)

 

f:id:yukibata:20160922172724p:plain

 

名前を確認した上で以下の設定を記載してください。

 

Vagrant.configure("2") do |config|

## boxの名前
config.vm.box = "centos7"

## 追加変更
config.vm.define :centos7 do |centos7|
centos7.vm.box = "centos7"
centos7.vm.network "forwarded_port", guest: 80, host:8080
end

## IP の設定
config.vm.network "private_network", ip: "192.168.33.10"

end

 

極端な話、ファイルの中身を全部消して、これだけ書いてあればOKです。

 

 

 ポイント3:vagrant のバグを踏んでいないか?

 

私は、ここで結構ハマりました。

これは、私と同じ vagrant 1.8.5 を利用している方向けです。

それ以外のバージョンの方は飛ばしてください。

vagrant の 1.8.5には、バグが1件あるそうです。

 

"vagrant up" のコマンドを打つと、vagrant は起動するのですが、

private key の発行が上手くいかず、中途半端な設定で起動が

完了してしまします。

ssh接続はできるので、「行けてるかも?」と思いがちですが

行けてません。

 

このようなメッセージが出ていませんか?

”Warning: Remote connection disconnect. Retrying...”

 

f:id:yukibata:20160922162501p:plain

 

この場合、vagrant のソースファイルの修正が必要です。

 

windows側から修正したい場合は vagrant をインストールした

HashiCorpのディレクトリの中にあります。

私の場合は、

 

”C:\Program Files (x86)\HashiCorp\Vagrant\embedded\gems\gems\vagrant-1.8.5\plugins\guests\linux\cap”

 

にある "public_key.rb" ファイルの 57行目付近を以下のように修正します。

 

if test -f ~/.ssh/authorized_keys; then
  grep -v -x -f '#{remote_path}' ~/.ssh/authorized_keys > ~/.ssh/authorized_keys.tmp
  mv ~/.ssh/authorized_keys.tmp ~/.ssh/authorized_keys
  chmod 0600 ~/.ssh/authorized_keys // ←ここを追加
fi

 

contos側から修正したい場合は 

/home/vagrant/.ssh/authorized_keys の権限を 600 に設定します。

 

f:id:yukibata:20160922163421p:plain

 

これで vagrant が無事に起動すると思います。

逆に言うと、この問題に引っかかり無事に起動しない場合、

centos側で ip の振り分けが正しく行われていないような気がします。

 

(参考)

www.thisprogrammingthing.com

 

 

ポイント4:VirtualBoxの設定が正しいか?

 

vagrant はあくまで、VirtualBoxをKickしている立場なので、

VirtualBoxの設定が正しくないとダメです。

もう一度、VirutalBoxの設定を見てみましょう。

 

ただし、設定を見る前に、centosが正しくOFFになっているかを

確認してください。起動中だと設定は変更できません。

 

”vagrant halt” と "vagrant status" のコマンドでOFFになっていることを

確認しましょう。

 

f:id:yukibata:20160922164038p:plain

 

確認ができたら、VirtualBoxを起動します。

 

f:id:yukibata:20160922164256p:plain

 

メニューから「設定」を選択

 

f:id:yukibata:20160922164322p:plain

 

左メニューの「ネットワーク 」を選択し、

「アダプター2」の「ネットワークアダプターを有効化」に

チェックが入っていること 。

そして、「割り当て」が「ホストオンリーアダプター」になっていることを

確認してください。

それ以外は、デフォルトのままでOKです。

 

これで "vagrant up" を行ってください。

以下のように Adapter 2 : hostonly と正しく認識されると思います。

 

f:id:yukibata:20160922165813p:plain

 

この「ホストオンリーアダプター」の設定がないと、

ホストOSからゲストOSへの接続ができなくなります。

 

ホストオンリーアダプターとは、簡単に言うと

ホストOSとゲストOSを結ぶ「仮想的なネットワーク」の作成

行ってくれるものです。

 

ここまでくれば、

ブラウザからアクセスし、windowsの内部から centosに向かうまでが完成です。

ここからは、

「centosが受け付けてくれること」

「apacheが受け付けてくれること」

のチェックポイントを見ていきましょう。

 

 

ポイント5:centos側がIPを認識しているか?

 

ゲストOSが対象(192.168.33.10)のIPを認識していなければいけません

ifconfig コマンドで確認しましょう。

 

ただ、centos7 では、ifconfigコマンドが非推奨となっているので、

インストールしなければいけません。

まず ”yum -y install net-tools” コマンドでインストールしましょう。

 

そして、正しく認識されているか確認してください。

 

f:id:yukibata:20160922173738p:plain

 

もしここに 192.168.33.10 がなければ、

"vagrant halt" や "vagrant destroy" をして再トライしてみてください。

 

 

ポイント6:centosの hosts ファイルが正しいか?

 

windows の hosts ファイルのようなイメージで

centos にも hosts ファイルがあります。

 

"vi /etc/hosts " で編集してみましょう。

 

f:id:yukibata:20160922165957p:plain

 

このように

 

 192.168.33.10  [バーチャルホスト名]  localhost.localdoain localhost

 

となってればOKです。

 

ここまでで、

ブラウザからアクセスし、centosへのアクセスが可能となっています。

 

 

ポイント7:apacheの設定

 

最後にapacheの設定を見てみましょう。

人によって、apacheのインストール方法は異なると思いますが、

私は /etc/httpd のような構成が気持ち悪いので、

個別にapacheをインストールしました。

"/usr/local/apache2/" という構成です。

(ただ、このような構成でなくてもまったく問題ありません)

 

”vi /usr/local/apache2/conf/httpd.conf” コマンドで

httpd.conf ファイルを編集してみましょう。

 

以下のように編集します。

 

f:id:yukibata:20160922170805p:plain

 

<VirtualHost *:80>
  DocumentRoot /usr/local/apache2/vhosts/local.yukibata.com/htdocs
  ServerName local.yukibata.com
  ErrorLog vhosts/local.yukibata.com/logs/error_log
  TransferLog vhosts/local.yukibata/logs/access_log
  <Directory />
    Options FollowSymLinks
    AllowOverride All
  </Directory>
  <Directory "/usr/local/apache2/vhosts/local.yukbiata.com/htdocs">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

 

これでバーチャルドメインごとにディレクトリを作成できるので、

複数ドメインや今後のデバッグが便利になります。

 

ポイントとしては、

 

  ・<VirtualHost *:80> 

  ・DocumentRoot

  ・ServerName

  ・ErrorLog

  ・TransferLog

 

の5つです。

local.yukibata.com のアクセスが来るとそれぞれが機能してくれます。

 

忘れがちなのは、

 

 "/usr/local/apache2/vhosts/local.yukiabta.com/logs/"

 "/usr/local/apache2/vhosts/local.yukibata.com/htdocs/"

 

のディレクトリを mkdir コマンドで作成し

apacheが書き込めるように権限設定をしておいてください。

 

上記のように apache の設定が終わったら、

apacheの再起動をします。

 

コマンドは

"/usr/local/apache2/bin/apachectl stop"

"/usr/local/apache2/bin/apachectl start"

です。(restartでもOK)

 

f:id:yukibata:20160922171557p:plain

 

 

ポイント8:firewall は無効になっているか

 

firewallとは、外部の不正なネットワークを遮断する仕組みです。

この設定が有効だと、ホストOSからのアクセスは遮断されます。

設定を確認して、有効になっていたらOFFにしましょう。

 

設定確認のコマンドは

 

  systemctl status firewalld

 

です。

 

f:id:yukibata:20160929231536p:plain

 

このように(画像の緑色の部分) Active:active(running) となっていたら

ONになっている証拠です。

 

これを

 

  systemctl stop firewalld

 

でOFFにして、再度 systemctl status firewalld で確認しましょう。

以下のように、 Active:inactive(dead) となればOKです。

 

f:id:yukibata:20160929231825p:plain

 

 

ポイント9:ホストOSからゲストOSに ping が通るか?

 

コマンドプロンプトなのどで ping を打ってみましょう

 

 "ping 192.168.33.10"

 

もしくは

 

 "ping local.yukibata.com" 

 

でOKです。

すると以下のように、接続ができていることがわかります。

 

f:id:yukibata:20160922171929p:plain

 

これで、ブラウザからアクセスした際に

 

 /usr/local/apache2/vhosts/local.yukibata.com/logs/access_log

 

にアクセスが来ることが確認できます。

 

firewall (ファイヤーウォール)の詳しい仕組みは

このサイトがわかりやすかったです。

 

www.infraexpert.com

 

 

まとめ

 

以上8項目が、チェックポイントとして記載しました。

もしかしたら、これらのチェックポイントでもうまくいかない方も

いらっしゃるかもしれませんが、

少なくとも、1つずつチェックしていくことで、

どこまでOKかのイメージがつくと思います。 

 

最後に参考になったサイトを記載します。

もし詰まったり、これって何?と思ったら参照してみてください。

 

labs.septeni.co.jp

 

sui.hateblo.jp

 

 

おわり

 

 

[ImageFrom]
https://www.vagrantup.com/
http://www.thisprogrammingthing.com/2016/fixing-vagrant-connection-error/