Laravel5の環境を構築する

Laravelを次のプロジェクトで利用しようと思います。まず環境設定から。LaravelではHomesteadというVagrantの環境が用意されているようですが、例によってぼくの場合は本番環境とChef(OpsWorks)のレシピを使いまわしたいため自前で構築します。

インストール手順

laravel.jpのドキュメントを参考にして進めていきます。

Laravel 5.1 インストール

まず最初に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/

ブラウザでアクセスしてみます。

NewImage

Nginxで動かす場合にはserverディレクティブのrootをLaravelアプリケーションのpublicフォルダに設定すればOKでした。

root   /share/blog/public;

Zip拡張のところが少しハマりました。これをレシピに反映させないと。