さくらのレンタルサーバに Symfony2 を入れようとして嵌った件

最近ではVPSなどの方が便利ですが、さくらのレンタルサーバー（スタンダード）で Symfony2 をやむなく動かす機会がありましたので、手順をまとめてみます。
パッケージインストールが使えず、モジュール単位でソースインストールするという無理難題でした。

phpinfoで確認できる以下のインストールオプションに無い機能は、pecl または phpizeコマンドで入れることができるもののみ追加可能です。

```bash
$ php -i 
Configure Command =>  './configure'  '--prefix=/usr/local/php/5.4' '--with-openssl=/usr' '--with-zlib=/usr' '--with-curl' '--enable-exif' '--with-pcre-dir=/usr/local' '--with-gd' '--with-jpeg-dir=/usr/local' '--with-png-dir=/usr/local' '--enable-gd-native-ttf' '--with-freetype-dir=/usr/local' '--with-gettext=/usr/local' '--with-gmp=/usr/local' '--with-iconv-dir=/usr/local' '--enable-mbstring' '--with-mcrypt' '--with-mysql' '--with-mysqli' '--with-pdo-mysql' '--enable-soap' '--with-xsl=/usr/local' '--enable-zip'

```

**BCMath など configure のときに指定しないといけないものはこの時点でアウトとなります。(たぶん)**
http://php.net/manual/ja/bc.installation.php
**また、APCやOPcacheはPHPがCGI版なためphpizeでいれても機能しません(たぶん)**

### 諸元
| 項目 | 値 |
|:-----------|------------:|
| OS | FreeBSD 9.1-RELEASE-p15 amd64 |
| プラン | さくらのレンタルサーバ スタンダード |
| PHP | 5.4.35 (cgi-fcgi) (built: Nov 21 2014 16:59:22) |
| apache | Apache/2.2.25 |
| mysql	| 5.5 |
| ユーザ名| example |
| ホームディレクトリ| /home/example |
| プロジェクトインストール先| /home/example/project |
| git,composerインストール先|/home/example/bin|
| その他インストール先| /home/example/local |
| ドキュメントルート | /home/example/www/|
| URL| http://＜example＞.sakura.ne.jp |

※example は適宜読み替えてください。
※intl（icu含む）はSonataAdminBundleで必要だったのでインストールしています。
Symfony2単体としてはrecommendなので必須ではありません。
※apcは未使用。

管理画面から選べる PHP のバージョンは 2014/12/20 現在は以下のとおりでした。

* 5.4.35
* 5.3.29
* 5.2.17
* 4.4.9

今回は最新の 5.4 で試していますが、5.3 でも動くと思います。
http://symfony.com/doc/current/reference/requirements.html

## 1. ディレクトリの作成

```bash
$ cd ~/
$ mkdir bin
$ mkdir local
$ mkdir local/src
```

## 2. icuライブラリのインストール

```bash
$ cd ~/local/src
$ wget http://download.icu-project.org/files/icu4c/54.1/icu4c-54_1-src.tgz
$ tar zxvf icu4c-54_1-src.tgz
$ cd icu/source
$ ./configure --prefix=$HOME/local
$ gmake
$ gmake install
```

## 3. intlのインストール

```bash
$ cd ~/local/src
$ wget http://pecl.php.net/get/intl-3.0.0.tgz
$ tar zxvf intl-3.0.0.tgz
$ cd intl-3.0.0
$ phpize
$ ./configure --with-icu-dir=$HOME/local
$ make

$ cd ~/local
$ mkdir php
$ mkdir php/extension
$ cd php/extension
$ cp ~/local/src/intl-3.0.0/modules/intl.so . 
```

※今回make後に手動でコピーしていますが、本来は以下のように make install でインストールした後、シンボリックリンクを作るなどした方がよいかもしれません。

```bash
$ ./configure --prefix=$HOME/local --with-icu-dir=$HOME/local
$ make
$ make install
```

さくらインターネットのコントロールパネルからphp.iniの設定
[アプリケーションの設定] -> [PHP設定の編集]

```
date.timezone = Asia/Tokyo
extension_dir = /home/example/local/php/extension
extension=intl.so
short_open_tag=off
```

## 4 Git のインストール

最近のサーバーはもともと入っているようです。
ただ、1.9.3とバージョンが古いため、新しいものに差し替えた方がよいようです。
ここでは、最新版をいれました。
https://github.com/git/git/tree/v2.2.1

```bash
$ which git
/usr/local/bin/git
$ git --version
git version 1.9.3
$ cd ~/local/src
$ wget --no-check-certificate https://github.com/git/git/archive/v2.2.1.zip
$ unzip v2.2.1.zip
$ cd git-2.2.1/
$ gmake all
$ gmake install
```
~/.cshrcにパスを追加

```bash
$ vi ~/.cshrc

set path = ($HOME/bin $HOME/local/bin /sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin)

$ source ~/.cshrc
```
バージョンを確認。

```bash
$ which git
/home/example/bin/git
$ git --version
git version 2.2.1
```

## 5. composerの取得

ここから Symfony のインストール手順を踏んでいきます。
http://docs.symfony.gr.jp/symfony2/book/installation.html

```bash
$ curl -s https://getcomposer.org/installer | php
$ mv composer.phar ~/bin/composer
```


## 6. プロジェクトファイル(symfony2)のインストール

```bash
$ cd ~
$ composer create-project symfony/framework-standard-edition project/
```

あとは、FWの作法に沿って作業。

## 7. フロントコントローラ、assetsの配置

フロントコントローラをシンボリックリンクでドキュメントルートに置いてもエラーとなったのでコピーで対応。


```bash
$ cd ~/project
$ cp web/app.php ../www/app.php
$ cp web/app_dev.php ../www/app_dev.php
$ cp web/.htaccess ../www/
```
フロントコントローラ編集

```bash
$ vi ~/www/app.php
$ vi ~/www/app_dev.php
```
bootstrapファイルとAppKernelファイルのディレクトリを変更する。

```php

$loader = require_once __DIR__.'/../app/bootstrap.php.cache';
  :
require_once __DIR__.'/../app/AppCache.php';
↓

$loader = require_once __DIR__.'/../project/app/bootstrap.php.cache';
  :
require_once __DIR__.'/../project/app/AppKernel.php';
```

その後、ブラウザ確認のために、config.phpをコピーして編集。
上記と同様にrequire_onceのpathを修正します。

```bash
$ cp web/config.php ../www/
$ vi ../www/config.php
```

assetsはシンボリックリンクで対応しました。

```bash
$ cd ~
$ ln -s /home/example/project/web/bundles/ www/
```

ブラウザで確認
http://＜example＞.sakura.ne.jp/config.php

確認できたらconfig.phpは削除で。



CGI版だったり、モジュールまわりが難儀ですね。。。