Vagrant内で構築していますが、汎用的に使えるかと思います。
インストールするパッケージ
- PHP5.5(or 5.6)
- php-mcrypt(暗号とハッシュの生成に利用される)
- php-mysql(PDOを入れたいだけだけど、どうせ使うので)
- Composer(PHPライブラリの依存関係管理に利用される)
- php-fpm
- php-opcache(php5.5以上ではapcではなくopcacheを使用する)
- nginx
- Laravel
※PHP5.6で入れたい場合は以降の「--enablerepo=remi-php55」を「--enablerepo=remi-php56」に置き換えて実行することでインストールできます。
php5.5のインストール
epelとremiリポジトリの追加
$ sudo rpm -ivh https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ sudo sed -i -e "s/enabled *= *1/enabled=0/g" /etc/yum.repos.d/epel.repo
$ sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
$ sudo sed -i -e "s/enabled *= *1/enabled=0/g" /etc/yum.repos.d/remi.repo
yumでPHP5.5をインストール
$ sudo yum install php --enablerepo=epel --enablerepo=remi --enablerepo=remi-php55
/etc/php.ini
# 応答ヘッダーにPHPのバージョン等を出力しない
expose_php = Off
# ログレベル。本番環境では E_ALL とする
error_reporting = E_ALL | E_STRICT
# ブラウザでのエラー表示。本番環境では Off とする
display_errors = On
# エラーをログに残す
log_errors = On
# 攻撃の内容を詳しく知る為に 4KB 程に設定
log_errors_max_len = 4096
# エラーログ出力先
error_log = "/var/log/php_error.log"
# 文字エンコーディング
default_charset = "UTF-8"
# タイムゾーン
date.timezone = "Asia/Tokyo"
# デフォルト言語
mbstring.language = Japanese
# 内部文字エンコーディング
mbstring.internal_encoding = UTF-8
# HTTP入力文字エンコーディングのデフォルト
mbstring.http_input = auto
# 文字エンコーディング検出順序のデフォルト
mbstring.detect_order = auto
php-mcryptのインストール
$ sudo yum install php-mcrypt --enablerepo=epel --enablerepo=remi --enablerepo=remi-php55
php-mysqlのインストール
$ sudo yum install php-mysql --enablerepo=epel --enablerepo=remi --enablerepo=remi-php55
php-opcacheのインストール
$ sudo yum install php-opcache --enablerepo=epel --enablerepo=remi --enablerepo=remi-php55
設定は推奨設定を使用
/etc/php.d/opcache.ini
# PHP の CLI 版に対してオペコード・キャッシュを有効にします。
opcache.enable_cli=1
# OPcache によって使用される共有メモリ・ストレージのサイズ。(MB単位)
opcache.memory_consumption=128
# インターン (intern) された文字列を格納するために使用されるメモリ量。(MB単位)
opcache.interned_strings_buffer=8
# OPcache ハッシュテーブルのキー(すなわちスクリプト)の最大数。
opcache.max_accelerated_files=4000
# 更新のためにスクリプトのタイムスタンプをチェックする頻度。(秒単位)
# 0にすると、OPcacheは、リクエストごとに更新をチェックします。
# ※開発モードの時は0にしないと、変更したコードの更新されず混乱する場合があるので注意。
opcache.revalidate_freq=60
# 有効にすると、それぞれに割り当てられたブロックを解放しない、高速シャットダウン・シーケンスが使用されます。
# しかし、リクエスト変数のすべてのセットをひとまとめに割当てを解除することは、Zend Engineのメモリ・マネージャに依存します。
opcache.fast_shutdown=1
Composerのインストール
$ curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer
php-fpmのインストール
yumでインストール
$ sudo yum install php-fpm --enablerepo=epel --enablerepo=remi --enablerepo=remi-php55
設定をnginx用にする
/etc/php-fpm.conf
# epollを使用する
- ;events.mechanism = epoll
+ events.mechanism = epoll
参考:epollとは
/etc/php-fpm.d/www.conf
# Unix Socket通信で通信を行う(処理がちょっと早いらしい)
- listen = 127.0.0.1:9000
+ listen = /var/run/php-fpm.sock
# unix socketのパーミッションを設定する
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
# ユーザーとグループ設定
user = nginx
group = nginx
# 許可クライアントを自身のみに。
listen.allowed_clients = 127.0.0.1
Laravel4.2のインストール
Composerを使用してインストール
$ composer create-project laravel/laravel project-name --prefer-dist
タイムゾーンと地理情報の設定
app/config/app.php
'timezone' => 'Asia/Tokyo',
'locale' => 'ja',
ディレクトリのパーミッションの設定
$ chown -R nginx app/storage
nginxのインストール
nginx公式リポジトリを登録する
$ sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
こうなってればOK
/etc/yum.repos.d/nginx.repo
# nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1
yumでインストール
$sudo yum install -y nginx
Laravelの設定をする
/etc/nginx/nginx.conf
user nginx;
# nginxのworkerプロセスの数を設定します。通常はCPUのコア数以下に設定します。
worker_processes 4;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
# 一つのworkerプロセスが同時に処理できる最大コネクション数を設定します。
worker_connections 1024;
}
#----------------------------------------
# アクセス全般に対してのデフォルト設定
#----------------------------------------
http {
#---------------------------
# 基本設定
#---------------------------
include /etc/nginx/mime.types;
default_type application/octet-stream;
charset utf-8;
#----------------------------
# ログフォーマットの設定
#----------------------------
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# アクセスログの設定
access_log /var/log/nginx/access.log main;
# vagrantの場合はここをOFFにしないと更新ファイルが反映されない場合がある
# 参考:http://qiita.com/shoyan/items/12389d5beaa8695b1a53
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#-----------------------------
# Gzip圧縮の設定
#-----------------------------
# Gzip圧縮をONにする
gzip on;
gzip_http_version 1.1;
# Gzip圧縮レベル(通常は1でよい。それ以上はあまり効果無し)
gzip_comp_level 1;
# proxy 経由でのアクセス時の gzip 圧縮の設定
gzip_proxied any;
# httpヘッダーに"Vary: Accept-Encoding"がつくようになる
gzip_vary on;
# 圧縮されたレスポンスを格納するために使うバッファ数とバッファサイズ
gzip_buffers 4 8k;
# 1000バイト以上のファイルでGzip圧縮を有効にする
gzip_min_length 1000;
# 圧縮を有効にするMINEタイプ(text/htmlは常時圧縮対象となるので、指定不要)
gzip_types text/plain
text/xml
text/css
text/javascript
application/xml
application/xhtml+xml
application/rss+xml
application/atom_xml
application/javascript
application/x-javascript
application/x-httpd-php;
# IE1~6(特に6は不安定な場合があるらしい)のでgzip圧縮を無効にする
gzip_disable "MSIE [1-6]\.";
# NetscapeもGzip圧縮を無効にする
gzip_disable "Mozilla/4";
#-----------------------------
# その他の設定
#-----------------------------
# 413 Request Entity Too Largeが出る場合があるので大きめに設定しておく
#client_max_body_size 10m;
#client_body_buffer_size 256k;
# nginxのバージョン情報を隠す
server_tokens off;
# クライアントがリクエストしてきたHostヘッダの文字列をLocationのホスト名として使う
server_name_in_redirect off;
include /etc/nginx/conf.d/*.conf;
}
/etc/nginx/conf.d/laravel.conf
#-----------------------------
# フロントエンドの設定
#-----------------------------
server {
#--------------------
# 基本設定
#--------------------
listen 80;
server_name localhost;
# ドキュメントルートの設定
root /vagrant/public;
index index.html index.htm index.php;
# アクセスログの設定
access_log /var/log/nginx/laravel_access.log;
# エラーログの設定
error_log /var/log/nginx/laravel_error.log;
location / {
try_files $uri $uri/ /index.php?q=$uri&$args;
}
location ~ \.php$ {
try_files $uri = 404;
include /etc/nginx/fastcgi_params;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATHINFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
}
error_page 404 /index.php;
#--------------------
# 静的ファイル設定
#--------------------
# 画像やCSSにはキャッシュの有効期限を設定&アクセスログOFF
location ~ \.(html|css|js|jpe?g|png|gif|svg|mpg|flv|swf)$ {
expires 10d;
access_log off;
break;
}
# .gitや.htaccessにはアクセス禁止
location ~ /\.(ht|git|svn) {
deny all;
}
# faviconへのアクセスは記録しない
location = /favicon.ico {
access_log off;
log_not_found off;
}
# robots.txtへのアクセスは記録しない
location = /robots.txt {
access_log off;
log_not_found off;
}
}
nginxの起動と自動起動設定
$ sudo service nginx start
$ sudo chkconfig nginx on
php-fpmの起動と自動起動設定
$ sudo /etc/init.d/php-fpm start
$ sudo chkconfig php-fpm on
Laravelが正常に動作しているか確認する
http://localhost/
vagrantで構築してローカルマシンからアクセス出来ない時には
きっとiptablesが有効になっているでしょう
$ sudo service iptables stop