0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Homestead環境でアプリを外部から接続したら、ドハマりしてしまったこと

Posted at

VirtualBox+vagrantのHomesteadで、Laravel環境構築にて、固定IPアドレスを設定し、
外部から接続する際に、接続できるアプリにアクセスできず、もう1つのアプリばかりアクセスできる。
『なぜだ?』と原因が分からずに四苦八苦し、やっと解決できたので、忘れないうちにメモとして投稿します。

環境

  • OS : windows11 pro
  • VirtualBox (5.2.44)
  • vagrant (2.2.5)
  • Laravel 8.x Laravel Homestead

Homestead.yaml

App名等は、違う名前だが中身はこんな感じです。
sitesに記述した複数のアプリ(myappとapp)外部接続ip:192.168.1.20にアクセスし、アプリを表示させたいのはmyappの方とします。

ip: "192.168.56.56"
memory: 2048
cpus: 2
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

folders:
    - map: C:¥Users¥ユーザ名¥Documents¥laravel
      to: /home/vagrant/code
   
sites: ※複数のアプリが存在
    - map: myapp
      to: /home/vagrant/code/myapp/public
- map: app
      to: /home/vagrant/code/app/public

databases:
    - homestead

features:
    - mysql: true
    - mariadb: false
    - postgresql: false
    - ohmyzsh: false
    - webdriver: false

services:
    - enabled:
          - "mysql"
networks:  ※ネットワークインターフェースにて、固定IPアドレスを指定する
    - type: "public_network"
      ip: "192.168.1.20"
      bridge: "Intel(R) Ethernet Connection (11) I219-LM"

ネットワークインターフェースの設定の説明

Homestead.yamlで設定する場合

bridgeを設定しない場合

networks: 
    - type: "public_network"
        ip: "192.168.1.20

コマンドプロンプトにて、以下の内容でnetwork interfacesの設定を行う

PS C:¥Users¥ユーザ名¥Documents¥laravel> vagrant reload --provision
==> homestead: Attempting graceful shutdown of VM...
==> homestead: Checking if box 'laravel/homestead' version '12.2.0' is up to date...
==> homestead: Clearing any previously set forwarded ports...
==> homestead: Clearing any previously set network interfaces...
==> homestead: Available bridged network interfaces:
1) Intel(R) Ethernet Connection (11) I219-LM  → イーサネットのアダプタ名
2) Hyper-V Virtual Ethernet Adapter
==> homestead: When choosing an interface, it is usually the one that is
==> homestead: being used to connect to the internet.
==> homestead:
    homestead: Which interface should the network bridge to? 1 → イーサネットを選択する

外部ネットワークに接続するため、イーサネットのアダプタを選択し、provisionの完了を待つ

bridgeを設定した場合

networks: 
    - type: "public_network"
      ip: "192.168.1.20"
      bridge: "Intel(R) Ethernet Connection (11) I219-LM"

Homestead.yamlを修正している場合は
vagrant reload --provisionを実行する。
修正なしの場合
vagrant upでOK。

Homestead.yamlのbridgeで指定しているため、network interfacesは聞いてこない。
provisionの完了を待つのみ

IPアドレス(ホストアドレス)は空いているものなら何でもいいが、LAN内のサブネットを指定しないと繋がらないため注意が必要
ホストアドレスとは、今回でいうと192.168.1.20の20の部分のこと。192.168.1はネットワークアドレス。

homestead.rbで設定する場合

homestead.rbでも、ネットワークインターフェースを設定することはできる

# Configure A Private Network IP
    if settings['ip'] != 'autonetwork'
      config.vm.network :private_network, ip: settings['ip'] ||= '192.168.10.10'
    else
      config.vm.network :private_network, ip: '0.0.0.0', auto_network: true
    end

の下に、下記の記述を加える。

config.vm.network "public_network", :bridge => "Intel(R) Ethernet Connection (11) I219-LM", :ip => "192.168.1.20"

Homestead.yaml (bridgeを設定した場合)同様、provisionの完了を待つのみ

複数アプリが存在する場合

sites: ※複数のアプリが存在
    - map: myapp ・・・ ⓵
      to: /home/vagrant/code/myapp/public
- map: app ・・・ ⓶
      to: /home/vagrant/code/app/public

以下が、それぞれのアプリとします。
①のアプリ
image.png

②のアプリ
image.png

表示させたいのは、①のアプリになりますが、
上記の記述通りに行うと・・・②のアプリ(PhpMyAdmin)が表示されます。

アプリを指定するような記述は
Laravel 8.x Laravel Homestead(公式サイト)にもそれらしいものはない・・・
どうすれば、意図したアプリにアクセスできるようになる?

答えは単純でした。
https://sakamata.hateblo.jp/entry/2019/02/18/111734 ← こちらのサイトに書いてありました。

Homestead.で複数のアプリを設定して外部端末からpublic_networkのipアドレスでアクセス場合
sites: の -map に指定するドメインのアルファベットの最昇順のサイトが表示されるらしい・・・

つまり、今回でいうと① myappよりも② appの方が昇順になるため、② appのアプリが表示されたのです。

適当だが、下記のように修正すれば、表示させたいアプリ(①)を②のアプリよりも昇順になり、意図したアプリを表示させることができるようになります。

sites: 
    - map: app ・・・ ⓵
      to: /home/vagrant/code/myapp/public
- map: myapp ・・・ ⓶
      to: /home/vagrant/code/app/public

このようなことにドハマりし、時間を費やしたが、いい経験になりました。

おまけ(アダプタ名の確認方法)

コマンドプロンプトにて、ipconfig/allを入力すると
ipconfig_all.png
このようにネットワークの情報が出力されます。
使用したいアダプタの説明に項目にアダプタ名が表示されるので、こちらをbridge接続する場合は記述します。

networks: 
    - type: "public_network"
      ip: "192.168.1.20"
      bridge: "Intel(R) Ethernet Connection (11) I219-LM"

ちなみに・・・
ブリッジ接続とは、それぞれ異なるネットワークに属しているPC同士を通信できるようにする接続方法です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?