Laravelを次のプロジェクトで利用しようと思います。まず環境設定から。LaravelではHomesteadというVagrantの環境が用意されているようですが、例によってぼくの場合は本番環境とChef(OpsWorks)のレシピを使いまわしたいため自前で構築します。
インストール手順
laravel.jpのドキュメントを参考にして進めていきます。
まず最初にcomposerでlaravelをインストールします。ぼくの環境はNginx + PHP7の環境でcomposerもインストールされている状態です。
$ composer global require "laravel/installer=~1.1"
~/.composer/vendor/bin
へのPATHを通します。
PATH=$PATH:$HOME/bin:~/.composer/vendor/bin export PATH
次にLaravelのアプリケーションをlaravelコマンドで作成します。
$ laravel new blog
すると下記のようなエラーが出ました。
[RuntimeException] The Zip PHP extension is not installed. Please install it and try again.
Zip拡張をインストールする
インストールするためにpeclコマンドを実行できる必要があります。
$ sudo yum install php-pear --disablerepo=* --enablerepo=remi,remi-php70
Remiのリポジトリを指定してインストールしないとpeclコマンドの実行時にエラーになるので注意しましょう。こんなエラーが出ると思います。
$ sudo pecl install zip Parse error: syntax error, unexpected 'new' (T_NEW) in /usr/share/pear/PEAR/Frontend.php on line 91
上記のエラーが出た場合はインストールされているPEARが古いです。PEARは1.10.0以降でないとうまく動かないと思います。
PEAR 1.10.0 with PHP7 support is out
インストールができたらPEARのバージョンを確認します。
$ pear -V PEAR Version: 1.10.1 PHP Version: 7.0.5 Zend Engine Version: 3.0.0
zlibをインストールしておきます。
$ yum -y install zlib-devel
次にpeclコマンドでzip拡張をインストールします。
$ sudo pecl install zip ...(省略) Build process completed successfully Installing '/usr/lib64/php/modules/zip.so' install ok: channel://pecl.php.net/zip-1.13.2 configuration option "php_ini" is not set to php.ini location You should add "extension=zip.so" to php.ini
これでphp.iniにextension=zip.soを追記して、php-fpmを再起動すればlaravelコマンドでアプリケーションを作成することができるようになります。
Laravelアプリケーションを作成する
先ほどエラーになったコマンドを再度試します。今度はうまくいきました。
$ laravel new blog ...(省略) > php artisan key:generate Application key [base64:XXXXXXXXXXXXXXXXXXXXXX] set successfully. Application ready! Build something amazing.
バージョンの確認は下記のようにします。
$ php artisan --version Laravel Framework version 5.2.29
次にartisan serve
でサーバーを起動して動作を確認してみます。
$ php artisan serve Laravel development server started on http://localhost:8000/
Vagrantのゲスト側でサーバーを起動したんですが、ホストのOSXのブラウザから表示しようとするとうまくいきません。netstatで起動状況を確認すると::1:8000
をリスンしていました。
$ sudo netstat -tanp ...(省略) tcp 0 0 ::1:8000 :::* LISTEN 12455/php
検索してみると下記に解決方法がありました。
‘php artisan serve’ only binds port 8000 to ipv6 ::1:8000
下記のようにhostのオプションを0.0.0.0で渡すとうまくいくようです。
$ php artisan serve --host 0.0.0.0 Laravel development server started on http://0.0.0.0:8000/
ブラウザでアクセスしてみます。
Nginxで動かす場合にはserverディレクティブのrootをLaravelアプリケーションのpublicフォルダに設定すればOKでした。
root /share/blog/public;
Zip拡張のところが少しハマりました。これをレシピに反映させないと。