AWSのEC2で行うCentOS 7（nginx・php7.2-fpm）環境構築

CentOS 7の初期設定まで[記事](https://qiita.com/nino0813g/items/ac951b988d03cf520966)はこちらになります。

それでは[前回](https://qiita.com/nino0813g/items/ac951b988d03cf520966)までに作成したCentOS 7でnginx・php-fpmの環境構築をしていきます。

## 開発環境
- Mac OS X（El Capitan） 10.11.6
- CentOS 7 (x86_64) - with Updates HVM
 - nginx version: nginx/1.13.8
 - PHP 7.2.1 (cli)
 - php-fpm-7.2.1-1.el7.remi.x86_64

### 事前に用意しておく必要があるもの
- 接続先EC2のパブリックDNS
- 作業ユーザ（CentOS 7の場合デフォルトはcentos）
- EC2からダウンロードした秘密鍵（デフォルトは****.pem）

### 参考
- [CentOS7 に nginx導入 - Qiita](https://qiita.com/MuuKojima/items/afc0ad8309ba9c5ed5ee)
- [CentOS7 に PHP7 をインストールする方法 │ Web備忘録](https://webbibouroku.com/Blog/Article/centos-php7)
- [EC2にnginx+php(php-fpm socket)環境を最速で構築 - Qiita](https://qiita.com/koni/items/05158e33b4c8aac07b59)
- [CentOS7(x86_64)+nginx+PHP7+php-fpm+MySQL5.7環境構築手順 - Qiita](https://qiita.com/kenichiro-yamato/items/456a1f351abce578f945)


## AWSのEC2にSSH接続
### SSH接続
以下のコマンドを実行してAWSのEC2にSSH接続します。

```
$ ssh -i ~/.ssh/秘密鍵名.pem ユーザ名@パブリックDNS
```

### ログイン完了
以下が表示がされたらログイン完了です。

```
[centos@ip-パブリックDNS ~]$
```

## nginxをインストール
### リポジトリ追加
以下のコマンドを実行して設定を追記したnginx.repoのファイルを作成します。

```
# nginxリポジトリ追加
$ sudo vi /etc/yum.repos.d/nginx.repo
```
```/etc/yum.repos.d/nginx.repo
+ [nginx]
+ name=nginx repo
+ baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
+ gpgcheck=0
+ enabled=1
```

### nginxをインストール
以下のコマンドを実行してnginxをインストールします。

```
# nginxをインストール
$ sudo yum install nginx -y

# インストール確認
$ nginx -v
```

### nginxの起動設定
以下のコマンドを実行してnginxを起動します。

```
# 起動
$ sudo systemctl start nginx

# 自動起動設定確認
$ systemctl list-unit-files --type=service | grep nginx

# 自動起動有効化設定
$ sudo systemctl enable nginx

# ステータス確認
$ sudo systemctl status nginx

# ブラウザ確認
$ パブリックDNS
```

## php-fpmをインストール
### リポジトリ追加
以下のコマンドを実行して設定を追記したEPELとRemiのリポジトリを追加します。

```
# EPELリポジトリ追加
$ sudo yum install epel-release -y

# Remiリポジトリ追加
$ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
```

### php-fpmをインストール
以下のコマンドを実行してリポジトリを有効化しphp-fpmをインストールします。

```
# phpをインストール
$ sudo yum install --enablerepo=remi,remi-php72 php php-fpm -y

# インストール確認
$ php -v

# パッケージバージョン確認
$ rpm -qa | grep php

php-common-7.2.1-1.el7.remi.x86_64
php-cli-7.2.1-1.el7.remi.x86_64
php-7.2.1-1.el7.remi.x86_64
php-json-7.2.1-1.el7.remi.x86_64
php-fpm-7.2.1-1.el7.remi.x86_64
```

### php-fpmの起動設定
以下のコマンドを実行してphp-fpmを起動します。

```
# 起動
$ sudo systemctl start php-fpm

# 自動起動有効化設定
$ sudo systemctl enable php-fpm

# 起動
$ sudo systemctl start php-fpm

# ステータス確認
$ sudo systemctl status php-fpm
```

## php-fpmとnginxの接続設定
### www\.confの編集
以下のコマンドを実行して、www.confファイル内の【user】と【group】を【apache】から【nginx】に変更します。

```
# www.confファイルがあるディレクトリへ移動
$ cd /etc/php-fpm.d/

# オリジナルファイルのバックアップを作成
$ sudo cp www.conf www.conf.org

# www.confの編集
$ sudo vi www.conf
```
```/etc/php-fpm.d/www.conf
# php-fpmでのnginx実行ユーザー指定 
 - user = apache
 + user = nginx
 - group = apache
 + group = nginx
```

### default.confの編集
以下のコマンドを実行して、default.confファイル内の【server】ブロック内を変更します。

```
# default.confファイルがあるディレクトリへ移動
$ cd /etc/nginx/conf.d/

# オリジナルファイルのバックアップを作成
$ sudo cp default.conf default.conf.org

# default.confの編集
$ sudo vi default.conf
```
```/etc/nginx/conf.d/default.conf
# ドキュメントルート・インデックスファイル指定
　#access_log  /var/log/nginx/host.access.log  main;

　+ root /usr/share/nginx/html;
　+ index index.html index.htm index.php;

# try_filesディレクティブ設定
　- location / {
　-     root   /usr/share/nginx/html;
　-     index  index.html index.htm;
　- }

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

# nginxでのphpスクリプト実行設定
　- #location ~ \.php$ {
　- #    root           html;
　- #    fastcgi_pass   127.0.0.1:9000;
　- #    fastcgi_index  index.php;
　- #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
　- #    include        fastcgi_params;
　- #}

　+ location ~ \.php$ {
　+      fastcgi_pass  127.0.0.1:9000;
　+      fastcgi_index index.php;
　+      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
　+      include       fastcgi_params;
　+ }
```

## php-fpmとnginxの接続確認
### ドキュメントルートにphpinfo.phpのテストファイルを追加
以下のコマンドを実行して、ドキュメントルートでphpが実行できるか確認します。

```
# スーパーユーザーに切り替え
$ sudo su

# テスト用phpファイルの作成
$ echo '<?php phpinfo();' > /usr/share/nginx/html/phpinfo.php
```

### nginxとphp-fpmの再起動
以下のコマンドを実行して、nginxとphp-fpmを再起動し設定を反映させます。

```
# nginxの再起動
$ sudo systemctl restart nginx

# php-fpmの再起動
$ sudo systemctl restart php-fpm

# ブラウザ確認
パブリックDNS/phpinfo.php
```

## UNIXドメインソケット設定
### php-fpmのUNIXドメインソケット動作確認
以下のコマンドを実行して、php-fpmでUNIXドメインソケットを使用しているか確認できます。

```
# php-fpmのUNIXドメインソケット動作確認
$ netstat -al --protocol=unix |egrep "Proto|fpm"

Proto RefCnt Flags       Type       State         I-Node   Path
```

### www\.confの編集
以下のコマンドを実行して、www.confファイル内の【listen】と【listen.owner】と【listen.group】を変更します。

```
# www.confの編集
$ sudo vi /etc/php-fpm.d/www.conf
```
```/etc/php-fpm.d/www.conf
# listenの内容を変更
- listen = 127.0.0.1:9000

- ;listen.owner = nobody
- ;listen.group = nobody

+ listen = /var/run/php-fpm/php-fpm.sock

+ listen.owner = nginx
+ listen.group = nginx
```

### default.confの編集
以下のコマンドを実行して、default.confファイル内の【fastcgi_pass】を変更します。

```
# default.confの編集
$ sudo vi /etc/nginx/conf.d/default.conf
```
```/etc/nginx/conf.d/default.conf
# fastcgi_passの変更
- fastcgi_pass  127.0.0.1:9000;
+ fastcgi_pass  unix:/var/run/php-fpm/php-fpm.sock;
```

### nginxとphp-fpmの再起動
以下のコマンドを実行して、nginxとphpfpmを再起動し設定を反映させます。

```
# nginxの再起動
$ sudo systemctl restart nginx

# php-fpmの再起動
$ sudo systemctl restart php-fpm

# php-fpmのUNIXドメインソケット動作確認
$ netstat -al --protocol=unix |egrep "Proto|fpm"

Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     33580    /var/run/php-fpm/phpfpm.sock
```

## ブラウザ確認

```
パブリックDNS/phpinfo.php
```

[ブログ記事](http://ninolog.com/set-centos7-nginx-phpfpm-aws-ec2/)の転載になります。