0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Vagrant で Laravel12環境構築

Last updated at Posted at 2025-05-22

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

cmd

# 任意の場所に移動
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を確認してください。

cmd
cd [作業用フォルダ]
ex) cd C:\Users\[user_name]\Documents\vagrant\laravel

# vagrant初期化
vagrant init almalinux/9 --box-version 9.5.20241203

Vagrantfile編集

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
cmd
# vagrant 起動
vagrant up

# vagrant接続
vagrant ssh

VM(AlmaLinux)設定

bash
# SELINUX設定確認
getenforce
  > Permissive

# SELINUX無効化
cd /etc/selinux/

# バックアップファイル作成
sudo cp -p config config.org

# configファイル編集
sudo vi config
config
- SELINUX=permissive
+ SELINUX=disabled
bash
# タイムゾーン設定
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

各種パッケージインストール

bash
# 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設定

bash
# 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導入&設定

bash
# Nginxインストール
sudo dnf -y install nginx

# 設定ファイル作成
sudo vim /etc/nginx/conf.d/default.conf
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;
  }
}
bash
# nginx起動
sudo systemctl start nginx

# 自動起動設定
sudo systemctl enable nginx

# 状態確認
systemctl status nginx
  > Active: active (running) ←になっていればOK

PHP導入&設定

bash
# 既存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
をそれぞれ選択するとコマンドが出てくるのでそれに従う

bash
# 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モジュールの導入

bash
# 現在のモジュール確認
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をインストール

bash
# 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.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設定

bash
# バックアップ作成
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
www.conf
- user = apache
+ user = nginx

- group = apache
+ group = nginx
bash
# php-fpm起動
sudo systemctl start php-fpm

# php-fpm自動起動設定
sudo systemctl enable php-fpm

動かした際にSessionがpermissionエラーとなる場合があります。
その場合は下記コマンドを実行。

bash
# 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
       ⇒ 近いところを選択(基本はデフォルトで選択される)

  • 以下のようなテキストが表示されるのでコピーする

text
# 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

リポジトリ追加

bash
sudo vim /etc/yum.repos.d/MariaDB.repo
  • 先程コピーしたテキストを張り付けて保存

MariaDBインストール

bash
# パッケージキャッシュ更新
sudo dnf makecache

# MariaDB インストール
sudo dnf install -y MariaDB-server MariaDB-client

MariaDB設定

bash
# my.cnf編集(設定ファイル)
sudo vim /etc/my.cnf
my.cnf(mysqldブロックに追加する。なければ新たに追加)
+ [mysqld]
+ character-set-server = utf8
+ innodb_buffer_pool_size = 512M

innodb_buffer_pool_sizeについては下記サイトを参照

三流エンジニアの落書き帳

MySQL8.0.3から登場した
innodb_dedicated_serverについても要チェック

MySQL 道普請便り第92回 innodb_dedicated_serverによるbuffer_poolの割り当て

bash
# 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/

bash
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
bash
# 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設定)

.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=[mariaDBrootパスワード]

テストデータ挿入

bash
# マイグレーション実行
php artisan 

# シーダー実行
php artisan db:seed

動作確認

  • ブラウザで192.168.33.10にアクセス
    LaravelのTOP画面が表示されればOK!

image.png

おまけ。ビルドと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"

参考にさせていただいた記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?