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

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

前提

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

Docker と Laravel Sail は使いません。またこの環境は SELinux が有効でなく、Firewall も動いていませんので、ご留意ください。 WSLについては、よければ下記を参照ください。

pipin68k.hatenablog.com

この記事は、以下の焼き直しです。

pipin68k.hatenablog.com

AlmaLinuxの初期状態確認

まずはOSを確認する。インストール時期で異なると思われるが、ここでは、9.3 であることが確認できる。redhat-releaseとsystem-releaseは、almalinux-release のリンボリックリンクになっている。

cat /etc/almalinux-release
AlmaLinux release 9.3 (Shamrock Pampas Cat)

パッケージは minimal となっているのか、hostname,ip addrといった基本的なコマンドが使えない。また、systemd が有効になっていない。ping が動作しないのは、パッケージ不足ではなく、ケイパビリティかカーネルパラメータの変更によるもの。

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

systemd 有効化

ゲストOSの動作を制御する設定ファイル(/etc/wsl.conf)を作成し、WSLを再起動してこれを有効にする。

[boot]
systemd=true

コンソールからshutdown -h nowは通らないので、PowerShellからシャットダウンする。ターミナル等からアクセスすれば自動的に起動する。再起動後はsystemctlが利用可能になっている。

wsl --shutdown

参考

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

locateは好みで。findで良ければ不要。

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

ping を実行できるようにするには、ICMPのため raw socket を開く許可を与えるか、ping_group_range を変更するか、のどちらかが必要になる。詳細はリンク先を参照のこと。

sudo setcap 'cap_net_raw+p' /bin/ping
or
sudo sysctl -w net.ipv4.ping_group_range="0 65535"
hostname -> OK
ip addr -> OK
sudo systemctl -> OK
ping www.google.com -> OK

参考

Apache2のインストール

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

sudo dnf install httpd
sudo systemctl start httpd
sudo systemctl enable httpd

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

Apache Test Page

参考

PHP8.2のインストール

インストール可能なPHPを確認する。

dnf module list php
AlmaLinux 9 - AppStream
Name            Stream           Profiles                             Summary
php             8.1              common [d], devel, minimal           PHP scripting language
php             8.2              common [d], devel, minimal           PHP scripting language

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

Laravel11の対応はPHP8.2~8.3なので、レポジトリの追加なしでインストールできる。

sudo dnf module install php:8.2

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

sudo dnf install php-pdo

Apacheと同様にFastCGIの起動とサービス登録をしておく。Apacheを再起動する。パッケージは、phpと同時にインストールされている。

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

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

systemctl list-units --type=service

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

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

PHP情報確認用ページ(/var/www/html/info.php)を作成する。

<?php
  phpinfo();

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

参考

PostgerSQL 16 のインストール

今回は、PostgerSQL を使いたいのでインストールする。 インストール後は、データベースを初期化し、サービスとして起動しておく。クライアントの php-pgsql もインストールする。

# Install the repository RPM:
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# Disable the built-in PostgreSQL module:
sudo dnf -qy module disable postgresql

# Install PostgreSQL:
sudo dnf install -y postgresql16-server

# Optionally initialize the database and enable automatic start:
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
sudo systemctl enable postgresql-16
sudo systemctl start postgresql-16
sudo dnf install php-pgsql

認証に関する設定は、pg_hba.conf ファイルで行う。

sudo locate pg_hba.conf
sudo cat /var/lib/pgsql/16/data/pg_hba.conf
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
#local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256
# IPv6 local connections:
host    all             all             ::1/128                 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            scram-sha-256
host    replication     all             ::1/128                 scram-sha-256

初期状態ではローカルからのpeer認証しかできないので、ローカル接続して、パスワードを設定する。

sudo -u postgres psql
\password
\quit

パスワード設定後は、ホスト接続して、テスト用データベースを作成する。

psql -h localhost -U postgres
create database laravel;
\list
\quit

参考

phAdmin4のインストール

