Windows環境に、Vagrant(AlmaLinux)でLaravel12が動く環境構築をしていきます。
VagrantとVirtualBoxはすでにwindowsに導入されている前提で進めていきます。
docker未使用。
環境構成
- AlmaLinux9(2025/5時点最新)
- Nginx 1.27.x
- MariaDB 11.7.2
- PHP 8.4.6
- Laravel 12
VM構築
まずはサクッとVMを作っていきます。
vagrant pluginインストール
vagrant plugin 入れてなかったら下記実行
入れてたらskipで
vbguest
# 任意の場所に移動
cd C:\Users\[user_name]\Documents
# 修正されたvbguestプラグインをgit clone
git clone https://github.com/dheerapat/vagrant-vbguest.git
# cloneしたディレクトリに移動
cd vagrant-vbguest
# gem build
gem build vagrant-vbguest.gemspec
# vbguestをインストール
vagrant plugin install ./vagrant-vbguest-0.32.1.gem
vbguestについて
VirtualBox Guest Additionsという
VirtualBox が提供する仮想マシン(ゲストOS)にインストールする追加機能のセットがあります。
(ゲストOSとホストOS(windows)の連携を強化するためのコンポーネント)
Vagrantで起動したVMがVirtualBoxのバージョンとかみ合わず、
Guest Additionsが古いままだと、この追加機能がうまく動作しなかったりします。
vagrant-vbguestは、Guest Additionsのバージョンをホストと同期させたり、自動的にインストール・更新してくれる便利なプラグインです。
なぜわざわざGitCloneしたのか?
本来であれば
vagrant plugin install vagrant-vbguest
でインストール可能です。
ですが、
Rubyのバージョンが上がったことで、File.exists?(path)がFile.exist?(path)に変更されたため
最新のvbguest(0.32.0)だとエラーが発生しています。
その為、このバグに対応しているものをわざわざcloneしてきています。
詳しくは以下を参照。
vagrant設定・接続
vagrantで使用できるAlmaLinuxのboxファイルはalmaLinux wikiや
HashiCorpを確認してください。
cd [作業用フォルダ]
ex) cd C:\Users\[user_name]\Documents\vagrant\laravel
# vagrant初期化
vagrant init almalinux/9 --box-version 9.5.20241203
Vagrantfile編集
- # config.vm.network "private_network", ip: "192.168.33.10"
+ config.vm.network "private_network", ip: "192.168.33.10"
# ここではwindowsにshareというフォルダを作ってvagrantと同期させます
- # config.vm.synced_folder "../data", "/vagrant_data"
+ config.vm.synced_folder "./share", "/var/www/laravel", create: true
# 標準の共有を無効化
- # config.vm.synced_folder ".", "/vagrant", disabled: true
+ config.vm.synced_folder ".", "/vagrant", disabled: true
+ # メモリとCPUを増やす(例: メモリ4GB、CPU 2コア)
+ config.vm.provider "virtualbox" do |vb|
+ vb.memory = "4096"
+ vb.cpus = 2
+ end
# vagrant 起動
vagrant up
# vagrant接続
vagrant ssh
VM(AlmaLinux)設定
# SELINUX設定確認
getenforce
> Permissive
# SELINUX無効化
cd /etc/selinux/
# バックアップファイル作成
sudo cp -p config config.org
# configファイル編集
sudo vi config
- SELINUX=permissive
+ SELINUX=disabled
# タイムゾーン設定
sudo timedatectl set-timezone Asia/Tokyo
# 確認
timedatectl
# Vimと日本語パッケージとロケール(言語)パッケージ追加
sudo dnf install -y vim langpacks-ja glibc-langpack-ja
# 日本語化
sudo localectl set-locale LANG=ja_JP.UTF-8
# 反映
source /etc/locale.conf
# 確認
localectl status
各種パッケージインストール
# epelリポジトリの追加
sudo dnf -y install epel-release
# ホストOSとゲストOSで連携するのに必要なパッケージとwgetのインストール
sudo dnf -y install kernel-devel kernel-headers dkms gcc gcc-c++ wget
# 全体パッケージの更新
sudo dnf -y update
#VM抜けて再起動
exit
vagrant reload
#再接続
vagrant ssh
# SELINUX設定確認
getenforce
> Disabled
firewall設定
# firewalldインストール
sudo dnf install -y firewalld
# firewall起動
sudo systemctl start firewalld
# 自動起動設定
sudo systemctl enable firewalld
# firewall設定(http:80/https:443ポート開放)
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
# 再起動
sudo firewall-cmd --reload
#反映確認
sudo firewall-cmd --list-all-zones
>
public (active) ←activeになっている部分を確認
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services: dhcpv6-client http https ssh ←httpとhttpsがあればOK
Nginx導入&設定
# Nginxインストール
sudo dnf -y install nginx
# 設定ファイル作成
sudo vim /etc/nginx/conf.d/default.conf
server {
listen 80 default_server;
server_name localhost;
root /var/www/laravel/public;
index index.php index.html;
# アップロードサイズ制限(default 1MB)
client_max_body_size 20M;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# php-fpm設定
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
}
# キャッシュの設定
location ~ .*\.(jpg|gif|png|css|js|ico|woff) {
expires 10d;
access_log off;
log_not_found off;
}
}
# nginx起動
sudo systemctl start nginx
# 自動起動設定
sudo systemctl enable nginx
# 状態確認
systemctl status nginx
> Active: active (running) ←になっていればOK
PHP導入&設定
# 既存phpパッケージの確認(確認して無ければ次はskip)
dnf list installed | grep php
# 既存phpパッケージの削除
sudo dnf remove php*
手順
参考:RemiでCentOS7にPHP8をインストールする
公式:https://rpms.remirepo.net/wizard/
公式で
Operating system
Wanted PHP version
Type of installetion
をそれぞれ選択するとコマンドが出てくるのでそれに従う
# Remiリポジトリの追加
sudo dnf -y install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
# yum-utilsパッケージのインストール(yum-config-managerコマンドの追加)
sudo dnf -y install dnf-utils
# php8.4のインストール
sudo dnf -y install php84
# php本体のパス確認
which php84
# シンボリックリンクの設定(/usr/bin/php84は上記で出たパスに書き替え)
sudo ln -sf /usr/bin/php84 /usr/bin/php
# どこでもphpが叩けるかの確認
php -v
PHPモジュールの導入
# 現在のモジュール確認
php -m
## 現在のモジュールと推奨されているモジュールを比較して、差分を書けばOK
## 但し、php-fpm と php-mysqlnd は書いてなくても必要です!
# モジュールのインストール
sudo dnf -y install php-fpm php-mysqlnd php-dom php-imagick php-mbstring php-openssl php-pcre php-xml php-zip php-pear
PHP設定
php.iniの設定について
参考:初心者向け CentOS7.9 に PHP8.0をインストール
# php.iniの場所確認
php -i | grep php.ini
# バックアップ作成
sudo cp -p /etc/php.ini /etc/php.ini_bk
# php.ini編集
sudo vim /etc/php.ini
# phpバージョンの非表示
- expose_php = On
+ expose_php = Off
# POSTできるデータサイズの変更
- post_max_size = 8M
+ post_max_size = 20M
# アップロードできるファイルサイズの変更
- upload_max_filesize = 2M
+ upload_max_filesize = 20M
# タイムゾーンの変更
- ;date.timezone =
+ date.timezone = "Asia/Tokyo"
# 日本語対応(マルチバイト対応)
- ;mbstring.language = Japanese
+ mbstring.language = Japanese
- ;mbstring.internal_encoding =
+ mbstring.internal_encoding = UTF-8
- ;mbstring.http_input =
+ mbstring.http_input = auto
php-fpm設定
# バックアップ作成
sudo cp -p /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf_bk
# www.conf編集
sudo vim /etc/php-fpm.d/www.conf
- user = apache
+ user = nginx
- group = apache
+ group = nginx
# php-fpm起動
sudo systemctl start php-fpm
# php-fpm自動起動設定
sudo systemctl enable php-fpm
動かした際にSessionがpermissionエラーとなる場合があります。
その場合は下記コマンドを実行。
# php sessionの所有者/グループをnginxに変更
sudo chown -R nginx:nginx /var/lib/php/session
MariaDB導入&設定
公式サイトからリポジトリを確認。
https://mariadb.org/download/
-
MariaDB Server Repositoriesタブを選択し、各セレクトボックスで以下を選択する
-
Choose a distribution
⇒ Red Hat Enterprise Linux9 -
Choose a MariaDB Server version
⇒ 11 Rolling (最新を選択) -
Mirror
⇒ 近いところを選択(基本はデフォルトで選択される)
-
-
以下のようなテキストが表示されるのでコピーする
# MariaDB 11 Rolling RedHatEnterpriseLinux repository list - created 2025-05-22 03:30 UTC
# https://mariadb.org/download/
[mariadb]
name = MariaDB
# rpm.mariadb.org is a dynamic mirror if your preferred mirror goes offline. See https://mariadb.org/mirrorbits/ for details.
# baseurl = https://rpm.mariadb.org/11.rolling/rhel/$releasever/$basearch
baseurl = https://ftp.yz.yamagata-u.ac.jp/pub/dbms/mariadb/yum/11.rolling/rhel/$releasever/$basearch
# gpgkey = https://rpm.mariadb.org/RPM-GPG-KEY-MariaDB
gpgkey = https://ftp.yz.yamagata-u.ac.jp/pub/dbms/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1
リポジトリ追加
sudo vim /etc/yum.repos.d/MariaDB.repo
- 先程コピーしたテキストを張り付けて保存
MariaDBインストール
# パッケージキャッシュ更新
sudo dnf makecache
# MariaDB インストール
sudo dnf install -y MariaDB-server MariaDB-client
MariaDB設定
# my.cnf編集(設定ファイル)
sudo vim /etc/my.cnf
+ [mysqld]
+ character-set-server = utf8
+ innodb_buffer_pool_size = 512M
innodb_buffer_pool_size
については下記サイトを参照
MySQL8.0.3から登場した
innodb_dedicated_server
についても要チェック
# mariaDB起動
sudo systemctl start mariadb
# mariaDB自動起動設定
sudo systemctl enable mariadb
rootユーザーパスワード設定(セキュリティ初期設定)
# セキュリティ初期設定
sudo mariadb-secure-installation
Enter current password for root: ←何も入力せずにEnter押下
Switch to unix_socket authentication [Y/n] ← OSのrootユーザーとしてログインしていれば、MariaDB のrootユーザーにパスワードなしでログインできるようになる設定。ローカルなので[Y]
Change the root password? [Y/n] ← MariaDBのrootユーザーのパスワードを変えるかなので[Y]
New password: ←新しいパスワードを入力(出来れば大小文字、数字、特殊文字含む8文字以上で)
Re-enter new password: ←再度同じパスワードを入力
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n]: ←匿名ユーザーを消すが聞かれているので[Y]
Disallow root login remotely? [Y/n]: ←rootユーザーのリモートログインを禁止するか[Y]
Remove test database and access to it? [Y/n]: ←テスト用のデータベースを削除してアクセスしますか?[Y]
Reload privilege tables now? [Y/n]: ←特権テーブルを更新するかなので[Y]
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB! ←これが出ればOK
MariaDBログイン
# MariaDB ログイン
mariadb -uroot -p
Enter password: ←表示されないので注意。先ほど設定したパスワードを入力
Laravel用DB作成
# DB作成&文字コード、照合順序セット
CREATE DATABASE laravel CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# ユーザー作成(必要であれば)
CREATE USER 'laravel'@'localhost' IDENTIFIED BY 'password';
# 権限付与(必要であれば)
GRANT ALL PRIVILEGES ON laravel_db.* TO 'laravel'@'localhost';
# 反映
FLUSH PRIVILEGES;
Laravel導入&設定
Composer導入
Composer公式サイトからDownloadコマンドを取得する。
以下のCommand-line installationをコピーしてコマンドを実行する
https://getcomposer.org/download/
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'dac665fdc30fdd8ec78b38b9800061b4150413ff2e3b6f88543c636f7cd84f6db9189d43a81e5503cda447da73c7e5b6') { echo 'Installer verified'.PHP_EOL; } else { echo 'Installer corrupt'.PHP_EOL; unlink('composer-setup.php'); exit(1); }"
php composer-setup.php
php -r "unlink('composer-setup.php');"
そのちょっと下くらいに、
composer.phar into a directory on your PATH, so you can simply call composer from any directory (Global install), using for example:
sudo mv composer.phar /usr/local/bin/composer
と書いてありますが。
要はcomposerコマンドをどこからでも叩けるように配置し直しています。
/usr/local/bin/
だと恐らく、呼び出せないと思うので/usr/bin
に配置します。
sudo mv composer.phar /usr/bin/composer
# Composerコマンド確認
composer --version
>
Composer version 2.8.9 2025-05-13 14:01:37
PHP version 8.0.30 (/usr/bin/php)
Run the "diagnose" command to get more detailed diagnostics output.
Laravelインストール
詳しくは公式ドキュメントを参照。
# ディレクトリ所有者、権限変更
sudo chown -R vagrant:nginx /var/www
# ディレクトリ移動
cd /var/www/
# Laravelインストール
composer create-project laravel/laravel laravel
Laravelインストールコマンドのフォーマット
composer create-project laravel/laravel:[バージョン指定] [laravelプロジェクトフォルダ名]
ex) composer create-project laravel/laravel:^10.0 laravel-app
- 以下のようにsuccessfullyと実行結果が出力されればOK
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
INFO Discovering packages.
laravel/sail ................................................................................................................................ DONE
laravel/sanctum ............................................................................................................................. DONE
laravel/tinker .............................................................................................................................. DONE
nesbot/carbon ............................................................................................................................... DONE
nunomaduro/collision ........................................................................................................................ DONE
nunomaduro/termwind ......................................................................................................................... DONE
spatie/laravel-ignition ..................................................................................................................... DONE
83 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
> @php artisan vendor:publish --tag=laravel-assets --ansi --force
INFO No publishable resources for tag [laravel-assets].
Found 3 security vulnerability advisories affecting 3 packages.
Run "composer audit" for a full list of advisories.
> @php artisan key:generate --ansi
INFO Application key set successfully.
Laravelの設定
これ以降、windows側 [作業用フォルダ]/share
と
linux側 /var/www/laravel
が同期されているので、
ファイル編集時はVSCodeで当該ファイルを編集しても良いですし
vimで操作してもどちらでもOKです。お好みで。
権限周り再設定
# ディレクトリ所有者、グループ変更
sudo chown -R vagrant:nginx /var/www/laravel
# ディレクトリパーミッション設定
sudo find /var/www/laravel -type d -exec chmod 755 {} \;
# storage/cacheディレクトリのパーミッション設定
sudo chmod -R 775 /var/www/laravel/storage /var/www/laravel/bootstrap/cache
# ファイルのパーミッション設定
sudo find /var/www/laravel -type f -exec chmod 644 {} \;
Laravel.env編集(DB設定)
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=[mariaDBのrootパスワード]
テストデータ挿入
# マイグレーション実行
php artisan
# シーダー実行
php artisan db:seed
動作確認
- ブラウザで192.168.33.10にアクセス
LaravelのTOP画面が表示されればOK!
おまけ。ビルドとnode_modulesとgitの設定。
windowsとフォルダ共有をしているとnode_modulesが入らない為、
別の所にnode_modules置き場を作って、マウント(繋ぐ)させる。
npm / node_modules設定
# npm本体とgitインストール
sudo dnf install -y npm git
# node_modules置き場を作る
sudo mkdir /home/vagrant/laravel_node_modules
# laravelプロジェクトフォルダにnode_modulesディレクトリを作成する
sudo mkdir /var/www/laravel/node_modules
# systemd設定の再読み込み
sudo systemctl daemon-reload
# マウントさせる
sudo mount --bind /home/vagrant/laravel_node_modules /var/www/laravel/node_modules
# npm install
npm install
# ビルド
npm run build
Git初期設定
# gitのユーザー名/メールアドレスの設定
git config --global user.name "your name"
git config --global user.email "your email"
参考にさせていただいた記事