EC2にlaravel(php-fpm)をinstallするメモ

## 前提
EC2で
- publicサブネット：webサーバー(nginx)
- privateサブネット：appサーバー(php-fpm)

の2台構成での想定。

installする際にインターネット接続が必要なため、
privateサブネッtのEC2はnatゲートウェイを介してインターネット接続可能な状態にしている。

## 目標
- publicサブネットにあるwebサーバー(nginx)にhttpリクエストで
  privateサブネットにあるappサーバー(php-fpm)が動くところを確認する。
  - phpinfoの表示
- php-fpmが動くことを確認できたら、laravelを動かす
![スクリーンショット 2022-11-11 10.11.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346005/5b8e6dba-b985-a107-a43d-f67688075b98.png)


## nginxのインストール
こっちで行っている

https://qiita.com/Masataka_Sugia/items/401dc52bd0e37d636df0

## php・php-fpmのインストール
### yumのパッケージ更新
```
$ sudo yum update
```

### amazon-linux-extras リポジトリがインストールされているか確認する
```
$which amazon-linux-extras
/usr/bin/amazon-linux-extras
```
なかったら
```
$sudo yum install -y amazon-linux-extras
```

### installできるphpを確認
```
$ amazon-linux-extras | grep php
 42  php7.4                   available    [ =stable ]
 51  php8.0                   available    [ =stable ]
```
最新のphp8.0をinstallすることにします

### php8.0をインストールすると関連してインストールされるパッケージの確認
```
$ amazon-linux-extras info php8.0
php8.0 recommends php-cli                    # yum install php-cli
php8.0 recommends php-pdo                    # yum install php-pdo
php8.0 recommends php-fpm                    # yum install php-fpm
php8.0 recommends php-mysqlnd                # yum install php-mysqlnd
```

### phpインストール
```
$ sudo amazon-linux-extras install php8.0 -y

//確認
$ php -v
PHP 8.0.20 (cli) (built: Jun 23 2022 20:34:07) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.20, Copyright (c) Zend Technologies

$ php-fpm -v
PHP 8.0.20 (fpm-fcgi) (built: Jun 23 2022 20:36:04)
Copyright (c) The PHP Group
Zend Engine v4.0.20, Copyright (c) Zend Technologies
```

```
//php-fpm自動起動
$ sudo systemctl enable php-fpm

//php-fpm起動・停止・再起動
$ sudo systemctl start php-fpm
$ sudo systemctl stop php-fpm
$ sudo systemctl restart php-fpm
```

