前提
-
AWS
管理コンソールでAmazon Linux
のEC2
インスタンスを作成済 - 作業するユーザーを作成済
今回使用したバージョン
Nginx 1.8.1
PHP 7.0.8
Nginx、 PHP関連のインストール
PHP7を取得するために、scl-utilsとremiインストールし、Nginx、PHP、PHPの各種モジュールをインストール。
PHPのモジュールはアプリに必要なモジュールを適宜いれる
$ sudo rpm -Uvh ftp://ftp.scientificlinux.org/linux/scientific/6.4/x86_64/updates/fastbugs/scl-utils-20120927-8.el6.x86_64.rpm
$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
$ sudo yum install -y nginx php70 php70-fpm php70-gd php70-mbstring php70-mysql
php7−fpmの設定
php7-fpmの設定ファイルを変更する
今回はUNIXドメインソケットで設定
以下、編集箇所の抜粋
user = nginx
group = nginx
listen = /var/run/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0666
catch_workers_output = yes
※user、groupはnginxとしているが環境に合わせて設定する
※一番最後のcatch_workers_output
はエラーログを出力するため
Nginxの設定
以下は、nginx.conf
のserver設定のみを抜粋
(インストールした時に入ったもののserver設定のみ変更して、他は変更していません)
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name example.com;
root /usr/share/nginx/html;
index index.php index.html index.htm;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
}
# redirect server error pages to the static page /40x.html
#
error_page 404 /404.html;
location = /40x.html {
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
upstream php-fpm {
server unix:/var/run/php-fpm.sock;
}
サービスの起動
$ sudo service php-fpm start
$ sudo service nginx start
実行確認
/usr/share/nginx/html
に phpinfo()
を記述したphpファイルを作成
今回はinfo.php
という名前にしておく
ブラウザからhttp://サーバIP/info.php
にアクセスし、phpinfo
が表示されることを確認
最後にLaravel 5.2のプロジェクトを起動について
ドキュメントルートも変更し、/var/www/
配下にlaravelのプロジェクトを格納(今回は laravelpj
という名前のプロジェクト)
プロジェクト配下の所有者、グループをnginxに変更する
$ sudo chmod -R nginx:nginx /var/www/laravelpj
先程のnginx.conf
を少し変更
server {
listen 80 default_server;
server_name example.com;
root /var/www/laravelpj/public;
index index.php index.html index.htm;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
}
}
サービスの再起動
$ sudo service nginx restart
注意書き
lalavelのプロジェクトにアクセスしたら、以下のエラーが発生した。
PHP Fatal error: Uncaught ReflectionException: Class log does not exist in /var/www/laravelpj/vendor/laravel/framework/src/Illuminate/Container/Container.php:734
Stack trace:
#0 /var/www/laravelpj/vendor/laravel/framework/src/Illuminate/Container/Container.php(734): ReflectionClass->__construct('log')
#1 /var/www/laravelpj/vendor/laravel/framework/src/Illuminate/Container/Container.php(629): Illuminate\Container\Container->build('log', Array)
#2 /var/www/laravelpj/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(697): Illuminate\Container\Container->make('log', Array)
#3 /var/www/laravelpj/vendor/laravel/framework/src/Illuminate/Container/Container.php(849): Illuminate\Foundation\Application->make('log')
#4 /var/www/laravelpj/vendor/laravel/framework/src/Illuminate/Container/Container.php(804): Illuminate\Container\Container->resolveClass(Object(ReflectionParameter)) in /var/www/laravelpj/vendor/laravel/framework/src/Illuminate/Container/Container.php on line 734
ネットで検索してみると、laravelプロジェクトの .env
ファイルのvalueにブランクが含まれる、もしくは2バイト文字を使用しているというのと、logファイルのパーミッションの問題が多く引っ掛かったが、今回の場合は単純に必要なモジュールがなかったからだったようだ。
PHPを再インストールしたので原因の特定ができなかったが、恐らくpdo、mysqlのモジュールが足りていなかったためだと思う。
同じエラーが発生している人は、.envファイルと、logファイルのパーミッションと、PHPのモジュールの再確認を!