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


Laravel5, SCL の環境構築

Laravel4(ララベル)の環境を作ったけど、すでに Laravel5 が出ていたもあり折角なので、Software Collections から PHP 5.4以上, Apache, MariaDBを入れ環境を構築してみることにしてみました。

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

ソフトウェア バージョン
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 が入らないから(ソースからコンパイルすれば入ります)な、そんな理由です(※ここで3時間ハマリました)。
あと 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 ファイルを作成し内容は下記をこぴぺします。

/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)をインストール

今回、登場ないけどついでにw

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

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

/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"

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

Apache で laravel のプロジェクトを動かす前に確認しておくこと

Apache -> FirstCGI 経由で php が実行されるかまず確認しておくこと。
いわゆる phpinfo の情報を前もって確認しておくことが重要、重要です(2度いった)。

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

/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。

Apache で laravel のプロジェクトを動かす

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

まずは、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 を再起動します。

/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ですよねw

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

apache インストール/設定 メモ
CentOS6.4にインストールしたApacheを設定する。
PHP5.5.5,PHP-FPMのインストール手順(Apache, Mysql)