### php拡張パッケージの確認
```
$ sudo yum list php*
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
インストール済みパッケージ
php-cli.x86_64                                                     8.0.20-1.amzn2                                           @amzn2extra-php8.0
php-common.x86_64                                                  8.0.20-1.amzn2                                           @amzn2extra-php8.0
php-fpm.x86_64                                                     8.0.20-1.amzn2                                           @amzn2extra-php8.0
php-mysqlnd.x86_64                                                 8.0.20-1.amzn2                                           @amzn2extra-php8.0
php-pdo.x86_64                                                     8.0.20-1.amzn2                                           @amzn2extra-php8.0
利用可能なパッケージ
php.x86_64                                                         8.0.20-1.amzn2                                           amzn2extra-php8.0
php-bcmath.x86_64                                                  8.0.20-1.amzn2                                           amzn2extra-php8.0
php-dba.x86_64                                                     8.0.20-1.amzn2                                           amzn2extra-php8.0
php-dbg.x86_64                                                     8.0.20-1.amzn2                                           amzn2extra-php8.0
php-devel.x86_64                                                   8.0.20-1.amzn2                                           amzn2extra-php8.0
php-embedded.x86_64                                                8.0.20-1.amzn2                                           amzn2extra-php8.0
php-enchant.x86_64                                                 8.0.20-1.amzn2                                           amzn2extra-php8.0
php-gd.x86_64                                                      8.0.20-1.amzn2                                           amzn2extra-php8.0
php-gmp.x86_64                                                     8.0.20-1.amzn2                                           amzn2extra-php8.0
php-intl.x86_64                                                    8.0.20-1.amzn2                                           amzn2extra-php8.0
php-ldap.x86_64                                                    8.0.20-1.amzn2                                           amzn2extra-php8.0
php-mbstring.x86_64                                                8.0.20-1.amzn2                                           amzn2extra-php8.0
php-mysql.x86_64                                                   5.4.16-43.amzn2                                          amzn2-core
php-odbc.x86_64                                                    8.0.20-1.amzn2                                           amzn2extra-php8.0
php-opcache.x86_64                                                 8.0.20-1.amzn2                                           amzn2extra-php8.0
php-pear.noarch                                                    1:1.10.12-9.amzn2                                        amzn2-core
php-pecl-imagick.x86_64                                            3.5.1-1.amzn2.0.1                                        amzn2extra-php8.0
php-pecl-imagick-devel.noarch                                      3.5.1-1.amzn2.0.1                                        amzn2extra-php8.0
php-pecl-memcache.x86_64                                           3.0.8-4.amzn2                                            amzn2-core
php-pgsql.x86_64                                                   8.0.20-1.amzn2                                           amzn2extra-php8.0
php-process.x86_64                                                 8.0.20-1.amzn2                                           amzn2extra-php8.0
php-pspell.x86_64                                                  8.0.20-1.amzn2                                           amzn2extra-php8.0
php-recode.x86_64                                                  5.4.16-46.amzn2.0.2                                      amzn2-core
php-snmp.x86_64                                                    8.0.20-1.amzn2                                           amzn2extra-php8.0
php-soap.x86_64                                                    8.0.20-1.amzn2                                           amzn2extra-php8.0
php-sodium.x86_64                                                  8.0.20-1.amzn2                                           amzn2extra-php8.0
php-xml.x86_64                                                     8.0.20-1.amzn2                                           amzn2extra-php8.0
php-xmlrpc.x86_64                                                  5.4.16-46.amzn2.0.2                                      amzn2-core
```

## 各種設定
![スクリーンショット 2022-11-11 10.15.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346005/86d9cfb3-9e31-1c3b-3b25-26a6f3526b31.png)

この構成を満たせるように設定をする。

### AWSの設定
#### Webサーバー(publicサブネット)
![スクリーンショット 2022-11-11 10.50.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346005/a09f6612-1fc9-6a97-7c26-29d2714447e5.png)

#### appサーバー(privateサブネット)
![スクリーンショット 2022-11-11 10.51.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346005/7087d03c-8f37-3a26-8825-c39f53fd92f7.png)


### nginxの設定
```etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include /etc/nginx/mime.types;
    charset UTF-8;
    default_type application/octet-stream;

    include /etc/nginx/conf.d/*.conf;

    server {
        listen 80;
        root /var/source;
        index index.php;
        server_name 10.0.10.164;

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

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass   10.0.10.164:9000;
                fastcgi_index  index.php;

                include        fastcgi_params;
                fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param  PATH_INFO $fastcgi_path_info;
        }
    }
}

```

### php-fpmの設定
```/etc/php-fpm.d/www.conf
user = nginx
group = nginx
listen = 0.0.0.0:9000
listen.allowed_clients = 10.0.0.196
```
#### 所有者を変更する
```
$ chown -R nginx:nginx /var/source
```

#### 権限を変更する
```
$ chmod 644 /var/source/index.php
```

```
$ ll /var/source/
-rw-r--r-- 1 nginx nginx 20 11月 10 09:16 index.php
```

## 確認
![スクリーンショット 2022-11-11 10.55.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346005/9942bd2d-fcf3-f5d7-89ff-c9b5ff69f3b0.png)

とりあえずphpが動いていることを確認できた。

## Laravelを動かしてみる

### composerインストール
https://getcomposer.org/download/

```
$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" 
$ php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup. php'); } echo PHP_EOL;"
$ php composer-setup.php
$ php -r "unlink('composer-setup.php');"
$ sudo mv composer.phar /usr/local/bin/composer
//確認
$ composer -v
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 2.4.4 2022-10-27 14:39:29
```

### Laravelインストール
```
$ composer create-project laravel/laravel example-app
```