作りたいものがありすぎる

40歳を過ぎてプログラミングを始めた人の顛末とこれからなど

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

また、詳細は省きますがwindowshostsファイルにもローカルドメインと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には書いて無い訳です。従来はたまたま偶然に望みのアプリが出ていた。という訳です。

そこで、どうすれば意図したアプリを外部から接続するか調べましたが、上手く行かず結論として上記の様なかなりその場しのぎの方法となりました。

readouble.com

環境の共有
共同作業者やクライアントと、現在作業中の内容を共有したい場合もあるでしょう。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フィアル書き換えるって事で対処します。