AWS EC2(AmazonLinux) nginxでCakePHP3構築

# Cakephp3構築

以下の環境を構築する手順です。

|||
|:-----------------|:------------------|
| OS            | AmazonLinux2  | 
| nginx            | 1.12.1  | 
| PHP            | 7.2  | 
| mysqld            | 5.7.23  | 

* 前提：httpが繋がる状態であること

## nginxのインストール
「amazon-linux-extras」 というAmazonのパッケージライブラリ？を使います。
好きなバージョンを入れたい場合は、yumなどでインストールを行なってください。

- amazon-linux-extras listでインストールできるバージョンを確認

インストール済みのものは色がつきます。

```
$ amazon-linux-extras list
  0  ansible2                 available  [ =2.4.2 ]
  1  emacs                    available  [ =25.3 ]
  2  memcached1.5             available  [ =1.5.1 ]
  3  nginx1.12=latest         enabled    [ =1.12.2 ]
  4  postgresql9.6            available  [ =9.6.6  =9.6.8 ]
  5  postgresql10             available  [ =10 ]
  6  python3                  available  [ =3.6.2 ]
  7  redis4.0                 available  [ =4.0.5  =4.0.10 ]
  8  R3.4                     available  [ =3.4.3 ]
  9  rust1                    available  \
        [ =1.22.1  =1.26.0  =1.26.1 ]
 10  vim                      available  [ =8.0 ]
 11  golang1.9                available  [ =1.9.2 ]
 12  ruby2.4                  available  [ =2.4.2  =2.4.4 ]
 13  nano                     available  [ =2.9.1 ]
 14  php7.2=latest            enabled    [ =7.2.0  =7.2.4  =7.2.5 ]
 15  lamp-mariadb10.2-php7.2  available  \
        [ =10.2.10_7.2.0  =10.2.10_7.2.4  =10.2.10_7.2.5 ]
 16  libreoffice              available  [ =5.0.6.2_15 ]
 17  gimp                     available  [ =2.8.22 ]
 18  docker=latest            enabled    [ =17.12.1  =18.03.1 ]
 19  mate-desktop1.x          available  [ =1.19.0  =1.20.0 ]
 20  GraphicsMagick1.3        available  [ =1.3.29 ]
 21  tomcat8.5                available  [ =8.5.31 ]
```
- nginxのインストール

```
$ sudo amazon-linux-extras install nginx1.12
```

- 接続確認

```nginx起動.
$ sudo systemctl start nginx
```
```常時ONにしておく.
$ sudo chkconfig nginx on
```
http://[EC2のIPアドレス]/
にアクセスしてnginxのページがでれば成功

## phpのインストール
- phpのインストール

同様に「amazon-linux-extras」を使います

```
$ sudo amazon-linux-extras install php7.2
```

- phpのモジュールをインストール

cakephp3を使うためのいろいろ。
こちらは「amazon-linux-extras」に無いので「yum」で。

- インストールするモジュール
    - php-fpm
    - php-devel
    - php-intl.
    - php-mbstring
    - php-xml

```まずはモジュールを検索.
$ sudo yum search php-fpm 
〜
============================= N/S matched: php-fpm ==============================
php-fpm.x86_64 : PHP FastCGI Process Manager
```
```インストール.
$ sudo yum install php-fpm.x86_64
```
各モジュール繰り返し
（＊ あとから記載したため、インストール漏れがあったらご指摘ください）

- php-fpm を起動しておく

``` 
$ sudo service php-fpm start
```

## mysqlのインストール
デフォルトだと「MariaDB」のインストールになる

```
$ sudo yum search mysql
〜
============================== N/S matched: mysql ===============================
〜
mariadb.x86_64 : A community developed branch of MySQL
```
mariadbしか出てこない・・・。

``` MySQLのリポジトリ追加.
$ yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
Loaded plugins: ovl, priorities
```
``` MySQLのインストール.
$ yum install mysql-community-server
```

☆参考（というかまんまこちらの手順を実施させていただきました）
https://skworkspace.net/archives/460

- 接続確認
 * パスワードが空ではない！！
 * 初回ログイン時にパスワード変更が必要

```mysqldサービス開始.
$ systemctl start mysqld
```
```パスワード確認.
$ sudo cat /var/log/mysqld.log | grep 'temporary password'
```
```ログイン.
$ mysql -uroot -p   # 先ほど確認したパスワードを
```

ログインできてもパスワードを変更しないと何もさせてくれない・・・
しかも、半角英小文字、半角英大文字、記号、数字がいるという・・・

```パスワード変更（例）.
set password for root@localhost=password('hogeHoge@123');
```

## cakephp3のインストール

- composerのインストール

```
$ curl -sS https://getcomposer.org/installer | php
$ mv composer.phar /usr/local/bin/composer
```

- cakephp3でプロジェクトの作成

最後の「my_app_name」は自分が作りたいプロジェクト名で。
あらかじめプロジェクトを置きたい場所にcdで移動しておきましょう。

```
$ php composer.phar create-project --prefer-dist cakephp/app my_app_name
```

＊ 作成失敗した場合は前項のphpのモジュールのインストールで足りなかったのがあったかもしれません。
モジュールインストールしなおし、プロジェクトをフォルダごと一旦削除（すでにフォルダがあると作成失敗するため）してからやりなおしてください。

## cakephp3 を nginx で
nginx は 「.htaccess」をつかわないので、nginx側にちょっと手を入れないといけないです。
（今の状態のままつないでも、スタイルシートもimgも取れずテキストだけ出てる？みたいなページになります）

cakephpの公式にも手順が書いてあります
https://book.cakephp.org/3.0/ja/installation.html#nginx

以下、は公式の手順と流れは同じですが、実際にやったことだけ簡略化

```php-fpmの確認.
sudo vi /etc/php-fpm.d/www.conf

  ; Note: This value is mandatory.
  listen = /var/run/php-fpm/www.sock  ← 確認
```

```nginxの変更.
$ sudo vi /etc/nginx/nginx.conf

- root         /usr/share/nginx/html;
+ root         /[プロジェクトのパス]/webroot;
+ index        index.php

  location / {
+    　　try_files $uri $uri/ /index.php?$args;
  }

+  location ~ \.php$ {
+    try_files $uri =404;
+    include fastcgi_params;
+    fastcgi_pass   unix:/var/run/php-fpm/www.sock;　　　　★
+    fastcgi_index index.php;
+    fastcgi_intercept_errors on;
+    fastcgi_param SCRIPT_FILENAME 
+    $document_root$fastcgi_script_name;
+  }
```
★ fastcgi_passの部分はphp-fpmで確認したsockと合わせる
fastcgi_pass unix:[確認したパス]

```
$ sudo sysmtemctl restart nginx
$ sudo sysmtemctl restart php-fpm
```

これでcakephp3の画面が見れる・・・はず？