Local に AWS の EC2 で Laravel の開発環境を構築する。

個人的にwebサービスを作ろうと考えていて、Laravel というPHP界隈ではポピュラーなフレームワークを採用することにしました。
そこで、Laravelが提供している、Laravel Homesteadという開発環境のインストールを試みたのですが、意外とうまくいかない。
前のバージョンだと設定5分、待ち時間2時間みたいなイメージだったので少しショックなんですが、仕方ない。

素直に自分の不甲斐なさを諦めて、リリース時の想定でもあるEC2 インスタンスでLaravelを構築しておけば後々安心なので、こちらで開発環境を用意しました。とはいえ実際のAWS上に開発用インスタンスを立ち上げるわけではなく、LocalにVagrantを使ってLaravelの仮想環境を用意しようと思います。

事前に、VagrantVirtualBox などで仮想環境用意しておいてください。

EC2 の Vagrant Box入手

VagrantにAWSからVagrant box が提供されていますので、そちらを確認。
https://app.vagrantup.com/mvbcoding/boxes/awslinux

Vagrantを展開したいフォルダに移動して以下のコマンドを入力します。

vagrant init mvbcoding/awslinux

Vagrantfile ファイルが用意されます。

EC2 インスタンスの立ちあげ

テキストエディタを開いて、以下のコメントアウトを外してシンクロフォルダの記述をendブロックの前に記述します。

 config.vm.network "private_network", ip: "192.168.33.10"
 config.vm.synced_folder ".", "/vagrant", mount_options: ['dmode=777','fmode=755'], owner: "apache", group: "apache"

仮想環境を起動します。

vagrant up

起動したら、ssh で仮想環境に接続しましょう。

vagrant ssh

LAMP環境とphpMyAdminをインストール

SSHで仮想環境にログインした状態で進めて行きましょう。
こちらは本家AWSチュートリアル通りでほぼOKです。
チュートリアル: Amazon Linux AMI を使用して LAMP ウェブサーバーをインストールする
気をつけないといけないのはphpのインストールは7.1.3以上がLarabelの5.6と5.7では必要です。なので、PHPの70の記述は71に打ち替えてインストールするか、Laravelのバージョンを5.5以下にする必要があります。
私は71に打ち替えてインストールしました。
(チュートリアルの下の方、オプションのphpMyAdminのインストールのところにもあるので、phpMyAdmin入れるときには気をつけましょう)

composer install

curl -sS https://getcomposer.org/installer | sudo php
sudo cp composer.phar /usr/local/bin/composer
sudo ln -s /usr/local/bin/composer /usr/bin/composer

composer で fork failed – Cannot allocate memory 回避

私の環境では、composerでLaravel 入れようとすると、

proc_open(): fork failed - Cannot allocate memory The archive may contain identical file names with different capitalization (which fails on case insensitive filesystems) Unzip with unzip command failed, falling back to ZipArchive class
The following exception is caused by a lack of memory or swap, or not having swap configured
Check https://getcomposer.org/doc/articles/troubleshooting.md#proc-open-fork-failed-errors for details
PHP Warning: proc_open(): fork failed – Cannot allocate memory in phar:///usr/local/bin/composer/vendor/symfony/console/Application.php on line 959

とエラーが出てきました。スワップメモリ等手当ししてあげないとうまくインストールできないようなので、手当しました。

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

シェアフォルダVagrant に Laravel インストール

開発時にテキストエディタで、追加変更ができるように設定しておいたシェアフォルダ上にcomposerを使ってLaravelをインストールします。
(実際のAWSのEC2上であれば、/var/www/ とかに展開するのがいいと思います。開発環境なので、シェアフォルダ上に展開した後に、シムリンクを張ります。)

cd /vagrant
composer create-project --prefer-dist laravel/laravel
cd laravel
composer install
php artisan key:generate

ln -s /vagrant/laravel/public/ var/www/laravel/

トップ画面を確認

今回のケースでは、192.168.33.10/laravel/ で下記のようにトップ画面が出てきたら無事完成となります。

補足

あと、ドキュメントを読んでみると、strogeとchashに書き込み権限が必要なようです。実環境に上げたときには以下の設定が必要かもしれません。(要確認)
仮想環境ではVagrantfileにシンクロフォルダの設定で同様の設定をしています。

 sudo chmod -R 777 laravel/storage
 sudo chmod -R 775 laravel/bootstrap/cache
 sudo chown -R apache:apache laravel/