PostgreSQLの管理ツールもインストールしておく。

sudo rpm -i https://ftp.postgresql.org/pub/pgadmin/pgadmin4/yum/pgadmin4-redhat-repo-2-1.noarch.rpm

Desktopモードはインストールせず、Webモードのみをインストールする。セットアップスクリプト実行時に、ログインIDとなるメールアドレスとパスワードを登録する。

# Install for web mode only.
sudo yum install pgadmin4-web

sudo /usr/pgadmin4/bin/setup-web.sh

http://localhost/pgadmin4 にアクセスして、ログインすると管理が可能になっている。設定(/etc/httpd/conf.d/pgadmin4.conf)は以下のとおり、ローカル接続からのアクセスのみ許可されているので、必要に応じて、特定のIPアドレスを追加しておく。

LoadModule wsgi_module modules/mod_wsgi.so
WSGIDaemonProcess pgadmin processes=1 threads=25 python-home=/usr/pgadmin4/venv
WSGIScriptAlias /pgadmin4 /usr/pgadmin4/web/pgAdmin4.wsgi

<Directory /usr/pgadmin4/web/>
        WSGIProcessGroup pgadmin
        WSGIApplicationGroup %{GLOBAL}
        <IfModule mod_authz_core.c>
                # Apache 2.4
                Require all granted
        </IfModule>
        <IfModule !mod_authz_core.c>
                # Apache 2.2
                Order Deny,Allow
                Deny from All
                Allow from 127.0.0.1
                Allow from ::1
+                Allow from AAA.BBB.CCC.DDD
        </IfModule>
</Directory>

参考

Composerのインストール

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

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'dac665fdc30fdd8ec78b38b9800061b4150413ff2e3b6f88543c636f7cd84f6db9189d43a81e5503cda447da73c7e5b6') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
sudo mv composer.phar /usr/local/bin/composer
composer -v # Composer version 2.7.7 2024-06-10 22:11:12

参考

Laravelプロジェクト作成

composer で、Laravel プロジェクトを作成する。

composer create-project laravel/laravel sample-app
cd sample-app
php artisan -V # Laravel Framework 11.15.0

個別環境設定ファイル(.env)で、DBにpgsqlを使うように変更。

-DB_CONNECTION=sqlite
-# DB_HOST=127.0.0.1
-# DB_PORT=3306
-# DB_DATABASE=laravel
-# DB_USERNAME=root
-# DB_PASSWORD=
+DB_CONNECTION=pgsql
+DB_HOST=127.0.0.1
+DB_PORT=5432
+DB_DATABASE=laravel
+DB_USERNAME=postgres
+DB_PASSWORD=postgres

migrateを実行すると、.envで設定したlaravelデータベースにテーブルが作成される。

php artisan migrate
php artisan serve

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

参考

node.js のインストール

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

dnf module list nodejs
Name           Stream         Profiles                                      Summary
nodejs         18             common [d], development, minimal, s2i         Javascript runtime
nodejs         20             common [d], development, minimal, s2i         Javascript runtime        
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
sudo dnf module install nodejs:20/common
node -v # v20.12.2
npm -v # 10.5.0

npmは他でも使えた方が便利なので、グローバル環境にインストールしておく。

sudo npm install -g npm

上記のあと、プロジェクトのルートフォルダでnpm install することで、package.json を参照して、node関連のパッケージがインストールされる。

cd sample-app
npm install

参考

Starter Kits(Breeze)のインストールと日本語化

ログイン回り一式を提供してくれる Starter Kits があるので、これを導入する。

composer require laravel/breeze --dev
php artisan breeze:install
php artisan migrate

すべて英語表記だが、日本語化パッケージを作ってくれている人がいるので、これを導入する。

composer require askdkc/breezejp --dev
php artisan breezejp

トップページの右上に「Log in」と「Register」が追加されている。クリックで表示される各画面が日本語化されているのが確認できる。

php artisan serve

Laravel Test Page

参考