VagrantでCentOS7にnginx, php7を入れてindex.phpを表示させるまで

# 本編の内容
[以前の記事](https://qiita.com/pipiox/items/92b662c806e6c905335f)でVagrantを使ってMacにCentOS7をインストールしました。
今回はそこにnginxとphp7.1を入れて、index.phpを表示させることをゴールにします。
# Vagrantの仮想環境にアクセスする
Home/MyVagrant/CentOS7の中にVagrantFileがあります。

```:ターミナル
$ cd /MyVagrant/CentOS7
$ vagrant up
$ vagrant ssh
```

何かと後が面倒なのでルート権限にしておきます。まあしなくても良いけど。
ちなみにパスワードは'vagrant'です。

```:vagrant
[vagrant@localhost ~]$ su
パスワード:
[root@localhost vagrant]# 
```
# PHP7.1をインストール
コマンドだけ書いても面白くないので、順を追ってみましょう。
まずデフォルトの状態で、どのPHPバージョンがインストールされるかをチェックします。
--assumenoオプションをつけると実際にどれがインストールされるかだけ確認して、インストールそのものはされないです。

```:vagrant
# yum install --assumeno php
```

すると以下の結果が出て、バージョン5.4.16というかなり古いものが、baseリポジトリからインストールされることになるということがわかります。

```:実行結果
================================================================================
 Package             アーキテクチャー
                                  バージョン                   リポジトリー
                                                                           容量
================================================================================
インストール中:
 php                 x86_64       5.4.16-45.el7                base       1.4 M
依存性関連でのインストールをします:
 apr                 x86_64       1.4.8-3.el7_4.1              base       103 k
 apr-util            x86_64       1.5.2-6.el7                  base        92 k
 httpd               x86_64       2.4.6-80.el7.centos          base       2.7 M
 httpd-tools         x86_64       2.4.6-80.el7.centos          base        89 k
 libzip              x86_64       0.10.1-8.el7                 base        48 k
 mailcap             noarch       2.1.41-2.el7                 base        31 k
 php-cli             x86_64       5.4.16-45.el7                base       2.7 M
 php-common          x86_64       5.4.16-45.el7                base       565 k
依存性関連での更新をします:
 openssl             x86_64       1:1.0.2k-12.el7              base       492 k
 openssl-devel       x86_64       1:1.0.2k-12.el7              base       1.5 M
 openssl-libs        x86_64       1:1.0.2k-12.el7              base       1.2 M

トランザクションの要約
================================================================================
インストール  1 パッケージ (+8 個の依存関係のパッケージ)
更新                       ( 3 個の依存関係のパッケージ)

総ダウンロード容量: 11 M
```

試しに現在のリポジトリ一覧も確認しておきましょう。

```
# yum repolist
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.0x.sg
 * extras: ftp.iij.ad.jp
 * updates: mirror.0x.sg
リポジトリー ID                     リポジトリー名                         状態
base/7/x86_64                       CentOS-7 - Base                        9,911
extras/7/x86_64                     CentOS-7 - Extras                        305
updates/7/x86_64                    CentOS-7 - Updates                       632
repolist: 10,848
```
Base, Extras, Updatesという３つのリポジトリが存在することがわかります。
このリポジトリの中にPHP7.1がないからyum installできないということですね。
ということで、PHP7.1が入っているリポジトリを追加します。
yumでremiリポジトリとそれに関連するリポジトリをインストールします。

```
# yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
```
何が入ったか見てみましょう。

```
# yum repolist
〜いろいろと省略〜
リポジトリー ID  リポジトリー名                                           状態
base/7/x86_64    CentOS-7 - Base                                           9,911
epel/x86_64      Extra Packages for Enterprise Linux 7 - x86_64           12,582
extras/7/x86_64  CentOS-7 - Extras                                           305
remi-safe        Safe Remi's RPM repository for Enterprise Linux 7 - x86_  2,671
updates/7/x86_64 CentOS-7 - Updates                                          632
repolist: 26,101
```
このようにepelとremiが新たにインストールされたことが確認できました。
では、PHP7.1と必要そうなモジュールを一式インストールしましょう。
ちなみに--enablerepoは一時的に今回はこっちのリポジトリを使うよっていうオプションです。
設定ファイルでenabled=0になっていてもこのオプションを使うと一時的に有効になります。

```
# yum install --enablerepo=remi-php71 php php-cli php-common php-devel php-fpm php-gd php-mbstring php-mysqlnd php-pdo php-pear php-pecl-apcu php-soap php-xml php-xmlrpc
```
成功しました。

php.iniで最低限の設定だけやっておきましょう。

```:/etc/php.ini
display_errors = On
error_log = "/var/log/php_errors.log"（任意の場所でOK）
date.timezone = "Asia/Tokyo"
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
```

# nginxをインストール
まずはnginxのパッケージをインストールしないとですね。

```
# yum -y install http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
```
ちゃんとリポジトリにnginxが入っているか念のため確認。

```
# yum repolist
~いろいろと省略〜

リポジトリー ID        リポジトリー名                                                   状態
base/7/x86_64          CentOS-7 - Base                                                   9,911
epel/x86_64            Extra Packages for Enterprise Linux 7 - x86_64                   12,582
extras/7/x86_64        CentOS-7 - Extras                                                   305
nginx/x86_64           nginx repo                                                          102
remi-safe              Safe Remi's RPM repository for Enterprise Linux 7 - x86_64        2,671
updates/7/x86_64       CentOS-7 - Updates                                                  632
repolist: 26,203
```
大丈夫ですね。
早速、先ほどのリポジトリを指定してnginxをゲットしましょう。

```
# yum -y install --enablerepo=nginx nginx
```
問題なく終了しました。そしたらnginxを起動＆自動起動設定しておきます。
うまくいったかどうかも見てみましょう

```
# systemctl start nginx
# systemctl enable nginx 
# systemctl status nginx
```
activeと表示されることを確認しました。
次に、ファイアウォールの設定を変更してhttp通信を許可するようにしておきましょう。

```
# firewall-cmd --add-service=http --permanent
# firewall-cmd --reload
```
では、ブラウザから192.168.33.10(vagrantfileのprivate_server)にアクセスしてみましょう。

```:ブラウザ
Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.
```

nginxの初期画面が表示されれば成功です！

# 自作htmlファイルが読み込まれるかテスト
nginxのドキュメントルートを調べます。

```
# cat /etc/nginx/conf.d/default.conf
~省略~
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
~省略~
```
ドキュメントルートがわかったので、/usr/share/nginx/html直下にtestとだけ書いたtest.htmlファイルを作成して、192.168.33.10/test.htmlにアクセスしてみましょう。
ブラウザにtest.htmlの中身が表示されれば成功ですね。

# nginxとphpを繋げる
このままだとnginxでphpを実行することはできません。
ということで、php−fpmとnginxを繋げるようにそれぞれ設定を変更します。

まずはphp-fpmから。デフォルトでapacheになっているのでnginxに変えます。

```:/etc/php-fpm.d/www.conf
- user = apache
+ user = nginx

- group = apache
+ group = nginx
```
次に、nginxの設定ファイルを変更します。
コメントアウトしたり追加したりした箇所だけ載せます。

```:/etc/nginx/conf.d/default.conf
〜省略〜
    location / {
        root   /usr/share/nginx/html;
        #index  index.html index.htm;
        index  index.php;　←追加
    }
〜省略〜
    location ~ \.php$ {
    #   root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
    #   fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html/$fastcgi_script_name;←追加
        include        fastcgi_params;
    }
```

これらの設定を再起動して反映させます。

```:コマンド
# systemctl restart nginx
# systemctl restart php-fpm
```

あとはドキュメントルートのhtml直下にindex.phpを作成し、
おきまりのphpinfo();あたりを書いてブラウザからアクセスしてみましょう。

192.168.33.10/index.phpにアクセスして正しくphpが実行されていれば成功です！

[次はこれにさらにmysqlとlaravelをいれてみたい](https://qiita.com/pipiox/items/465e1969dd1f99d2c7c0)と思ってます。

# 参考サイト
https://akamist.com/blog/archives/648