Virtualbox+VagrantにCentOS8.1入れて、nginxのVirtualhostとAliasでのphpMyAdminの設定

#環境
- ホスト：Windows 10 Pro
- VM環境：Virutalbox＋Vagrant

#目標
ゲストOSのCentOS8.1にNginx、php、MySQL、phpMyAdminを入れて動作を確認する。
ウェブサイトの動作確認用に使用するVM環境であるため（開発はWindows上で行っている）、Vagrantの共有フォルダ機能を用いてソースファイルを共有し、ゲストへのUpload作業をしないでいいようにします。

※これまでにLAMPでやっていたのを、LEMPで構築したいので、ついでにCentOS8.1を試したという経緯です。

#作業内容
##Nginxのインストール
- Version: 1.16

CentOSは8.1だが、元々は8.0を入れてからの更新であるためか、8.1でもそうなのか、nginx1.14がデフォルトになっていたので、どうせならと思い、1.16を入れてみる。

```
dnf module reset nginx
dnf module enable nginx:1.16
dnf -y module install nginx
```

を実行しました。

##phpのインストール
- Version : 7.4

Centos8のデフォルトはPHP7.2とか、8.1はPHP7.3なのかな？なので、

```
dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
dnf module reset php
dnf list php
dnf -y module install php:remi-7.4
```

でPHP7.4をremiから入れました。

##MySQLのインストール
- Version: 8.0

バージョンについては本当はMySQL5.7を入れた方が実環境なのだけど、Centos8.1にMySQL5.7は面倒っぽかったのと、新しいものを入れて試しておきたい気持ちもあって、8.0を入れてみる。
よくわかってないけど、CentOSに入ってるmysqlってCommunity-Serverじゃないのかな？ライセンスとかどうなんだ？ということでCommunity-Serverを入れてみる。

```
wget https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-all-languages.tar.gz
tar -zxvf phpMyAdmin-5.0.2-all-languages.tar.gz
mv phpMyAdmin-5.0.2-all-languages /usr/share/phpMyAdmin
cd /usr/share/phpMyAdmin/
```

これで配置は終わったので、nginxのVirtualhostかaliasでのアクセス設定が必要ですね。

##NginxでのAlias設定
- 対象はphpMyAdminのみ
- アクセス先は http://192.168.33.10/phpmyadmin
- 実体は /usr/share/phpMyAdmin

さて、ここで問題発生です。ずっとApacheしか触って来てないので、全くわかりません。ググります。
簡単な記述でできることが判明したので、

```
location /phpmyadmin {
    alias /usr/share/phpMyAdmin;
    index index.php;
}
```
そして、Virtualhostの設定も

```
server {
    listen 80;
    server_name test.centos81.vm;
    access_log /var/log/nginx/access_logs/test.vm.log main;

    location / {
        root /projects/test;
        index index.html index.php;
    }
}
```

で終わったと思いきや、、、動かないですね－、両方とも。。。
403エラー出ってますねー。`failed (13: Permission denied)`というのがerror.logに残ってますねー。

> ここから数時間経過します

そして、原因がいくつか判明。

###原因その１） PHPをAliasで動かすには fastcgiの設定が必要

下記のサイトを参考にさせて頂きました。

- [nginxでのPHP実行環境の構築 | 初めてのVPS構築](https://linux-svr.com/Web%E3%82%B5%E3%83%BC%E3%83%90/50.php#nginx)
- [Nginxのalias指定でphpMyAdminを動作させる | 9ensanのLifeHack](http://9ensan.com/blog/server/sakura-vps-nginx-alias-phpmyadmin/)

んで、

```
location /phpmyadmin {
    alias /usr/share/phpMyAdmin;
    index index.php;

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_read_timeout 360;
        fastcgi_pass unix:/var/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $request_filename;
    }
}
```

`fastcgi_pass` の表記は参考にさせて頂いたサイトもどこのサイトも
`unix:/var/run/php-fpm/php-fpm.sock;` とか `unix:/var/run/php5-fpm/php-fpm.sock;` とかってなってたけど、今回の環境は7.4だしCentOS8.1だしで、違うので、`/var/run/` の中を確認して`www.sock`を見つけた。これは正解なのかわかりません。

でもやっぱり動かない。

###原因その２）SELinuxっていう守護神
これは、エラーが403なので、ユーザー変えたり、chmodしたり、chownしたりしても解決できずに諦めかけた時に見つかりました。

- [nginxでホームディレクトリを公開ディレクトリに設定するふ](https://qiita.com/kieaiaarh/items/3455040597ee34c8c49e)

こちらのページで、まさに私の探していた情報がありました。`※ハマッたので、記載`ありがとうございます。

というわけで、

```
getenfoece
> Enforcing
setenforce 0
getenfoece
> Permissive
```

の後、無事にVirtualhostも表示できたし、phpの実行も確認できました。なので、SELinuxはおやすみなさい。

```
vi /etc/selinux/config

-SELINUX=Enforcing
+SELINUX=Permissive 
```
###おまけ
Aliasは動くようになったけど、`mysqli`が無いって怒られたので、

```
dnf -y install php-mysqlnd
```

これで、phpMyAdmin 動いた。

#結果
NginxやCentOSの常識を書いてるかもしれないけれど、私には常識ではなかったので勉強になりました。
NginxとApache、どっちがいいとかはないんだろうけど、両方知ってた方がいいんだろう。