Vagrant で開発環境を作る その2

Vagrantで開発環境を作るにあたって、仮想マシンとのネットワーク接続とファイル共有が必要です。
今回はその辺の設定について

ネットワークについて

Vagrantのネットワーク設定については大きく3つあります。
ポートフォワーディング
ホストOSの任意のポートを使った接続をゲストOSに転送する
プライベートネットワーク
ホストOSとゲストOS間でのみ通信が行える。+ホストOSを通じてインターネットには繋がります。
パブリックネットワーク
同一ネットワーク内のどの端末からでもゲストOSと通信が行える。
サーバ用途で使用するならというところでしょうか。
プライベートネットワークではSSH2を使って外部サーバへ接続はできないのでパブリックネットワークに切り替えてSSH2の接続テストで使ったりはしました。

ネットワーク設定は、vagrant ファイルを編集して行います。

確認のために仮想マシンにはWEBサーバがインストールしている前提です。
ApacheとかNginxとかOpenLiteSpeedとか

ポートフォワーディング設定

#config.vm.network "forwarded_port", guest: 80, host: 8080

config.vm.network "forwarded_port", guest: 80, host: 8080

上記にある行の#をとってコメントを外します。
ホスト側のポート番号が使用しているなら別のポート番号に。
vagrant ファイルを保存して仮想マシンを起動。
> vagrant up
仮想マシンが起動している状態で編集したのなら再起動
> vagrant reload

ホストから http://127.0.0.1:8080/ にブラウザでアクセスして確認。

プライベートネットワーク設定

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

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

これも同じようにコメントを外して有効化する。
vagrant ファイルを保存して仮想マシンを起動。
> vagrant up
仮想マシンが起動している状態で編集したのなら再起動
> vagrant reload

ホストから http://192.168.33.10/ にブラウザでアクセスして確認。

パブリックネットワーク設定

# config.vm.network "public_network"

config.vm.network "public_network"

上記のようにパブリックネットワークを有効にするとDHCPでIPアドレスを取得する設定になります。
開発用途を考えると固定IPアドレスが望ましいので下記のように変更します。
config.vm.network "public_network", ip: "192.168.0.17"
vagrant ファイルを保存して仮想マシンを起動。
> vagrant up
仮想マシンが起動している状態で編集したのなら再起動
> vagrant reload

ホストから http://192.168.0.17/ にブラウザでアクセスして確認。

おれはホスト名でアクセスしたいんだという場合は下記のプラグインを使用すればできるようです。
https://github.com/cogitatio/vagrant-hostsupdater
プラグインをインストールしてvagrantファイルに下記を追加します。
config.vm.network :private_network, ip: "192.168.33.10"
config.vm.hostname = "local.testing.dev"

他にも記述方法があるようなんで詳しくは上記のGIthubで確認してください。
ちなみに使ってないので詳しくは不明。Windowsで動作するのかも不明。

プラグインを使用せずとも、自分でhostsを変更してもホスト名でアクセスできます。
上記のプラグインは、hostsを書き換えてくれるようですが。

自分の場合は普段プライベートネットワーク設定で開発用WEBサーバなどに使用してます。

ドキュメント
https://www.vagrantup.com/docs/networking/

Vagrant 共有フォルダの設定

次に共有フォルダの設定について。
初期状態で既に一部のフォルダは共有されています。
vagrantファイルのあるフォルダです。
このフォルダは初期状態で仮想マシンの /vagrant にマウントされています。
このフォルダに何かファイルを追加すると仮想マシン側の /vagrant フォルダで確認することができます。

それでは、自分の開発環境をこれから作る例として
開発ソースフォルダをホストマシンに作成し、Vagrantの仮想マシンと共有する設定について説明します。
1.ホストマシンに開発ソースフォルダ作成
d:\project_dev\src
2.vagrant ファイルに共有設定を追加
vagrant ファイル内に共有設定についての記述があります。
# config.vm.synced_folder "../data", "/vagrant_data"
この行のしたに下記を追加します。
config.vm.synced_folder "d:/project_dev/src", "/www_dev"
前側がホストマシン側のパス、後側が仮想マシン側のパスとなります。
ホストマシンのパスは、vagrant ファイルのある場所からの相対パスでも絶対パスでもかまいません。
仮想マシンのパスは、存在しないパスでもかまいません。
仮想マシンのパスに既存のパスを指定する場合は、注意が必要です。
ホストマシン側のフォルダを仮想マシン側のフォルダへマウントすることになるので、既存のフォルダにファイルなどがあれば全て削除されることになります。

なので、仮想マシン側には存在しないパスを指定するか、フォルダ内に何もない場所を指定します。
開発サーバに使用する場合は、仮想マシン側のパスをWEBサーバの設定に使うので存在しないパスで作成することをおすすめします。
複数のフォルダを共有したい場合は、行を追加していきます。
アプリケーションのログフォルダを追加
config.vm.synced_folder "d:/project_dev/src", "/www_dev"
config.vm.synced_folder "d:/project_dev/log", "/var/log/app_log"

vagrant ファイルを保存して仮想マシンを起動。
> vagrant up
仮想マシンが起動している状態で編集したのなら再起動
> vagrant reload

仮想マシンが起動している状態でホストマシン側の「d:/project_dev/src」にソースファイルをGithubなどからチェックアウトすると、仮想マシン側にもファイルを確認することができます。

共有フォルダの設定は、仮想マシンのパフォーマンス低下の原因といわれていますが、自分の環境では気になるほどではないですね。
ドキュメント
https://www.vagrantup.com/docs/synced-folders/

ミドルウェアのインストールは??というのは別にして
ネットワークの設定と共有フォルダの設定ができ、これで開発環境は整えることができました。