Homestead環境で複数環境がある場合、外部から接続するアプリを選択する際の小技
先に結論
homestead(Laravel Homestead', '7.12.0)で複数のアプリを設定して外部端末から公開ipアドレスでアクセスする場合。
sites: の -map に指定するドメインのアルファベットの最昇順のサイトが表示される。
sites: - map: whois.test to: /home/vagrant/code/Laravel/public schedule: true - map: zero.test to: /home/vagrant/zero/Laravel/public # アルファベット順に最初のこれが外部アクセスからのデフォルト表示となる。 - map: aaa.test to: /home/vagrant/hoge/Laravel/public # 省略 networks: - type: "public_network" ip: "192.168.11.99" bridge: "en1: Wi-Fi (AirPort)"
こんな方法で設定するのは不本意なのですが、有志の日本語ドキュメントの以下の方法では上手くいきませんでした。
そもそもの話
windows10でvagrantのHomestead環境を使ってLaravelの開発をしていますが、複数のアプリケーションのプロジェクトを動かしているため、Homestead.yamlとhostに複数のアプリの環境を設定しています。
詳しくは以前の記事を参照の事 windows vagrant Homestead環境でLaravelアプリを追加する際の覚書 - 作りたいものがありすぎる
以下の例の様に複数のアプリの環境を設定できる。
Homested.yaml
folders: - map: C:/Vagrant/Whois to: /home/vagrant/code - map: C:/Vagrant/zero to: /home/vagrant/zero sites: - map: whois.test to: /home/vagrant/code/Laravel/public schedule: true - map: zero.test to: /home/vagrant/zero/Laravel/public
また、詳細は省きますがwindowsのhosts
ファイルにもローカルドメインとipを設定します。
この特定のアプリをローカルネットワーク(wi-fi環境)で他のマシンからも開発環境が見れるようにする必要がありましたので、これまではHomested.yaml
ファイルに以下の様な記述をすることで、他のPCから閲覧できるようにしていました。
Homested.yaml
networks: - type: "public_network" ip: "192.168.11.99" bridge: "en1: Wi-Fi (AirPort)"
上記の設定の192.168.11.99
に別のPCからアクセスすれば、これまで問題なく閲覧出来ていたのですが、先日の記事を書いて以降、意図しない別の開発環境が表示されてしまい、困った事になりました。
しかしこれまで、意図したアプリの画面が出ていたことがむしろ偶然の幸運で、複数アプリを設定してる場合、外部からアクセス可能なipでどのアプリが出るかを設定項目はyamlには書いて無い訳です。従来はたまたま偶然に望みのアプリが出ていた。という訳です。
そこで、どうすれば意図したアプリを外部から接続するか調べましたが、上手く行かず結論として上記の様なかなりその場しのぎの方法となりました。
環境の共有
共同作業者やクライアントと、現在作業中の内容を共有したい場合もあるでしょう。Vagrantには、vagrant shareにより、これをサポートする方法が組み込み済みです。しかし、この方法はHomestead.yamlファイルに複数サイトを設定している場合には動作しません。この問題を解決するため、Homesteadは独自のshareコマンドを持っています。使用を開始するには、vagrant sshによりHomesteadマシンとSSH接続し、share homestead.testを実行してください。これにより、Homestead.yaml設定ファイルのhomestead.testサイトが共有されます。もちろん、homestead.testの代わりに他の設定済みサイトを指定できます。
share homestead.test
とあるので、上記の通りshare whois.test
とか打った所以下の様な画面が表示されました。
vagrant@homestead:~$ share whois.test ngrok by @inconshreveable (Ctrl+C to quit) Session Status connecting Session Status online Sesion Expires 7 hours, 58 minutes Versionerface 2.2.8 10:4040 R gio United States (us) Web Interface http://192.168.10.10:4040t5 p50 p90 Forwarding http://a3e2a379.ngrok.io -> localhost:80 Forwarding https://a3e2a379.ngrok.io -> localhost:80 Connections ttl opn rt1 rt5 p50 p90 0 1 0.00 0.00 0.00 0.00 HTTP Requests ------------- GET /favicon.ico 200 OK
しかし、望みのサイトはip 192.168.11.99 や 192.168.10.10:4040t5 のいずれにアクセスしても他のアプリがでてきたり、アクセスできなかったりでした。
また、コンソールに表示されたhttps://a3e2a379.ngrok.io
にもアクセスしましたが、cssが適用されない画面であるうえ、レスポンスが大変遅く意図したもにはなりえません。
という事で困ったなー。でも外部から見た際に複数アプリがある場合、そもそもどういう法則で、今のアプリが表示されるんだろう?と悩ませている際にたまたま閃いて試したらドンピシャだったという訳です。
でもいずれ複数のアプリで外部PCからアクセスしたくなった場合は…。
これ以上良い方法がない場合はいちいちyamlフィアル書き換えるって事で対処します。