CentOS-6.3 + nginx + php + php-fpm + MySQL-5.5 + Symfony-2.1

---------
#概要
Symfony(php-framework)を使う機会があって、環境構築した際のメモ。
WEBサーバに**nginx**を採用しているのはWEB上でPHPとの連携が早いと話題になっていたので興味本位で採用ｗ♫


#CentOS6.3

### 初期設定
・iptables停止
・ipv6停止
・selinux停止
・yum update
また、それ以外に不要なサービスも適宜停止した方がいい。
#####iptables + ipv6停止

```Bash
/etc/init.d/iptables stop
/etc/init.d/ip6tables stop

chkconfig iptables off
chkconfig ip6tables off

cd /etc/modprobe.d/
vi disable_ipv6.conf

  =(新規作成)=> 
alias net-pf-10 off
options ipv6 disable=1



vi /etc/sysconfig/selinux

  =(変更)=> 
SELINUX=disabled

yum update
```


----------------------------
# nginx

CentOS公式リポジトリでは nginx の最新版が入手できない為、ソースからコンパイルする人もいるようだが
remi という非公式リポジトリでは nginx の最新版が入手できるのでそちらでいきます。
yum でインストールすることでソフトの管理(インストール・アンインストール・依存パッケージのインストール等)が
容易になるので余程の理由がない限りはyumで問題無いと思います。
そもそもyumで入れてもnginxは爆速(abでの検証では爆速ｗ）Apacheのような**繊細な**チューニングは不要な気がする。。。



### nginx用 リポジトリ追加
```Bash
rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
```

### nginx インストール
```Bash
yum install nginx
```

### nginx設定（/etc/nginx/nginx.conf）
以下、変更点のみ記載。

```Bash
# CPUのコア数まで並列処理が可能（※コア数に揃えればイイはず）
worker_processes 2;
```

Symfony2利用時の設定例
(※動作可能な最低限の設定であり、セキュリティ等は考慮してないです)

```nginx
#================================================
# Setting for Symfony2 Application
#================================================
server {
  listen    *:80;
  server_name localhost;
  root    /home/Symfony/web;
  index   app_dev.php;

  ## Static Resources
  location ~* \.(css|js|jpeg|jpg|gif|png|ico)$ {
    expires 30d;
    break;
  }

  ## matches any query, since all queries begin with /
  location / {
    if (!-e $request_filename) {
      rewrite ^/(.*)$ /app_dev.php?q=$1 last;
    }
  }

  ## pass php scripts to fastcgi
  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index app_dev.php;
    include   /etc/nginx/fastcgi_params;
    fastcgi_param SCRIPT_FILENAME /home/Symfony/web$fastcgi_script_name;
  }

  ## disable viewing .htaccess & .htpaswd
  location ~ /\.ht {
    deny all;
  }
}
```

### 起動＋自動起動設定

```Bash
/etc/init.d/nginx start

chkconfig nginx on
```

----------------------------
# php + php-fpm + MySQL + php-modules

<br />
### remi リポジトリ追加
```Bash
rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
cd /usr/local/src
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
wget http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

rpm -ivh remi-release-6.rpm epel-release-6-8.noarch.rpm
```
<br />
### PHP関連もろもろインストール
```Bash
yum --enablerepo=remi install ¥
    mysql mysql-server ¥
    php php-fpm ¥
    php-devel php-cli php-xml php-mysql php-mbstring php-gd
```
※↑この他にもいろいろとPHP関連モジュールはあるようなので適宜インストール
その際にはremiリポジトリを参照するようにすると最新Ver.のモジュールがインストールしやすいらしい。

<br />
### httpd httpd-tools 不要なので削除
```Bash
yum remove httpd
yum remove httpd-tools
```
<br />

### php-fpm設定（/etc/php-fpm.d/www.conf）
php-fpm(FastCGI)はデフォで9000番ポートでLISTEN。
nginx => php-fpm 通信にはTCP・socketアリ。（※今回はTCP利用）

[処理の流れ]
client => nginx(port:80) => php-fpm(port:9000) => response
以下、変更点のみ記載しています。

```Bash
# /etc/php-fpm.d/www.conf
user = nginx
group = nginx
```

### 起動
```Bash
/etc/init.d/php-fpm start
/etc/init.d/mysqld start
```

### 自動起動
```Bash
chkconfig php-fpm on
chkconfig mysqld on
```

### ポートステータス
※不要情報は除外しています。

```Bash
[root@centos6 ~]＃netstat -tapon
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name    Timer
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      1650/php-fpm        off (0.00/0/0)
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      1484/mysqld         off (0.00/0/0)
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      1663/nginx          off (0.00/0/0)
```

<br />
# Symfony2
-------

### インストール
インストールといっても簡単です。
ソースをダウンロードしてきて解凍するだけｗ。

<br />
####[注意点]
2012/11/29現在、Symfony2の公式サイトのチュートリアルはSymfony2.0ベースとなっており、Symfony2.1(最新版)ではチュートリアルの内容とズレることが随所にあるので、暫くはSymfony2.0系で進める方が無難。(※WEB上のネタも概ね2.0系のネタばかりなのでコケた時に解決するのも苦労するので・・・）
**2012/11/29現在、Symfony2.0系は公式サイトからダウンロード可能**

<br />
nginxの設定次第ですが、以下のようなURLにブラウザでアクセスすればSymfonyのwelcomeページが表示されるはず。

http://[Server-IP]/
<br />

```Bash
cd /usr/local/src

wget http://symfony.com/download?v=Symfony_Standard_Vendors_2.0.18.tgz

tar zxvf Symfony_Standard_Vendors_2.0.18.tgz -C /home
```

Symfonyについてはドキュメントが充実しているので公式サイトを確認したほうがいいです。
ドキュメントは日本語訳もありチュートリアルもありとっかかりやすい印象。

[Symfony2 日本語ドキュメント](http://docs.symfony.gr.jp/symfony2/)