virtualBoxでLaravel10+Nginx+CentOS7の環境構築

## 概要
Centos7でLaravel10の開発環境をvirtualBoxで作成する。
環境はLinux(Centos7)、php8(Laravel)、MariaDB、Nginx で行う。

## しないこと
 - virtualBoxのダウンロード
 - CentOSのダウンロード・インストール
 - CentOSの設定（ネットワークなど）
 - ユーザーの作成

## 環境

 - virtualBox6
 - CentoOS7(最小構成)
 - Laravel10
 - PHP 8.2
 - Nginx 1.20.1
 - MariaDB Ver 15.1 Distrib 10.7.3-MariaDB

## 1. 初期設定

rootに移行(rootログインではない場合)

```
sudo su - 
```

yumのパッケージを全てアップデートする

```
yum -y update
```



SELinuxを無効化し再起動する。

```
vi /etc/selinux/config

#SELINUX=enforcing ←disabledに変更
SELINUX=disabled

#再起動コマンド
reboot

#SELinux確認コマンド
getenforce
Disabled ←が表示されれば反映されている
```

## 2.Nginxのインストール

epelをインストールする
```
yum install -y epel-release
```
Nginxをインストールする

```
yum install -y nginx
```
Nginxの起動、サービス自動起動有効化、ステータスの確認

```
systemctl start nginx
systemctl enable nginx
systemctl status nginx

 #Loaded: loaded (enabled)になっていることを確認
 #Active: active (running)になっていることを確認
```

#### ファイヤーウォールの設定において、`http`の通信を許可する設定。
ファイアーウォールの設定の確認

```
firewall-cmd --list-all

public (active)
  services: dhcpv6-client ssh
```

httpが接続できるように80ポートを許可する。


```
firewall-cmd --add-service=http --zone=public
```

httpが追加されているかの確認

```
firewall-cmd --list-all

public (active)
   services: dhcpv6-client http ssh
```

ファイアーウォールのランタイムルールをパーマネントルールに保存し、自動起動サービス化する。

```
firewall-cmd --runtime-to-permanent
systemctl restart firewalld.service
```

ブラウザで割り当てられているIPアドレスにアクセスすると、Nginxの初期画面が表示される。

![nginx.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329178/c76da368-0c29-0201-b760-8fb5ec56b580.png)




## 2. PHPのインストール
PHP8のリポジトリを追加する。(php8.2を使用)

```
yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum install -y yum-utils
yum-config-manager --enable remi-php82
```

PHPをインストールする。
```
yum install -y php82 php82-php php82-php-mysql php82-php-mysqlnd php82-php-bcmath php82-php-ctype php82-php-json php82-php-mbstring php82-php-openssl php82-php-pdo php82-php-tokenizer php82-php-xml gcc php-fpm
```

PHPのシンボリックリンクを設定する。

```
ln -s /usr/bin/php82 /usr/bin/php
```

PHPがインストールされたことを確認する。

```
php -v
PHP 8.2.13 (cli) (built: Nov 21 2023 09:55:59) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.2.13, Copyright (c) Zend Technologies
```

php-fpmを起動させておく。

```
systemctl php-fpm start
systemctl enable php-fpm
```
nginxの設定ファイルを編集する

`vim /etc/nginx/conf.d/nginx.conf`
```.nginx.conf
server {
    listen 80;
    listen [::]:80;
    server_name example.com;
    root /var/www/Laravel/public;
 
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";
 
    index index.php;
 
    charset utf-8;
 
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
 
    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }
 
    error_page 404 /index.php;
 
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }
 
    location ~ /\.(?!well-known).* {
        deny all;
    }
}
```

php-fpmの設定ファイルを編集する

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

user = nginx
group = nginx
```
nginxとphp-fpmを再起動する
```
systemctl restart nginx
systemctl restart php-fpm
```


## 3.MariaDBのインストール
最新のMariaDBのリポジトリの取得とインストール
```
curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
yum -y install MariaDB-server MariaDB-client
```
MariaDBの起動及び再起動時の設定をする。
```
systemctl start mariadb
systemctl enable mariadb
systemctl status mariadb
```
mariadb-secure-installationコマンドを実行し、rootのパスワードを設定する。

```
mariadb-secure-installation

Enter current password for root (enter for none):Enter
Enable unix_socket authentication? [Y/n] n
Set root password? [Y/n]y 
Remove anonymous users? [Y/n]y
Disallow root login remotely? [Y/n]y
Remove test database and access to it? [Y/n]y
Reload privilege tables now? [Y/n]y
```

#### Laravel用のデータベースを作成

MySQLにログインしDBの作成及びその確認

```
mysql -uroot -p
(パスワード入力)

CREATE DATABASE laravel;
SHOW DATABASES;
```
## 4.Composerのインストール

LaravelのインストールのためにComposerをインストールしておく。

```
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

composer -V
Composer version 2.2.9 2022-03-15 22:13:37
```
## 5.GITのイントール
```
yum install -y git
```

## 6.Laravelのインストール

composerでLaravelのライブラリを読み込む。

```
composer global require laravel/installer
```

Laravelのプロジェクトを作成する。

```
cd /var/www/
composer create-project "laravel/laravel=10.0.*" Laravel --prefer-dist
```

storageフォルダとbootstrap/cacheフォルダの権限の変更。

```
chmod -R 777 /var/www/Laravel/storage
chmod -R 777 /var/www/Laravel/bootstrap/cache
```
### .envファイルにDBのパスワード追加

```
DB_PASSWORD=(新しく設定したMySQLのrootのパスワード)
```
### artisanコマンドでLaravelの設定を行う

```
php artisan cache:clear
php artisan route:clear
php artisan config:clear
php artisan migrate
```



### 一般画面にアクセスする
![laravel10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329178/f088f020-f804-988d-9df4-3e3343886b2d.png)


## 参考

https://qiita.com/Masataka_Sugia/items/9131c010a6252678f29e#nginx%E8%A8%AD%E5%AE%9A

https://laravel.com/docs/10.x/deployment

https://qiita.com/P2eFR6RU/items/a7c89cd7b2c5ab67acd4