Amazon Linux上にCakePHP3をインストール（Postgresql、PHP7）

1. EC2をインストール
2. セキュリティグループの設定からインバウンドのタブを選び「編集」を押し、HTTPからのアクセスを許可。
3. ec2-userでログイン
4. システムロケールを変更

    ```
    $ sudo bash
    # vi /etc/sysconfig/i18n
    - LANG=en_US.UTF-8
    + LANG=ja_JP.UTF-8
    ```

5. システムロケールの有効化

    ```
    # . /etc/sysconfig/i18n
    ```

6. タイムゾーンを日本に変更

    ```
    # cp /etc/localtime /etc/localtime.orig
    # ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
    # vi /etc/sysconfig/clock
    - ZONE="Asia/Tokyo"
    - UTC=true
    + ZONE="Asia/Tokyo"
    + UTC=false
    ```

5. 不要なhttpd/phpをアンインストール

    ```
    # yum erase php php-cli php-common
    # yum erase httpd httpd-tools
    ```

6. PHP7とpostgresqlをインストール（ついでにmlocateも）

    ```
    # yum -y install php70 php70-intl php70-mbstring php70-pgsql php70-pdo
    # yum -y install postgresql95 postgresql95-server postgresql95-devel
    # yum -y install mlocate git
    ```

7. composerのインストール

    こちらのURLのCommand-line installationの部分を実行してください：
    https://getcomposer.org/download/
    以下はサンプルです：

    ```
    # php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
    # php -r "if (hash_file('SHA384', 'composer-setup.php') ===     'aa96f26c2b67226a324c27919f1eb05f21c248b987e6195cad9690d5c1ff713d53020a02ac8c217dbf90a7eacc9d141d') { echo 'Installer verified'; } else { echo 'Installer     corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
    # php composer-setup.php
    # php -r "unlink('composer-setup.php');"
    ```

1. composer.pharを移動させます

    ```
    # mv composer.phar /usr/local/bin/composer
    ```

8. ec2-userのPATHに/usr/local/binを追加

    ```
    # exit 
    $ cd
    $ vi /home/ec2-user/.bash_profile
    - PATH=$PATH:$HOME/.local/bin:$HOME/bin
    + PATH=$PATH:$HOME/.local/bin:$HOME/bin:/usr/local/bin
    ```

9. cakephp3のインストールディレクトリを書き込み可能に

    ```
    $ sudo bash
    # cd /var/www
    # chmod 777 html
    # exit
    ```

10. cakephp3をインストール

    ```
    $ source /home/ec2-user/.bash_profile
    $ cd /var/www/html
    $ composer self-update && composer create-project --prefer-dist cakephp/app ./app
    ```

    *特定のバージョン、例えば3.1系の最新をインストールしたい場合は、

    ```
    $ composer self-update && composer create-project --prefer-dist cakephp/app:3.1.* ./app
    ```

    とする

    途中でSet Folder Permissionsについて聞かれたらYesと回答：

    ```
    Set Folder Permissions ? (Default to Y) [Y,n]? Y
    ```

11. データベースの設定を変更（default）

    変更箇所はapp.phpの223～234行

    ```
    $ vi /var/www/html/app/config/app.php
    -             'driver' => 'Cake\Database\Driver\Mysql',
    +             'driver' => 'Cake\Database\Driver\Postgres',
    -             'username' => 'my_app',
    +             'username' => 'postgres',
    -             'password' => 'secret',
    +             'password' => '',
    -             'database' => 'my_app',
    +             'database' => 'cakephp_dev',
    ```

12. タイムゾーンを変更

    ```/var/www/html/app/config/bootstrap.php
    - date_default_timezone_set('UTC');
    + date_default_timezone_set('Asia/Tokyo');
    ```

12. データベースの設定を変更（test）

    手順11と同じだが、変更箇所はapp.phpの268～274行。
    また'database' => 'cakephp_test'とする

13. URLのリライトを可能にする

    変更箇所は/etc/httpd/conf/httpd.confの151行目

    ```
    $ sudo bash
    # vi /etc/httpd/conf/httpd.conf
    
    - AllowOverride None
    + AllowOverride All
    ```

14. DocumentRootを変更する

    ```
    $ sudo bash
    # vi /etc/httpd/conf/httpd.conf
    
    - DocumentRoot "/var/www/html"
    + DocumentRoot "/var/www/html/app"
    ```

15. データベースの初期化

    ```
    # su - postgres
    $ /usr/lib64/pgsql95/bin/initdb -D /var/lib/pgsql95/data/
    $ exit
    ```

16. postgresqlとhttpdの起動

    ```
    # service httpd start
    # service postgresql95 start
    ```

17. データベースの作成

    ```
    # /usr/bin/createdb -U postgres -p 5432 -h localhost cakephp_dev
    ```

18. 動作確認

    ブラウザを開き、ec2のパブリックIPを指定する