WSLのAlmaLinux9でLaravel11のサンプルプロジェクトを起動するまで
- 前提
- AlmaLinuxの初期状態確認
- systemd 有効化
- 基本的なコマンドのインストール
- Apache2のインストール
- PHP8.2のインストール
- PostgerSQL 16 のインストール
- phAdmin4のインストール
- Composerのインストール
- Laravelプロジェクト作成
- node.js のインストール
- Starter Kits(Breeze)のインストールと日本語化
前提
- Windows10 Pro(x64)
- WSL2インストール済み
- MicrosoftStoreからAlmaLinux9インストール済み
- WSLは初回起動してユーザー作成済み
Docker と Laravel Sail は使いません。またこの環境は SELinux が有効でなく、Firewall も動いていませんので、ご留意ください。 WSLについては、よければ下記を参照ください。
この記事は、以下の焼き直しです。
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
参考
- Incus: Almalinux 9 を使う #AlmaLinux - Qiita
- RHEL7でpingをreniceしようとすると失敗する話 | Red Hat Portal
- コンテナセキュリティ 書評 #Security - Qiita
Apache2のインストール
インストールして、起動して、サービス登録する。
sudo dnf install httpd sudo systemctl start httpd sudo systemctl enable httpd
Windows側から「http://localhost 」にアクセスして、AlmaLinuxのテストページが表示されることを確認する。
参考
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
httpdとphp-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が有効なことを確認する。
参考
- Release Notes - Laravel 11.x - The PHP Framework For Web Artisans
- 11.x デプロイ Laravel
- Deploy a LAMP server | AlmaLinux Wiki
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
参考
- PostgreSQL: Linux downloads (Red Hat family)
- https://www.postgresql.jp/docs/9.4/auth-pg-hba-conf.html
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
参考