WSLのAlmaLinux8でLaravel10のサンプルプロジェクトを起動するまで

# 前提
* Windows10 Pro(x64)
* WSL2インストール済み
* MicrosoftStoreからAlmaLinux8インストール済み
* WSLは初回起動してユーザー作成済み

Docker と Laravel Sail は使いません。また、この環境は SELinux が有効でなく、Firewall も動いていませんのでご留意ください。

# AlmaLinuxの初期状態確認

パッケージは minimal となっているのか、`hostname`,`ip addr`といった基本的なコマンドが使えない。また、systemd が有効になっていない。

```shell
hostname -> NG
ip addr -> NG
whoami -> OK
ping www.google.com -> OK
sudo systemctl -> NG
dnf list --installed -> OK
```

# systemd 有効化

Microsoftのサイトを参照して、設定ファイルを作成後に再起動して有効にする。サイトに記載のとおり、WSLのデフォルトのUbuntuではこの作業は不要のようだが、現時点でのAlmaLinux8では必要。

```:/etc/wsl.conf
[boot]
systemd=true
```

PowerShellからシャットダウンする。ターミナル等からアクセスすれば自動的に起動する。

```powershell
wsl --shutdown
```

**参考**

https://learn.microsoft.com/ja-jp/windows/wsl/systemd


# 基本的なコマンドのインストール

`locate`は好みで。

```shell
sudo dnf install hostname iproute
sudo dnf install zip unzip
sudo dnf install mlocate
sudo dnf update
```

```shell
hostname -> OK
ip addr -> OK
sudo systemctl -> OK
```

# Apache2のインストール

インストールして、起動して、サービス登録する。

```shell
sudo dnf install httpd
sudo systemctl start httpd
sudo systemctl enable httpd
```

Windows側から「http://localhost 」にアクセスして、テストページが表示されることを確認する。

# PHP8.2のインストール
```shell
dnf module list php
```
```
Last metadata expiration check: 0:16:35 ago on Sun Aug 27 10:08:06 2023.
AlmaLinux 8 - AppStream
Name                     Stream                     Profiles                                      Summary
php                      7.2 [d]                    common [d], devel, minimal                    PHP scripting language
php                      7.3                        common [d], devel, minimal                    PHP scripting language
php                      7.4                        common [d], devel, minimal                    PHP scripting language
php                      8.0                        common [d], devel, minimal                    PHP scripting language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
```

Laravel10はPHP8.1以降が必要なので、Remiレポジトリを追加してインストールする。

```shell
sudo dnf install epel-release
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
dnf module list php
```

```
Remi's Modular repository for Enterprise Linux 8 - x86_64
Name              Stream                   Profiles                                   Summary
php               remi-7.2                 common [d], devel, minimal                 PHP scripting language
php               remi-7.3                 common [d], devel, minimal                 PHP scripting language
php               remi-7.4                 common [d], devel, minimal                 PHP scripting language
php               remi-8.0                 common [d], devel, minimal                 PHP scripting language
php               remi-8.1                 common [d], devel, minimal                 PHP scripting language
php               remi-8.2                 common [d], devel, minimal                 PHP scripting language
```

```shell
sudo dnf module install php:remi-8.2
```

Laravel10に必要なモジュールをインストールする。公式サイトに記載のサーバ要件はこれで満たせるはず。

```shell
sudo dnf install php-pdo
```

Apacheと同様にFastCGIの起動とサービス登録をしておく。Apacheを再起動する。

```shell
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
sudo systemctl restart httpd
```

サービスが「running」となっていることを確認する。

```shell
systemctl list-units --type=service
```


**参考**

https://readouble.com/laravel/10.x/ja/deployment.html

### PHPが有効か確認

httpd.conf を探して、DocumentRootを確認する。

```shell
sudo updatedb
locate httpd.conf
sudo cat /etc/httpd/conf/httpd.conf |grep DocumentRoot
```

PHP情報確認用ページを作成する。

```php:/var/www/html/info.php
<?php
  phpinfo();
```

Windows側から「http://localhost/info.php 」にアクセスして、PHPが有効なことを確認する。

**参考**

https://qiita.com/heimaru1231/items/e48d7acd96411d2414f7

# sqlite3のインストール

Sqliteを使いたいので、インストールしておく。

```shell
sudo dnf install sqlite
sqlite3 -version # 3.26.0 2018-12-01 12:34:55 ... 
```

# Composerのインストール

公式サイトの案内どおり。

```shell
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
```

```shell
sudo mv composer.phar /usr/local/bin/composer
```

```shell
composer -v # Composer version 2.5.8 2023-06-09 17:13:21
```

**参考**

https://getcomposer.org/download/

# Laravelプロジェクト作成

composer で、Laravel プロジェクトを作成する。内部的には、git clone をしている模様。

```shell
composer create-project laravel/laravel sample-app
cd sample-app
php artisan -V # Laravel Framework 10.20.0
```

個別環境設定ファイルで、DBにsqliteを使うように変更。

```diff:.env
+DB_CONNECTION=sqlite
-DB_CONNECTION=mysql
-DB_HOST=127.0.0.1
-DB_PORT=3306
-DB_DATABASE=laravel
-DB_USERNAME=root
-DB_PASSWORD=
```

migrateを実行すると、sqliteデータベースを作成するか聞かれるので、YESする。

```shell
php artisan migrate
php artisan serve
```

Windows側から「http://localhost:8000 」にアクセスして、サンプルプロジェクトが表示されることを確認する。

**参考**

https://readouble.com/laravel/10.x/ja/installation.html

# node.js のインストール

アセットのコンパイルに必要なのでインストールしておく。npmもインストールされる。

```shell
dnf module list nodejs
```
```
Last metadata expiration check: 11:29:36 ago on Sun Aug 27 10:30:09 2023.
AlmaLinux 8 - AppStream
Name           Stream         Profiles                                      Summary
nodejs         10 [d]         common [d], development, minimal, s2i         Javascript runtime
nodejs         12             common [d], development, minimal, s2i         Javascript runtime
nodejs         14             common [d], development, minimal, s2i         Javascript runtime
nodejs         16             common [d], development, minimal, s2i         Javascript runtime
nodejs         18             common [d], development, minimal, s2i         Javascript runtime

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
```
```shell
sudo dnf module install nodejs:18/common
node -v # v18.16.1
npm -v # 9.5.1
```
```shell
npm install -g npm
```

上記のあと、プロジェクトのルートフォルダ(package.jsonがある)で`npm install` することで、node.jsからのデバッグ実行`npm run dev`(ただし、これはフロントエンドのデバッグ実行)とアセットのコンパイル`npm run build`が可能になっている。


**参考**

https://www.server-world.info/query?os=CentOS_Stream_8&p=nodejs&f=10

https://qiita.com/n0bisuke/items/b2704b6ebb84f21c03c1

https://readouble.com/laravel/10.x/ja/vite.html