[Laravel-adminを導入しよう！その2] CentOS Stream8にNginx、PHPをインストールする

1. [[Laravel-adminを導入しよう！その1] ConoHa VPSにCentOS Stream8をインストールしVSCodeでSSH接続できるようにする - Qiita](https://qiita.com/yuki-masaki/items/8d8e2f595f26a20cdf80)
2. [[Laravel-adminを導入しよう！その2] CentOS Stream8にNginx、PHPをインストールする - Qiita](https://qiita.com/yuki-masaki/items/4d9c2fb4769512049f03) ←本記事
3. [[Laravel-adminを導入しよう！その3] CentOS Stream8にLaravel9（PHP8、Nginx、MariaDB）をインストールする - Qiita](https://qiita.com/yuki-masaki/items/fe412f961b5164536c64)
4. [[Laravel-adminを導入しよう！その4] [CentOS Stream8 & Nginx] 無料のSSL証明書「Let's Encrypt」でSSL化する - Qiita](https://qiita.com/yuki-masaki/items/fc1e0d73c49d9afdda7e)
5. [[Laravel-adminを導入しよう！その5] Laravel-adminをインストールしSSL化する - Qiita](https://qiita.com/yuki-masaki/items/172bd66f26f9932906e0)

# 概要
本シリーズは、VPS上に構築したCentOSに、IT資産管理ツールを構築することを最終目的としています。
IT資産管理ツールのUIは、Laravelの管理画面ライブラリである「Laravel-admin」を使用する予定です。
[前回の記事](https://qiita.com/yuki-masaki/items/8d8e2f595f26a20cdf80)では、VPS上のCentOSにSSH接続できるようにするところまでを説明しました。
今回は、NginxとPHPをインストールしてWebサーバーを構築します。

# サーバー構成
OS: CentOS Stream8
Nginx: 1.20.2
PHP: 8.1.5

# 事前設定

```bash
# タイムゾーンをAsia/Tokyoに変更
sudo timedatectl set-timezone Asia/Tokyo
# selinuxをオフ
sudo grubby --update-kernel ALL --args selinux=0
# 設定を反映させるため再起動
sudo reboot
```

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

`nginx.repo`に以下を記載します。

```/etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
```

インストールして、ファイアウォールの許可設定を追加します。

```bash
sudo dnf -y install nginx
sudo systemctl enable nginx
sudo systemctl start nginx
sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --reload
```

### Nginxの設定を書き換え
`nginx.conf`を下記の通りに書き換えます。

```/etc/nginx/nginx.conf
user  nginx;
worker_processes  auto;
worker_rlimit_nofile 100000;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  2048;
    multi_accept on;
    use epoll;
}


http {

    server_tokens off;
    include       /etc/nginx/mime.types;
    default_type  text/html;
    charset UTF-8;

    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       off;
    tcp_nopush     on;
    tcp_nodelay    on;


    keepalive_timeout 10;
    client_header_timeout 10;
    client_body_timeout 10;
    reset_timedout_connection on;
    send_timeout 10;

    limit_conn_zone $binary_remote_addr zone=addr:5m;
    limit_conn addr 100;

    gzip on;
    gzip_http_version 1.0;
    gzip_disable "msie6";
    gzip_proxied any;
    gzip_min_length 1024;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/json;
    open_file_cache off;

    client_max_body_size 20m;
    server_names_hash_bucket_size 64;
    include /etc/nginx/conf.d/*.conf;
}
```

# PHPをインストール

```bash
# 有効バージョンをリセット
sudo dnf module reset php
# 8.1を有効にする
sudo dnf module enable php:remi-8.1
# PHPと関連ファイルをインストール
sudo dnf install php php-cli php-fpm php-curl php-mysqlnd php-gd php-opcache php-zip php-intl php-common php-bcmath php-imap php-imagick php-xmlrpc php-json php-readline php-memcached php-redis php-mbstring php-apcu php-xml
# バージョン確認
php -v
```
### php-fpm、Nginxの設定を書き換え
`www.conf`を下記の通り書き換える。

```/etc/php-fpm.d/www.conf
user = nginx
group = nginx

```

```bash
# php-fpmを再起動
sudo systemctl restart php-fpm
```

`index.php`を下記の通り書き換える。

```/var/www/html/example.jp/index.php
<?php phpinfo(); ?>
```

`default.conf`を下記の通り書き換える。

```/etc/nginx/conf.d/default.conf
server {
  listen 80;
  server_name example.jp;
  root   /var/www/html/example.jp/public;
  index index.php index.html index.htm;

  location ~ \.php$ {
    fastcgi_pass   unix:/var/run/php-fpm/www.sock;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME /var/www/html/example.jp/public$fastcgi_script_name;
    include        fastcgi_params;
  }
}
```

再起動しサービスに登録しておきます。
```bash
sudo systemctl restart nginx
sudo systemctl enable nginx
sudo systemctl enable php-fpm
```

### ブラウザで動作確認
ブラウザでドメインにアクセスしてphpinfoが表示されたらOKです。

# 参考サイト
[CentOS+NginxでLaravelを動かすまで（サーバー構築） | Reuhul tech memo](https://reuhul.org/129)
[centos stream 9 に nginx と php8.1 をインストール - Qiita](https://qiita.com/ma7ma7pipipi/items/90000bce1248a41745f8)
[CentOS Stream 8 の PHP 7.2 を 7.4 に変更する – ラボラジアン](https://laboradian.com/update-php-to-74-on-centos-stream8/)