vagrantでNginx+PHP+php-fpmの環境を立ち上げる

vagrantでNginx+PHP+php-fpmの環境を立ち上げたので、手順を書きました
#CentOS7のインストール

CentOS7をダウンロードします。

```shell
$vagrant box add CentOS7 https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box
```

#CentOS7のVMを起動
boxの作成が成功したら以下の手順でVagrantfileを作成します。
今回は「sample」というディレクトリを作り、その中に展開していきます。

また、この後、ホスト側（自分のパソコン）で作成したphpファイルやhtmlファイルを、ゲストOS（今回で言う所のvagrantで立ち上げたcentos）に同期させる（マウント）ための設定をするのですが、それらのphpファイルやhtmlファイルを格納するフォルダ「sync」をsampleの下に作成しておきます。

```shell
$ mkdir sync
```

sampleディレクトリに移動し、以下のコマンドを打ちます。

```shell
$vagrant init CentOS7
```
これでcentos７のosでvagrantが立ち上がり、vagrantfileが作成されます。

現在のディレクトリ構成は以下のようになっています。


```shell
sample ┠ sync/
       ┠ Vagrantfile
```

作成されたVagrantfileを以下のように編集します。


```ruby:Vagrantfile

Vagrant.configure("2") do |config|
  config.vm.box = "CentOS7"
  #ローカルでアクセスするときのIPアドレス。初期設定は192.168.33.10のはず。
  config.vm.network "private_network", ip: "192.168.33.10"
  #同期先を指定。「カレントディレクトリ（.）を/vagrant以下に同期」と、「syncディレクトリを/var/www/」以下に同期する。
  config.vm.synced_folder ".", "/vagrant"
  config.vm.synced_folder "sync", "/var/www/"
end
```

そのあとにvagrantを立ち上げ、sshで中に入る。

```shell
$ vagrant up
$ vagrant ssh
```

##vagrantの中での操作

vagrantの中に入ったら、ifconfigで先ほど指定した192.168.33.10にアクセスできているか確認する。

```shell
$ ifconfig
~~~略~~~~~
inet 192.168.33.10
~~~略~~~~~
```
のような表記があればOK。なければor違うIPになっていたら、一度vagrantから抜けて、reloadし、再度接続する。

（以下はない人だけね）

```shell
[vagrant@localhost]$ exit
$vagrant reload
$vagrant ssh
```
もう一度確認し、ifconfigで192.168.33.10にアクセスできているかを確認。



#EPELリポジトリと、remiリポジトリ

アップデートし、EPELリポジトリと、remiリポジトリを追加しています。

```shell
$sudo yum update
$sudo yum -y install epel-release
$sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
```

#Nginx


/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/
enabled=0
gpgcheck=0
```

Nginxをインストールしていきます。

```shell
$sudo yum -y --enablerepo=nginx install nginx
$nginx -v 
#バージョンが表示されればOK
```

nginxを起動します。

```shell
$sudo systemctl start nginx
$sudo systemctl enable nginx
```
nginxが起動できているかの確認をします。

```shell
$sudo systemctl status nginx
#ここで、「Active: active (running)」になっていればOK。こんな感じ
   #Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
  # Active: active (running) since 木 2019-04-18 15:27:49 CEST; 1h 46min ago
```

#ファイアーウォール

このままではファイアーウォールによって阻まれアクセスできないため、80番ポート（httpのポート）を解放します。

```shell
$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --reload
```

nginxの起動、ファイアーウォールの設定が終わったので、ブラウザにアクセスしてみます。
nginxのウェルカムページが表示されればOKです。


#nginxの設定を編集

ここから、nginxの設定をいじっていきます。/etc/nginx/conf.d/default.confの設定ファイルを編集し、以下のようにします。

```shell
server {
    listen       80;
    server_name  localhost;
    #ここは「sync」フォルダ以下にあるファイルを参照してほしいので、「sync」の同期先であるvar/wwwを指定。
    root   /var/www;
    charset UTF-8;
    access_log  /var/log/nginx/www.example.com.access.log  main;
    error_log  /var/log/nginx/www.example.com.error.log;

    location / {
        index index.php index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ \.php$ {
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

}
```

nginxの設定ファイルをいじった後はrestartしなければいけないので、以下で再起動します。

```shell
$ systemctl restart nginx
```

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

```shell
$ yum -y install --enablerepo=epel,remi,remi-php72  php php-mbstring php-pdo php-mysqlnd php-fpm php-gd
```
新しいphpと、php-fpmが入っているか確認。

```shell
$ php -v
$ php-fpm -v
```

次に、/etc/php-fpm.d/www.conf にあるphp-fpmの設定ファイルを編集します。

この5つの記述をコメントアウト(;)もしくは削除して、(それぞれ離れたところにあるので探しずらいかも)

```shell:/etc/php-fpm.d/www.conf 
;listen = 127.0.0.1:9000
;user = apache
;group = apache
;listen.owner = nobody
;listen.group = nobody 
```
以下を追加。

```shell:/etc/php-fpm.d/www.conf 
user = nginx
group = nginx
listen = /var/run/php-fpm/php-fpm.sock
listen.group = nginx
listen.owner = nginx
```

設定を反映させるために、php-fpmを再起動します。


```shell
$ sudo systemctl restart php-fpm
```

ngixと同様、起動できているか確認します。「Active: active (running)」になっていればOK


```shell
$systemctl status php-fpm
```

/var/www/にindex.phpを作成して、phpの起動を確認したいのですが、「/var/www/以下に移動して、viでindex.phpを作成して・・・」とかはしなくておk。

最初にしたVagrantfileの設定で「sync」に作成したものは「var/www」に同期されるから、自分のパソコンのエディタで作成して大丈夫。


```php:index.php
<?php phpinfo(); ?>
```
ここで、192.168.33.10にアクセスして、以下のようになっていればOKです！！！

<img width="1080" alt="スクリーンショット 2019-04-19 0.57.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/388525/d727b6e8-dde9-7950-bf4f-75bc7442fe0d.png">


もしエラー出た場合はnginxのエラーログ(/var/log/nginx/error.log)などを見るといいでしょう。