Nginxでconcrete5を

# ゴール
* concrete5が無事動く
* 次回のインストール時に自分がコケない

# 環境
| | Version |
|----------|---------|
|Host| Azure|
|OS | 14.04.1 |
|Nginx| 1.4.6 |
|PHP| 5.5.9 |
|MariaDB|5.5|

mariaDBを使うのは単なる趣味です。MySQLでも問題ありません。

**必要なシステム要件は以下を参照ください。**
[**System Requirements**](http://documentation.concrete5.org/developers/installation/system-requirements)
*apacheを使うことが意外と多いみたいです…*

# インストール

```bash:コマンド
sudo apt-get nginx php5 php5-fpm mariadb-server php5-mysql unzip php5-gd php5-curl
```
php5-curlは、コミュニテイーに接続する場合に必要

## SQLにテーブル作成
* phpmyadminを使用する方法は割愛します。(結局、この3行のためだけに入れるのは…)

**今回はconcrete5というテーブルとconcrete5 というユーザーで作成**

```bash:コマンド
create database concrete5 character set utf8;
create user 'concrete5'@'localhost' identified by 'パスワードは決めてね';
grant all privileges on concrete5 .* to 'concrete5'@'localhost';
```

##ダウンロード
ダウンロードは[公式サイト](http://concrete5-japan.org/)からダウンロードしてください。

wgetでダウンロードする場合、リンクのアドレスコピーを使ってそのURLからダウンロードするとindex.htmlとなり保存されます。**zipへリネームしてください。**

*ローカルPCにダウンロードして解凍してアップロードは個人的にお薦めできません。*
*理由としては大量のファイルがあり、転送に失敗する可能性が高いです。*
*せめてサーバ側で解凍しましょう。*

ダウンロード後concrete5フォルダ内部の以下の3つのパーミッション変更

```bash:コマンド
chmod 777 packages
chmod 777 application/config
chmod 777 application/files
```

### nginxの設定
Point:
ハイスペックならそこまでシュールではないと思いますが、upstream timed outがerror.logにでるようならば、“fastcgi_read_timeout”を長めに設定します。(データベース作成に時間がかかる)
インストール完了後にコメントアウトしてあげれば問題ないと思います。
もしかすると初回時に“空のウェブサイト”を選択すれば以下の設定は不要かもしれません。

```conf:/etc/nginx/sites-available/concrete5(インストール時)
～略～
fastcgi_read_timeout 1000;
fastcgi_send_timeout 1000;
～略～
```
YOUR_DOMAINは稼働させるバーチャルホスト名に書き換えてください。

```conf:/etc/nginx/sites-available/concrete5(運用時)
server {
        listen 80 default_server;

        root /var/www/concrete5/;
        index index.php index.html index.htm;

        server_name YOUR_DOMAIN;

        location / {

                try_files $uri $uri/ /index.php?$args;

                if (-f $request_filename) {
                        expires 14d;
                        break;
                }

                if ($uri ~ "^(.+?\.php?)(/.*)$") {
                        set $path_info $2;
                }


                if (!-e $request_filename) {
                        rewrite / /index.php last;
                }
        }


        location ~ \.php$ {
                include fastcgi_params;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_index index.php;
                fastcgi_intercept_errors on;
                fastcgi_ignore_client_abort off;
                fastcgi_connect_timeout 60;
                fastcgi_send_timeout 180;
                fastcgi_read_timeout 180;
                fastcgi_buffer_size 128k;
                fastcgi_buffers 4 256k;
                fastcgi_busy_buffers_size 256k;
                fastcgi_temp_file_write_size 256k;
                #コミュニティーに接続する場合必要
                fastcgi_param PHP_VALUE "allow_url_fopen=On";

        }

}

```

# 最後に
* ツッコミがあればご指摘ください。
* Wordpress関係のFTPアップデートで失敗する場合も“fastcgi_read_timeout”あたりが有効です。
* Nginx + php5-fpmあたりは設定をしっかりしないと意図した動作にならない。(このへんapacheは吸収してくれているのかな)
* 動いてしまえばあとはサクサク軽いものです。

#参考
[context-concrete5](https://github.com/concrete5japan/context-concrete5/blob/master/contexts/krm/nginx.conf)