2月
05
Laravel5をイチからインストール!
- POSTED BY 小谷松 丈樹 IN 創作
- No Comments
Laravel5
個人的に注目しているPHPフレームワーク「Laravel」がバージョン5.0.0をリリースしました。
Laravel4は以前インストールしましたが、今回はサーバの用意からまるっとまとめてみます。
目標
サーバの立ち上げからLaravelのインストール、Hello Worldまで。
環境
サーバ
- Amazon EC2
ミドルウェア・モジュール
必要な情報は公式から
- PHP >= 5.4
- Mcrypt PHP Extension
- OpenSSL PHP Extension
- Mbstring PHP Extension
構築開始
サーバ立ち上げ
AWSコンソールに入ってサーバを立ち上げます。Launch Instanceから
Amazon Linux AMIでいきましょう。
あとは適宜サーバスペック等を設定。
といってもいじる所は特になく、Security Groupくらいでしょうか。
- SSHをMy IPに
- HTTPをフル解放
適当にpemファイルを設定して起動!
5分ほど待って…
Instance State が running に変わりました。起動完了ですね。
適当にInstanceに名前を付けておきますかね、”Laravel5″とかに。
サーバ設定
SSHログイン
サーバ立ち上げ時に作成あるいは設定したpemキーを使ってSSHログインします。
ついでにrootのパスワード設定まではやっておきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
ssh -i /path/to/xxx.pem ec2-user@PublickDNS.ap-northeast-1.compute.amazonaws.com The authenticity of host 'PublickDNS.ap-northeast-1.compute.amazonaws.com (PublickIP)' can't be established. RSA key fingerprint is **:**:**.... Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'PublickDNS.ap-northeast-1.compute.amazonaws.com,PublickIP' (RSA) to the list of known hosts. __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| https://aws.amazon.com/amazon-linux-ami/2014.09-release-notes/ [ec2-user@ip-**-**-**-** ~]$sudo su - Last failed login: Thu Feb 5 04:34:11 UTC 2015 on pts/0 There was 1 failed login attempt since the last successful login. [root@ip-**-**-**-** ~]# passwd Changing password for user root. New password: Retype new password: passwd: all authentication tokens updated successfully. [root@**-**-**-** ~]# |
これでいいや。
ミドルウェアインストール
それではApache,PHPをインストールしましょう。
環境は以前のインストール時に触れた通りですが下記となります。
PHP5.4以上がapache2上及びコンソール上で動く環境
という事でまずはApache
1 2 3 4 5 6 |
//インストール済みソフトウェアのアップデート [root@ip-**-**-**-** ~]# yum update -y [root@ip-**-**-**-** ~]# yum install httpd [root@ip-**-**-**-** ~]# httpd -v Server version: Apache/2.2.29 (Unix) Server built: Sep 15 2014 19:41:41 |
次にPHP、ですが、今回はPHP5.5を入れます。
どこかしらで、Laravelの便利機能artisanコマンドが「PHP5.5以上でないと使えない」
と読んだ気がするんですが、今その文献が見つけられず、勘違いっぽいですが一応5.5を入れます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
[root@ip-**-**-**-** ~]# yum install --enablerepo=remi --enablerepo=remi-php55 php php-devel php-mbstring php-mcrypt php-mysql ~~~~ Dependencies Resolved ================================================================================================================= Package Arch Version Repository Size ================================================================================================================= Installing: php x86_64 5.3.29-1.7.amzn1 amzn-main 2.8 M php-devel x86_64 5.3.29-1.7.amzn1 amzn-main 2.6 M php-mbstring x86_64 5.3.29-1.7.amzn1 amzn-main 2.3 M php-mcrypt x86_64 5.3.29-1.7.amzn1 amzn-main 53 k php-mysql x86_64 5.3.29-1.7.amzn1 amzn-main 178 k Installing for dependencies: mysql55-libs x86_64 5.5.40-1.3.amzn1 amzn-updates 813 k php-cli x86_64 5.3.29-1.7.amzn1 amzn-main 2.6 M php-common x86_64 5.3.29-1.7.amzn1 amzn-main 1.0 M php-pdo x86_64 5.3.29-1.7.amzn1 amzn-main 170 k Transaction Summary ================================================================================================================= Install 5 Packages (+4 Dependent packages) Total download size: 13 M Installed size: 38 M Is this ok [y/d/N]: N |
--enablerepo=remi --enablerepo=remi-php55 としても、デフォルトのリポジトリ
amzn-main が指定され、
PHPのバージョンが 5.3.29-1.7.amzn1 となっていますね。
もちろんこれではLaravelが動かないので、「N」でインストールを中止します。
リポジトリamzn-main を指定しないようにする
--disablerepo=amzn-main オプションを付けて再度実行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
[root@ip-**-**-**-** ~]# yum install --enablerepo=remi --enablerepo=remi-php55 --disablerepo=amzn-main php php-devel php-mbstring php-mcrypt php-mysql ~~~~ Dependencies Resolved ================================================================================================================= Package Arch Version Repository Size ================================================================================================================= Installing: php x86_64 5.5.21-1.el6.remi remi-php55 2.6 M php-devel x86_64 5.5.21-1.el6.remi remi-php55 1.2 M php-mbstring x86_64 5.5.21-1.el6.remi remi-php55 961 k php-mcrypt x86_64 5.5.21-1.el6.remi remi-php55 43 k php-mysqlnd x86_64 5.5.21-1.el6.remi remi-php55 3.6 M Installing for dependencies: php-cli x86_64 5.5.21-1.el6.remi remi-php55 3.7 M php-common x86_64 5.5.21-1.el6.remi remi-php55 1.0 M php-pdo x86_64 5.5.21-1.el6.remi remi-php55 112 k php-pear noarch 1:1.9.5-3.el6.remi remi 375 k php-pecl-jsonc x86_64 1.3.6-1.el6.remi.5.5.1 remi-php55 47 k php-pecl-jsonc-devel x86_64 1.3.6-1.el6.remi.5.5.1 remi-php55 25 k php-pecl-zip x86_64 1.12.4-1.el6.remi.5.5 remi-php55 269 k php-process x86_64 5.5.21-1.el6.remi remi-php55 57 k php-xml x86_64 5.5.21-1.el6.remi remi-php55 208 k Transaction Summary ================================================================================================================= Install 5 Packages (+9 Dependent packages) Total download size: 14 M Installed size: 47 M Is this ok [y/d/N]:y |
remiリポジトリから、PHP5.5を指定してインストールを行うようになりました。
1 2 3 4 |
[root@ip-**-**-**-** ~]# php -v PHP 5.5.21 (cli) (built: Jan 21 2015 15:35:14) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies |
これでPHPのインストールも完了です。
Laravelのインストール
まずはおなじみ Composer.phar のインストールです。
1 2 3 4 5 6 7 8 |
[root@ip-**-**-**-** ~]# curl -sS https://getcomposer.org/installer | php #!/usr/bin/env php All settings correct for using Composer Downloading... Composer successfully installed to: /root/composer.phar Use it: php composer.phar [root@ip-**-**-**-** ~]# mv composer.phar /usr/local/bin/composer |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[ec2-user@ip-**-**-**-** ~]$ cd /var/www/ [ec2-user@ip-**-**-**-** www]$ composer create-project laravel/laravel --prefer-dist Installing laravel/laravel (v5.0.0) [ErrorException] mkdir(): Permission denied // 怒られた!>< [ec2-user@ip-**-**-**-** www]$ sudo chown -R ec2-user:ec2-user /var/www [ec2-user@ip-**-**-**-** www]$ composer create-project laravel/laravel --prefer-dist Installing laravel/laravel (v5.0.0) - Installing laravel/laravel (v5.0.0) Downloading: 100% Created project in /var/www/laravel Loading composer repositories with package information Installing dependencies (including require-dev) ~~~~ Application key [************************************] set successfully. |
/var/www/ で実行したら、 /var/www/laravel/public がドキュメントルートになった感じですね。
1 2 3 4 5 6 7 8 9 10 11 |
[ec2-user@ip-**-**-**-** www]$ sudo vi /etc/httpd/conf/httpd.conf // ドキュメントルートを書き換えて… DocumentRoot "/var/www/laravel/public" // .htaccessを有効かして… <Directory "/var/www/laravel/public"> # AllowOverride None AllowOverride All // httpd起動! [ec2-user@ip-**-**-**-** www]$ sudo service httpd restart |
インストール完了!
必要最低限の設定しかしていないので、この設定のままだと問題はあると思いますけど。
触ってみる
Hello worldくらいまで触ってみます。
ルーティング
ルーティングファイルの場所が app/Http/routes.php と変わってますね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
[ec2-user@ip-**-**-**-** www]$ vi laravel/app/Http/routes.php <?php /* |-------------------------------------------------------------------------- | Application Routes |-------------------------------------------------------------------------- | | Here is where you can register all of the routes for an application. | It's a breeze. Simply tell Laravel the URIs it should respond to | and give it the controller to call when that URI is requested. | */ Route::get('/', 'WelcomeController@index'); Route::get('home', 'HomeController@index'); Route::controllers([ 'auth' => 'Auth\AuthController', 'password' => 'Auth\PasswordController', ]); |
という事で、ルートを軽く付け足してみます。
1 2 3 |
Route::get('hello',function(){ return 'Hello world!'; }); |
artisan
Controllerを作成したり、マイグレーションを提供したりと、
色々と便利機能の詰まったartisanコマンドも見てみましょう。
1 2 3 |
// HogeControllerを作成 [ec2-user@ip-**-**-**-** laravel]$ php artisan make:controller HogeController Controller created successfully. |
このコマンドを叩くと、Controllerクラス置き場の
app/Http/Controllers/ の下に、
HogeController.php が自動で作成されます。
中身は、空関数の集まりですが、データのCRUDに適した関数郡が設置されていて、
1 |
Route:: resource('hoge','HogeController'); |
上記ルーティングを
app/Http/routes.php に追記するだけで、
/hoge でアクセスした場合は index() が動き、
/hoge/create でアクセスした場合は create() が動き、
/hogeにPOST でアクセスした場合は store() が動くなど、
プログラムの大枠が提供されるようになっています。すてき。
View
LaravelはBladeというテンプレートエンジンを利用しています。
正規表現の置換でテンプレートをコンパイル?出力するから動作が高速だとかなんとか。
個人的にはデザインの共通化も簡単ですてきだと思います。
Viewの置かれるディレクトリは
project/resources/views/ です。
先ほど
/hoge/ にルートを設定したので、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
[ec2-user@ip-**-**-**-** laravel]$ mkdir resources/views/hoge [ec2-user@ip-**-**-**-** laravel]$ vi resources/views/hoge/layouts.blade.php <!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="utf-8" /> </head> <body> @yield('content') </body> </html> [ec2-user@ip-**-**-**-** laravel]$ vi resources/views/hoge/index.blade.php @extends('hoge.layouts') @section('content') <h1>Hello world</h1> @stop |
としてビューを作成します。
resources/views/hoge/index.blade.php の
@extends('hoge.layouts') が
ベースのレイアウトとなる
hoge/layouts.blade.php のテンプレートを取得して、
hoge/layouts.blade.php の
@yield('content') の位置に、
1 2 3 4 5 |
@section('content') <h1>Hello world</h1> @stop |
の中身を出力するって感じです。
BladeはPHPとしては独特な記法にはなってしまいますが、テンプレートの継承って思想が面白くて好きです。
で、コントローラで、先に作ったテンプレートを出力するように追記します。
1 2 3 4 5 6 7 8 9 10 11 |
class HogeController extends Controller { /** * Display a listing of the resource. * * @return Response */ public function index() { return view('hoge.index'); } |
viewの作成も簡潔で分かり易くなってますね。
以上でルート、コントローラ、ビューが全て設定完了しました。
コニチワー!!
最も大事な事を忘れないように。。。
サーバは立ち上げっぱなしだとどんどんお金がかかります。
テストが終わったらしっかりSTOPに。