【Vagrant】Windows10でLaravel環境構築(homestead利用)

かんたんにlaravel環境が構築できるらしいhomesteadのことをさっき知ったのでやってみようと思いました。

homesteadはVirtualBoxのboxファイル(仮想マシンイメージ)として提供されています。

公式の資料とかだととくに使わない設定もすべてまとめて書いてあるみたいなので、あまり設定せずとりあえず動かしたい人向けです。

【更新履歴】
2020/09/18 vagrantとmysqlのパスワードのことを忘れていたので追記
2020/09/28 簡易サーバーの名前の間違いを修正、homesteadについての勘違いを修正

参考

7.x Laravel Homestead Laravel

環境

Microsoft Windows [Version 10.0.18363.1082]
Vagrant 2.2.9

やったこと

boxファイル追加して初期化

公式ページにはいろいろ書いてあるけど普通に考えたらvagrantの手順だけやればええんちゃうかということでボックスを追加。
「C:\>」の行はコマンドプロンプトでの実行です。

C:\>vagrant box add laravel/homestead
==> box: Loading metadata for box 'laravel/homestead'
    box: URL: https://vagrantcloud.com/laravel/homestead
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) parallels
3) virtualbox
4) vmware_desktop

選択肢がでてきます。
今回はvirtualboxでやるので「3」を入力してEnter
ダウンロードにちょっと時間がかかります。(10分ぐらい?)

Enter your choice: 3
==> box: Adding box 'laravel/homestead' (v10.1.0) for provider: virtualbox
    box: Downloading: https://vagrantcloud.com/laravel/boxes/homestead/versions/10.1.0/providers/virtualbox.box
Download redirected to host: vagrantcloud-files-production.s3.amazonaws.com
    box:
    box: Calculating and comparing box checksum...
==> box: Successfully added box 'laravel/homestead' (v10.1.0) for 'virtualbox'!

initしてVagrantfileを作ります

C:\>vagrant init laravel/homestead
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

テキストエディタでVagrantfileのipを編集します。
ファイルのどこかに下記の行があるので、すぐしたにコメントを外したものを追加します。

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

仮想マシン起動

仮想マシン起動します。

C:\>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'laravel/homestead'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'laravel/homestead' version '10.1.0' is up to date...
==> default: Setting the name of the VM: 【VM名】
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 22 (guest) => 2200 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2200
    default: SSH username: vagrant
    default: SSH auth method: private key
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
GuestAdditions are newer than your host but, downgrades are disabled. Skipping.
==> default: Checking for guest additions in VM...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
    default: /vagrant => C:/【VMディレクトリ】

homesteadにログイン

仮想マシンができたのでsshログインしてみます。OSはUbuntu。
FTPなどでログインするときは下記を使います(rootはないようです)
ユーザー名:vagrant
パスワード:vagrant

C:\>vagrant ssh
Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-47-generic x86_64)


0 updates can be installed immediately.
0 of these updates are security updates.


Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0-47-generic x86_64)


0 updates can be installed immediately.
0 of these updates are security updates.


vagrant@vagrant:~$

Laravelインストールとプロジェクト作成

composer経由でLaravelをインストールします。
今回はmy_pageというプロジェクトを作っています。

$ sudo composer create-project laravel/laravel --prefer-dist my_page
Do not run Composer as root/super user! See https://getcomposer.org/root for details
(省略)
Application key set successfully.

下記の警告がでましたが気にせず実行しました(むやみにrootで実行するとあぶないのはわかる…)
おそらく実行したフォルダ「/var/www」に対してchownとかでユーザーを設定してないとこういうことになるんでしょう…。

Do not run Composer as root/super user! See https://getcomposer.org/root for details

ちなみに「sudo composer require laravel/homestead –dev」をsudoなしてやった場合、下記のエラーが出ます。

 [ErrorException]
  file_put_contents(./composer.json): failed to open stream: Permission denied

上でつくったmy_pageフォルダに移動して、chownで再帰的にオーナーをvagrantに変更します。
(オーナー変更しないと、仮想サーバーを起動してページアクセスした際にlogファイル開けない的エラーが出ます)

$ cd my_page
$ pwd
/var/www/my_page
$ sudo chown -R vagrant:vagrant /var/www/my_page

簡易サーバー起動とアクセス

laravelをインストールしたディレクトリ(今回は「/var/www/my_page」)で下記コマンドを実行すると簡易サーバーが起動します。

$ php -S 0.0.0.0:8080 -t public

仮想マシンのipアドレスが「192.168.33.10」の場合、下記のurlでアクセスできます。
http://192.168.33.10:8080

無事動作しました。

簡易サーバーを止めるときはキーボードで「Ctrl + C」とすると止まります。

MySQLへのログイン

デフォルトで「homestead」というテーブルが入っているのでそちらを利用します。
MySQLへのログインコマンドは下記、パスワードを聞かれるので「secret」と入力してenter。

$ mysql -u homestead -p

おわり。