centos7でnginxと(laravel)php-fpmを動かすメモ

# 作業記録
vagrantでcentOS7を立てて
nginxとlaravel(php-fpm)を動かす。

ゴールはlaravelのwelcome画面が出ればok

## centOS7を立ち上げ
vagrantが既に入っている状態で
centOS7のイメージは

https://app.vagrantup.com/bento/boxes/centos-7

こちらを使用する。

```
$ vagrant box add bento/centos-7
```

```
$ mkdir test
$ cd test
$ vagrant init
//これでVagrantfileが作られる
$ ls
Vagrantfile
```

```:Vagrantfile
config.vm.box = "bento/centos-7" //box名を設定
config.vm.network "private_network", ip: "192.168.56.54" //ipを指定
//Ranges: 192.168.56.0/21この範囲内で指定しないといけないっぽい
config.vm.synced_folder "./", "/vagrant_data" //マウント?localのファイルを共有する
```
```
$ ping 192.168.56.54
```
通れば立ち上がっている。

ssh でログインします。
```
$ vagrant ssh
[vagrant@localhost ~]$ ls /
bin   dev  home  lib64  mnt  proc  run   srv  tmp  vagrant       var
boot  etc  lib   media  opt  root  sbin  sys  usr  vagrant_data
```
vagrant_dataが作られていますね
ここのlocalとの共有ディレクトリになっている

## php-fpmをinstall
CentOS 7 の標準の yum リポジトリでは PHP 5.4 が提供されていますが、今回入れたいのはphp8系なので
remiリポジトリを利用する必要がある。

Remi で提供されているソフトウェアをインストールするためには EPEL のリポジトリも必須要件らしいので、
先に EPEL のリポジトリの追加を行った後に Remi のリポジトリを追加します。

##### ■EPELリポジドリinstall
```
[vagrant@localhost ~]$ sudo yum -y install epel-release
```

##### ■remi リポジトリinstall
```
[vagrant@localhost ~]$ sudo yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
```

##### ■php install
```
//remiリポジトリからinstallできるphpを確認
[vagrant@localhost ~]$ ls /etc/yum.repos.d | grep php
remi-php54.repo
remi-php70.repo
remi-php71.repo
remi-php72.repo
remi-php73.repo
remi-php74.repo
remi-php80.repo
remi-php81.repo
remi-php82.repo

//phpを削除するには
[vagrant@localhost ~]$ sudo yum remove php-*

//phpとphp-fpmをinstall
[vagrant@localhost ~]$ sudo yum -y install --enablerepo=remi,remi-php81 php php-fpm php-xml

[vagrant@localhost ~]$ php -v
PHP 8.1.12 (cli) (built: Oct 25 2022 17:30:00) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.1.12, Copyright (c) Zend Technologies

//php-fpm自動起動
[vagrant@localhost ~]$ sudo systemctl enable php-fpm

//php-fpm起動・停止・再起動
[vagrant@localhost ~]$ sudo systemctl start php-fpm
[vagrant@localhost ~]$ sudo systemctl stop php-fpm
[vagrant@localhost ~]$ sudo systemctl restart php-fpm

```

##### ■composer install
https://getcomposer.org/download/

この公式を参考にコマンドを叩く
```
[vagrant@localhost ~]$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" 
[vagrant@localhost ~]$ php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup. php'); } echo PHP_EOL;"
[vagrant@localhost ~]$ php composer-setup.php
[vagrant@localhost ~]$ php -r "unlink('composer-setup.php');"
[vagrant@localhost ~]$ sudo mv composer.phar /usr/local/bin/composer
```

##### ■laravelを立ち上げる
https://readouble.com/laravel/8.x/ja/installation.html#:~:text=%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82-,Composer%E3%81%A7%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB,-%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%E3%81%AB%E3%81%99%E3%81%A7%E3%81%AB

gitをinstall必要があるのでinstall
```
[vagrant@localhost ~]$ sudo yum install git -y
```
```
//共有フォルダに移動する
[vagrant@localhost ~]$ cd /vagrant_data
[vagrant@localhost vagrant_data]$ composer create-project laravel/laravel:^8.0 example-app
[vagrant@localhost vagrant_data]$ ls
Vagrantfile  example-app
```

## nginxをinstall
```
[vagrant@localhost ~]$ sudo yum install nginx -y
[vagrant@localhost ~]$ nginx -v
nginx version: nginx/1.20.1
```

```
//自動起動
[vagrant@localhost ~]$ sudo systemctl enable nginx

//起動・停止・再起動
[vagrant@localhost ~]$ sudo systemctl start nginx
[vagrant@localhost ~]$ sudo systemctl stop nginx
[vagrant@localhost ~]$ sudo systemctl restart nginx
```

ここまでで必要なものはinstallできたので
設定を行なっていきます。
nginxの設定とphp-fpmの設定を行います。


```
//vimを使うのでinstall
[vagrant@localhost ~]$ sudo yum -y install vim-enhanced
```

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

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
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;
    default_type        application/octet-stream;

    #serverコンテキストをconf.dないに置く必要性がわからないのでnginx.confに直書きする
    #include /etc/nginx/conf.d/*.conf;

    server {
            listen 80;
            root /vagrant_data/example-app/public;
            index index.php;
            client_max_body_size 128M;

            fastcgi_buffers 8 16k;
            fastcgi_buffer_size 32k;
            proxy_buffer_size 128k;
            proxy_buffers 4 256k;
            proxy_busy_buffers_size 256k;

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

            location ~ \.php$ {
                    fastcgi_split_path_info ^(.+\.php)(/.+)$;
                    fastcgi_pass   127.0.0.1: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
listen = 127.00.1:9000
listen.owner = nginx
listen.group = nginx

user = nginx
group = nginx
```