PHPフレームワーク「Laravel5」の環境を Vagrant, CentOS 6.6, SCLの PHP 5.4, Apache2.4, MariaDB 5.5 で作ってみた、その１

## Laravel5, SCL の環境構築
Laravel4（ララベル）の環境を作ったけど、すでに Laravel5 が出ていたもあり折角なので、[Software Collections](http://qiita.com/murachi1208/items/202bff84964188619f57) から PHP 5.4以上, Apache, MariaDBを入れ環境を構築してみることにしてみました。

そして意外なところで３時間ほどはまりました。まあ勉強にもなりよかったんですけど、何故に毎回はまるんだろう？とｗ。

| ソフトウェア | バージョン |
|:-----------|:----------|
|Laravel     |5.0.16     | 
|PHP         |5.4.16     |
|Apache      |2.4.6      | 
|MariaDB     |5.5.40     | 

## Varagnt
こんな定義でさくっと作って立ち上げときます。

```
config.vm.define :laravel5 do |laravel5|
  laravel5.vm.network :private_network, ip: "192.168.11.213"
  laravel5.vm.provider "virtualbox" do |v|
    v.customize ["modifyvm", :id, "--memory", 384]
  end
end
```

## Software Collections (SCL) レポジトリのインストール
まずはじめに行っておくこと

```
# yum install centos-release-SCL
```

## PHP, PHP-FPM  のインストール
PHP は、いつもとおり。PHP-FPM (FastCGI Process Manager) を入れる理由は、SCL では libphp5.so, libphp5-zts.so が入らないから（ソースからコンパイルすれば入ります）な、そんな理由です（※ここで３時間ハマリました）。
あと mcrypt 入れないと Laravel が怒るのでいれますが、今回は最低限のパッケージだけ入れてますんで必要ならば適宜いれること。

```
# yum install php54
# yum install -y https://www.softwarecollections.org/en/scls/rhscl/php54/epel-6-x86_64/download/rhscl-php54-epel-6-x86_64.noarch.rpm
# yum install -y php54-php-mbstring php54-php-fpm php54-php-pdo php54-php-mysqlnd
# yum install -y https://www.softwarecollections.org/en/scls/remi/php54more/epel-6-x86_64/download/remi-php54more-epel-6-x86_64.noarch.rpm
# yum install -y php54-php-mcrypt
```

### ログイン/reboot 時にphp54 を有効化
SCL でインスコすると /opt/rh 以下に配置され、かつ scl コマンドでごにょごにょしないといけないので、ログイン/reboot 時にphp54 を有効化しときます。
/etc/profile.d/enablephp54.sh ファイルを作成し内容は下記をこぴぺします。

```text:/etc/profile.d/enablephp54.sh
#!/bin/bash
source /opt/rh/php54/enable
export X_SCLS="php54" 
```

> [https://access.redhat.com/solutions/527703]

これで ```php -v``` コマンド使えるようになります。

### PHP-FPM の起動設定
設定するとこは多少あるけど、とりあえずデフォルトで立ち上げておきます。
ちなみにデフォルトだと ```127.0.0.1:9000``` でサービスが立ち上がります。

```
# service php54-php-fpm start
# chkconfig php54-php-fpm on
# chkconfig php54-php-fpm --list
```

## Apache のインストール
こちらもさくっといつものとおり、な感じでサービス起動までやっときます。
念のためアクセスできるか確認しときと、よりgoodすね。

```
# sudo yum install httpd24
# service httpd24-httpd start
# /opt/rh/httpd24/root/usr/sbin/httpd -version
# chkconfig httpd24-httpd on
# chkconfig httpd24-httpd --list
```

## ついでに MariaDB(MySql)をインストール
今回、登場ないけどついでにｗ

```
# yum install mariadb55 mariadb55-server
# service mariadb55-mysqld start
# chkconfig mariadb55-mysqld on
```

/etc/profile.d/enablemariadb55.sh ファイルを作成し内容は下記をこぴぺします。

```text:/etc/profile.d/enablemariadb55.sh
#!/bin/bash
source /opt/rh/mariadb55/enable
```

### Composerのインストール
Composer パッケージ管理プログラムを使うので、まずこれをインストールするとこから初めます。

```
# curl -sS https://getcomposer.org/installer | php
# mv composer.phar /usr/local/bin/composer
```

パスを追加します。```.bashrc``` に追加しておくといいことありますね。

```
export PATH=$PATH:/usr/local/bin
```

### laravel5 をインストール（プロジェクトの作成）
最新版（バージョン指定しないと常に最新をもってくる）のlaravel5 をインストールテストと起動テストをしてみます。
※初回は、色々なコンポーネントを読み込むため非常に時間がかかります。

```
$ composer create-project laravel/laravel hogehoge --prefer-dist
$ cd hogehoge
$ php artisan serve --host="0.0.0.0" --port="9090"
```

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/44540/0883afc7-5c69-f81c-011c-59386db0523b.png)

```http://192.168.11.213:9090``` にアクセスし上記の画面が表示されればok

### Apache で laravel のプロジェクトを動かす前に確認しておくこと
Apache -> FirstCGI 経由で php が実行されるかまず確認しておくこと。
いわゆる phpinfo の情報を前もって確認しておくことが重要、重要です（２度いった）。

テスト用に適当に conf ファイルを作り（下記を参照）ます。

```text:/opt/rh/httpd24/root/etc/httpd/conf.d/testphp.conf
Listen 8888
<VirtualHost 192.168.11.213:8888>
    DocumentRoot /opt/rh/httpd24/root/var/www/html2
    ServerName laravel5-test
    <LocationMatch "^/.*\.php$">
        ProxyPass fcgi://127.0.0.1:9000/opt/rh/httpd24/root/var/www/html2
    </LocationMatch>
    <Directory "/opt/rh/httpd24/root/var/www/html2/">
      Require all granted
    </Directory>
</VirtualHost>
```

phpのファイル作成しておきます。

```
# mkdir /opt/rh/httpd24/root/var/www/html2
# echo "<?php phpinfo(); ?>" > /opt/rh/httpd24/root/var/www/html2/phpinfo.php
```

Apache. php-fpm を再起動したら ```http://192.168.11.213:8888/phpinfo.php``` を実行してみて下記の画面が表示されればok。

![php.png](https://qiita-image-store.s3.amazonaws.com/0/44540/5eac7dfd-e450-ccb5-2006-10d1ce3f6cd1.png)

## Apache で laravel のプロジェクトを動かす
scl でインスコした apache の DocumentRoot は、```/opt/rh/httpd24/root/var/www/``` なのでとりあえずお作法に従ってその下に Laravel プロジェクトを 作ってみる（どこでもいいんだけどねｗ）。

まずは、Laravel のプロジェクトを作成します。

```
# cd /opt/rh/httpd24/root/var/www/
# composer create-project laravel/laravel /opt/rh/httpd24/root/var/www/laravel5 --prefer-dist
```

symfony/event-dispatcher でGithub のアカウントを聞いてきたので素直に入力。

```
  - Installing symfony/event-dispatcher (v2.6.4)

A token will be created and stored in "/root/.composer/auth.json", your password will never be stored
To revoke access to this token you can visit https://github.com/settings/applications
Username: 
Password: 
```
```/opt/rh/httpd24/root/etc/httpd/conf.d``` に以下のファイルをさくっと作り、httpd を再起動します。

```text:/opt/rh/httpd24/root/etc/httpd/conf.d/laravel5.conf
Listen 9999

<VirtualHost 192.168.11.213:9999>
    ServerName laravel5
    DocumentRoot /opt/rh/httpd24/root/var/www/laravel5/public
    DirectoryIndex index.html index.php
    <LocationMatch "^/.*\.php$">
        ProxyPass fcgi://127.0.0.1:9000/opt/rh/httpd24/root/var/www/laravel5/public
    </LocationMatch>
    <Directory "/opt/rh/httpd24/root/var/www/laravel5/">
      Require all granted
    </Directory>
</VirtualHost>
```

Apache 2.2 の conf そのまま使えると思ったら 2.4 から定義がだいぶ変更されていました。特に NameVirtualHost の指定をしなくてもよくなったり細々したところが。。。

httpd を再起動して…。```http://192.168.11.213:9999/``` にアクセスしてみます。okですよねｗ

## 参考にさせていただいたサイト様

> [apache インストール/設定 メモ](http://hideaki-momose.blogspot.jp/2014/04/apache_9.html)
> [CentOS6.4にインストールしたApacheを設定する。](http://alfa.hatenablog.jp/entry/2013/07/03/222507)
> [PHP5.5.5,PHP-FPMのインストール手順(Apache, Mysql)](http://time-complexity.blogspot.jp/2013/11/php-fpm-with-apache.html)