Vagrant + Amazon Linux2 + Laravel 9 + Apache 2.4の環境構築 1日目 

# 1. 初めに
初めまして、piroです。
初投稿の記事で、色々と足らなかったり見づらいことあるかもしれませんが、良ければ最後まで見てください！！！

# 2.概要
「VagrantでAmazon Linux2 PHP 8.1 ＋ Laravel 9 + Apache 2.4 + Mysql(おまけ)」を環境構築する内容になります。
2日間に分けて投稿するのでよろしくお願いします。

1日目 : Vagrant設定、PHPインストール・設定、Laravel インストール・設定 **←ここ**
2日目 : Apache インストール・設定、Mysql インストール・設定

:::note info
 - 環境構築した際の最新バージョン
 - Windows 10 の環境構築になります。
 - コマンド実行は「Git Bash」を使用
:::

1日目は以下のサイト参考にしております。
[参考URL]
https://qiita.com/ntm718/items/b06188c459fe70a3fe87
https://dev.classmethod.jp/articles/ec2-php81-laravel9/

# 3. 前提条件
1. Vagrantがインストールされていること。

2. Virtualboxがインストールされていること。

3. Vagrant環境でVirtualboxの共有フォルダが使用できること。

:::note info
[投稿者の使用バージョン]
Vagrantは2.3.0を使用
Virtualboxは6.1.32を使用
:::

# 4.環境構築
### 4-1. Vagrant環境構築
##### 4-1-1. 環境構築用のフォルダを作成して、フォルダへ移動
```ruby:例
C:\Users\user\php_workspase\vagrant
```

##### 4-1-2.Vagrantの設定ファイル作成
```ruby:コマンド
'vi Vagrantfile'
```

##### 4-1-3.Vagrantの設定
```ruby:Vagrantfile
  # Every Vagrant development environment requires a box. You can search for
  # boxes at https://vagrantcloud.com/search.
  #config.vm.box = "base"
   config.vm.box = "gbailey/amzn2"
   config.vm.network "private_network", ip: "192.168.33.10"
  
  # share folder settings
  config.vm.synced_folder "./src","/var/www/html/src", create:"true", group:"apache", :mount_options => ['dmode=775', 'fmode=775']
  config.vm.provision "shell", run: "always", inline: <<-SHELL
    systemctl restart httpd.service
  SHELL
```
:::note info
- config.vm.box : 使用するVMイメージ指定。
      以下のVMイメージを使用。Amazon Linux2のVMになります
https://app.vagrantup.com/gbailey/boxes/amzn2  
- config.vm.network : プライベートネットワーク設定
:::


##### 4-1-5. Vagerat起動
4-1-2で作成したファイルがあるフォルダ上実行
```ruby:コマンド
vagrant up
```
:::note info
 - 初回は、virtualbox等に色々と設定等行うので時間かかります
:::

### 4-2. PHPインストール
##### 4-2-1.Virtualboxの環境へ接続
```ruby:コマンド
    vagrant ssh
```
接続すると以下のようになる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2693313/867b74b5-d8ff-5249-b175-b817ed5fcc41.png)


### 4-3. Amazon Linux2の各ソフトアップデート
##### 4-3-1.アップデートコマンドを実行
```ruby:コマンド
sudo yum update
```

##### 4-3-2.PHP8.1が表示されているか確認
```ruby:コマンド
amazon-linux-extras
```
:::note warn
- 8.0のみしか表示されないので、4-2-3以降を実施
- 8.1が表示されることがあれば、4-2-5以降を実施
:::
以下の様に8.0しか表示されない場合になります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2693313/b7494b60-681f-3bf7-5780-64192bced6e0.png)



##### 4-3-3.php8.1の導入できるように設定
```ruby:コマンド
sudo amazon-linux-extras install epel
sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
```

##### 4-3-4.php8.1が導入可能かチェック
以下のコマンド実行してphp81が見つかればインストールが可能になります。
```ruby:コマンド
sudo yum search php81
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2693313/7fb40b22-3cf3-a6be-7cba-4b1f4470c092.png)

##### 4-3-5.PHP8.1をインストール
```ruby:コマンド
sudo yum install php81 php81-php-mbstring php81-php-mysqlnd php81-php-gd php81-php-xml php81-php-fpm
```

##### 4-3-6.「php81」コマンドを「php」で実行できるように設定
```ruby:コマンド
php -v
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2693313/23ff1bbd-9b80-ea16-7c9a-00ef6e804b0c.png)

上記の様に「bash: php: command not found」なる場合は、以下のコマンドを実施
```ruby:コマンド
sudo alternatives --install /usr/bin/php php /usr/bin/php81 1
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2693313/6f2c0ca3-916f-3dba-0944-74bbbe9b6ce1.png)

### 4-4. Laravelインストール
##### 4-4-1. Composerをインストール
```ruby:コマンド
sudo php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
sudo php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
sudo php composer-setup.php
sudo php -r "unlink('composer-setup.php');"
sudo mv composer.phar /usr/local/bin/composer
```
:::note info
公式サイト(公式サイト通りコマンド実行)
https://getcomposer.org/download/
:::

##### 4-4-2.Composerインストール確認
```ruby:コマンド
composer --version
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2693313/39cfb50f-eb64-e308-a06d-defcb0d4778d.png)

##### 4-4-3.Laravel　インストールフォルダ作成（仮）※2日目の記事でApacheをインストールした際に再度行うので、ここでは一旦インストールの確認
```ruby:コマンド
sudo mkdir /var/wwww
sudo chown vagrant /var/wwww
cd /var/wwww
composer create-project --prefer-dist laravel/laravel app
```
:::note info
config.vm.synced_folder "./src","/var/www/html/src"
の部分が共有フォルダ設定
:::

# 5.終わりに
1日目の場合は「config.vm.synced_folder "./src","/var/wwwww/"」にするとコーディングはできます。
2日目以降で、Apacheを使用してWeb上の起動まで確認できます。引継ぎお付き合いいただければと思います。