Laravel Homestead導入時の悪戦苦闘メモ
2019年01月29日
laravelの勉強をしていて、環境構築用にlaravel homesteadを導入してみたのですが、かなり苦戦したのでメモを残しておきます。
laravel homesteadとは
laravelをローカル環境に導入するときに、環境構築の手間を省くために公式に準備された仮想環境構築ツールです。
laravel homesteadの仮想環境の構築には、Virtual Box+Vagrantを利用するのですが、Vagrantの設定をlaravelの仮想環境に特化するように準備してくれるツールです。
公式サイトには、laravel homesteadを使うことでローカルへの環境構築が楽ちんになると書いてあったのですが、思わずはまってしまったのでメモとして残しておきます。
導入の手順
1・Virtual BoxとVagrantをダウンロードします。
homesteadは基本Virtual BoxとVagrantを使うだけなので、何はともあれこの2つをインストールします。
2・Composerが導入されていない場合はComposerを導入します
Composerは、phpのパッケージ管理ツールです。
Composerは、Laravelを導入するのにあたってほぼ必須となるツールです。
入ってない場合は入れておきます。
3・Homsteadの設定を行います
公式サイトの手順に従います
HomesteadのCLIツールのインストール
composer global require “laravel/homestead=~2.0”
bashプロファイル ~/.bash_profileを編集してコマンド実行パスを追加
export PATH=$PATH:~/.composer/vendor/bin
ymlファイル(Vagrant用の設定ファイル)の初期化
homestead init
SSHキーの設定
ssh-keygen -t rsa -C “you@homestead”
homesteadの仮想環境生成
homestead up
それで、以下のエラーが出ました。
Bringing machine ‘default’ up with ‘virtualbox’ provider…
There are errors in the configuration of this machine. Please fix
the following errors and try again:
vm:
* The host path of the shared folder is missing: ~/Code
これは、要するに、ホームディレクトリに Codeというフォルダがないということです。
cd ~
mkdir ./Code
これで再度
homestead up
これでエラーが解消され、問題が解決しました
これで、仮想環境が作成されたのでSSHでアクセスしてみます
homestead ssh
無事仮想環境にログインできました。
メインマシンのhostsファイルに、以下を追加します。
192.168.10.10 homestead.app
公式サイトによると、この時点でサイト(homestead.app)へアクセスできるはずなのですが
http://homestead.app
上記URLへアクセスすると、エラー。
No input file specified
これは、ファイルが存在していないということらしい。
調べて見ると、 ymlファイルに設定されているのが以下の通りなのですが
sites:
– map: homestead.app
to: /home/vagrant/Code/Laravel/public
これは、上記のドメインが、/home/vagrant/Code/Laravel/publicに紐付けられているということなのですが、仮想マシンにログインして確認したところ、「/home/vagrant/Code/」以下に、Laravelのディレクトリが存在していない。
これには相当ハマってしまい、調べても原因がよく分かりませんでした。
とりあえず、メインマシンのcomposerのバージョンが少し古かったみたいなので、メインマシンのcomposerのバージョンを最新に更新。
homestead destroy
これで一旦仮想環境を削除して
homestead provision
これで再度作り直してみます。
これで再度サイトへアクセスすると、表示されました。
しかし、今度は別のエラーが・・・
autoload.phpがないとかそういうことらしく、調べれてみると、必要なファイルが存在してないのがあるようなので、これはComposerをアップデートしたらいいということなので、アップデートしてみます。
composer update
すると、途中でエラー。
proc_open(): fork failed – Cannot allocate memory in phar:///usr/local/bin/composer/vendor/symfony/console/Application.php
メモリが足りていないというエラーです。
php.iniを編集して、memory_limitを編集してみるも、駄目。
調べると、swap メモリの設定を追加したらいけるということ。
仮想マシン内で、以下のコマンドをスーパーユーザ権限で実行
sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
sudo /sbin/mkswap /var/swap.1
sudo /sbin/swapon /var/swap.1
これで再度Composerをアップデートしたところ、通りました・・・!
Laravelの初期画面。ついに起動!ここまで長かった・・・
雑感
簡単に仮想環境が構築できるといいつつ、やってみると何箇所かはまるポイントがあって大変でした。
ぶっちゃけ、ローカルの仮想環境って、homesteadなんか使わなくてもMAMPやXAMPで十分じゃね・・・という気もしますが、何故Vagrant+Virtual Boxを使うのが良いのかよくわかりません。
また、仮想環境にデフォルトの設定で2GBのメモリが割り当てられるようなので、仮想環境にメインマシンのメモリも圧迫されます。
とりあえず、こういうものもあるということで、引き続き色々使って試してみようとは思います。
その後
Homestead環境のセットアップが終わってからですが、まずは、Laravelのデフォルトのサイトが表示されています。
その後どうやってサイトを作り込んでいくかですが、メインマシンの
~/Code
フォルダが仮想マシンのエイリアスになっているようなので、そこを作業フォルダにしていけばその後の仮想環境の作業をメインマシンで進めていけます。
作ったサイトはhostsファイルにドメインと仮想マシンのIPアドレスを紐付けることで、仮想マシンでの表示が確認できます。
Homesteadの仮想環境はメモリを圧迫するので、使い終わったら、コマンドラインで
homestead halt
で停止することができ
homestead up
で再度起動できます。
homestead環境の削除
vagrant box remove laravel/homestead –all
ymlファイルの更新後の仮想環境への反映
vagrant reload –provision
Laravelのバージョンアップ
公式のLaravel5.7のHomestead導入ガイドに従ってHomestead環境をセットアップしたのに、デフォルトのLaravelのバージョンが5.4で最新の5.7ではなかった。
5.4から5.7へのバージョンアップは、仮想環境のLaravelフォルダまで移動して、個別に行った。
手順としては、Laravelフォルダにある composer.jsonファイルを編集して、設定内容の変更を行った後に、
composer update
で適用される。
(このあたりはググったら色々でてくるので詳細は割愛)