WindowsServer×Laravelの環境をHyper-Vに構築する

本番環境がWindowsServer指定だが、社内の経験者が多いという理由でLaravelが選択されたプロジェクトの後任になり、
XAMPPからWindowsServer×IIS×SQLServer2022の環境構築をした際の備忘録です。

※あくまで備忘録であり、細かな設定については言及していません。
当時の案件の開発環境で最低限動作するセットアップ方法なので、環境に合わせて設定は見直す必要があります。

使用したライブラリ・ツール等一覧

事前準備

Hyper-V有効化

有効化していない場合こちらの記事を参考に

ディレクトリの用意とWindowsServerのisoファイルダウンロード

C:\vm_isoC:\vm_shareのディレクトリを作成しておく(任意) C:\vm_iso内にisoファイルを配置しておく

仮想マシン作成+WindowsServerのインストール

Hyper-Vマネージャー起動

Windowsボタン押下→Hyper-Vで検索 Hyper-vマネージャー

仮想スイッチ(ネットワーク)の設定

  • 画面右の仮想スイッチマネージャーを選択 仮想スイッチマネージャー
  • 仮想スイッチの作成で「内部」を選択して「仮想スイッチの作成」ボタンを押下 仮想スイッチの作成
  • 任意の名前(以降はInernalSwitchとします)を付けてOKボタンを押下 スイッチ命名
  • ホストの「設定」を開き「ネットワークとインターネット」>「ネットワークの詳細設定」>vEthernet(InernalSwitch)「追加のプロパティを表示」 を選択 ネットワーク設定
  • IPの割り当ての「「編集」ボタンを押下
  • 以下のように設定して保存
    • IP 設定の編集: 手動
    • IPv4: オン
    • IPv6: オフ
項目
IPアドレス 192.168.200.1
サブネットマスク 255.255.255.0
ゲートウェイ (ブランク)
優先DNS (ブランク)
HTTPS経由のDNS オフ
代替DNS (ブランク)
HTTPS経由のDNS オフ

ip設定

仮想マシン設定

  • 画面右の「新規」>「仮想マシン」を選択 新規仮想マシン

  • 以下のように進める

    • 開始する前に: 次へボタン
    • 名前と場所の指定:
      • 名前: 任意の名前 (WSV2022など)
      • 場所: 任意 (デフォルトでOK)
    • 世代の指定: 第2世代(2) 第二世代
    • メモリの割り当て: 4096 MB(任意のメモリ)
    • ネットワークの構成: InternalSwitch ネットワークの構成
    • 仮想ハードディスクの接続:
      • 名前: 任意 (デフォルトでOK)
      • 場所: 任意 (デフォルトでOK)
      • サイズ: 任意 (60GB以上推奨)
    • インストールオプション:ブートイメージファイルからオペレーティングシステムをインストールする
      • メディア: (インストールしたISOファイルのパスを指定) インストールメディア
    • 要約: 完了ボタンを押下
  • 作成されたVMの設定を開く VM設定

  • 「ハードウェアの追加」から「ネットワークアダプター」を選択し「追加」ボタンを押下

  • 仮想スイッチ: Default Switch

  • 適用ボタンを押下 ネットワークアダプター

  • 左のメニューの「管理」>「統合サービス」を選択し「ゲストサービス」にチェックを入れる

  • OKボタンを押下 ゲストサービス

仮想マシン起動・OSセットアップ

  • 作成した仮想マシンを起動・接続する
  • Press any keyなど出たら何かキーボードのボタンを押下する
    • ここで失敗したら仮想マシンのウィンドウの上部のメニューからリスタートする
  • Hyper-V が表示されたらOSのインストーラーが起動するまで待つ
  • インストーラーが起動したら画面に沿ってインストールを進める
    • エディション:Windows Server 2022 Standard (Desktop Experience)
    • インストールの種類: カスタム
    • パスワード設定
  • Windowsログイン画面が表示されたら設定したパスワードでログイン

仮想マシン内の環境構築

1. IIS(Webサーバー)の設定

※XAMPPで開発したプログラムのソース一式をappとします。

IISのインストール

※仮想マシン内

  1. 「サーバーマネージャー」 →「管理」→ 「役割と機能の追加」
  2. 役割ベースまたは機能ベースのインストール→次へ
  3. サーバープールからサーバーを選択(デフォルトのままでOK)→次へ
  4. サーバーの役割:Webサーバー(IIS)にチェックし以下もチェックを入れて進める 以下を選択
    • Webサーバー > アプリケーション開発 > CGI
    • Webサーバー > パフォーマンス > 静的なコンテンツの圧縮
    • 管理ツール > IIS 管理コンソール
  5. インストール完了後、ブラウザで http://localhost にアクセスして IISの初期ページが表示されるか確認

役割と機能の追加 役割と機能の追加 インストールの種類 インストールの種類 サーバーの役割 サーバーの役割

他インストールしておくもの

アプリケーションプール等の設定

  • IISマネージャー起動 IISマネージャー

  • 「アプリケーションプール」を右クリック→「アプリケーションプールの追加」を選択。以下のように設定しOK サイト

項目
名前 app(任意の名前)
.Net CLRバージョン マネージドコードなし
マネージドパイプラインモード 統合
  • 「サイト」を右クリック→Webサイトの追加。以下のように設定しOK サイト
項目
サイト名 app.local
アプリケーションプール app
物理パス C:\inetpub\wwwroot\app\public
バインド)種類 http
バインド)IPアドレス 未使用の IP アドレスすべて
バインド)ポート 80
バインド)ホスト名 app.local

Hostsの設定(IIS外)

VM内でIP確認:

powershell
ipconfig

> イーサネット アダプター イーサネット 2:

   > 接続固有の DNS サフィックス . . . . .:
   > リンクローカル IPv6 アドレス. . . . .: fe80::c1d1:7cf9:df61:89d1%7
   > IPv4 アドレス . . . . . . . . . . . .: 192.168.56.102
   > サブネット マスク . . . . . . . . . .: 255.255.255.0
   > デフォルト ゲートウェイ . . . . . . .:

C:\Windows\System32\drivers\etc\hostsに以下を追記

192.168.56.102       app.local

2. PHP 8.2 設定(Non-Threadsafe x64)

  • PHP ZIP をダウンロード → C:\php82 に解凍 PHP 8.2

  • php.ini-production をコピーして php.ini を作成

  • php.ini の編集例

ini
extension_dir = "C:\php82\ext"

extension=curl
extension=gd
extension=mbstring
extension=php_sqlsrv_82_nts_x64.dll
extension=php_pdo_sqlsrv_82_nts_x64.dll
extension=fileinfo
  • Microsoft PHP SQL Server ドライバを C:\php82\ext に配置 PHP Drivers for SQL Server
    ※zipを解凍して以下のファイルをC:\php82\extにコピーする

    • 必須ファイル:
      • php_sqlsrv_82_nts_x64.dll
      • php_pdo_sqlsrv_82_nts_x64.dll
  • システム環境変数に C:\php82 を追加

  • IISマネージャー で PHP 8.2 を登録 (php-cgi.exe)

    1. IISマネージャー起動 > サーバーを選択(WIN-XXXXXX) > 画面中央のメニューの中から「ハンドラーマッピング」 を選択 ハンドラーマッピング
    2. 画面右の「操作」メニュー内「モジュールマップの追加」を選択。以下の設定を記載しOK モジュールマップ
項目
要求パス *.php
モジュール FastCgiModule
実行可能ファイル(オプション) C:\php82\php-cgi.exe
名前 PHP_v8.2 (任意の名称で良い)
  • FastCGIの設定

    1. サーバー選択 > FastCGIの設定 > 画面右操作メニューのアプリケーションの追加 FastCGIの設定 FastCGIの設定2
    2. 以下のように設定
    • 完全なパス: C:\php82\php-cgi.exe
    • 全般 > 環境変数 > コレクション
      • Name: PHPRC
      • Value: C:\php82 FastCGIの設定3
  • 既定のドキュメント追加

    • サイト>app.localを選択し、「既定のドキュメント」を選択
    • 画面右 操作タブの「追加」からindex.phpを追加しOK
  • 動作確認 C:\inetpub\wwwroot\index.php に以下を作成

php
<?php
echo phpinfo();

ブラウザで http://localhost/index.php にアクセス


3. Composer の設定

  • Composer をインストール (保存されるパスを環境変数設定用にメモしておく) Composer

  • PHP 実行パスを C:\php82\php.exe に設定

  • システム環境変数に Composer のパスを追加

  • バージョン確認

cmd
composer -V

4. Node.js の設定

bash
# バージョンチェック
nvm version

# インストール可能なnode.jsバージョン確認
nvm list available

# バージョン指定でインストール
nvm install 22.20.0

# インストール済みのnode.jsのバージョン確認
nvm list

# 使用するnode.jsのバージョン指定
nvm use 22.20.0
  • バージョン確認
powershell
node -v
npm -v

5. SQL Server の設定

  • SQL Server 2025 Developerをインストール ダウンロード

  • SSMSもインストール ダウンロード

  • SQL Server Management Studio (SSMS) を起動

  • 接続したら「データベース」を右クリックして「新しいデータベース」を選択

    • データベース名「app」を入力
    • OKをクリック
  • サーバーインスタンス直下の「セキュリティ > ログイン」右クリック → 「新しいログイン」

    • ログイン名に IIS APPPOOL\app と入力(検索ボタンは押さない)
      IIS APPPOOL\ + アプリケーションプール名
    • 「Windows 認証」を選択
    • 「ユーザー マッピング」で使用するデータベース( app)にチェック
    • ロールとして db_owner(または必要な最低限の権限)を付与
    • OK をクリック

TCP/IP設定

  • windowsのメニューから 「SQL Server2022構成マネージャー」 のアプリを起動する
  • 画面左のSQL Server ネットワークの構成を選択
  • MSSQLSERVERのプロトコルを選択

※TCP/IPが「有効」になっていない場合

  • クリックして開いたウィンドウのプロトコルタブ有効:いいえはいに変更

  • IPアドレスタブを選択しIPアドレス127.0.0.1(localhost)の有効:いいえはいに変更(ポート番号が1433じゃなかったらメモしておく)

    ※適用ボタンを押下すると再起動するまで云々言われるのでOKする 上記設定が終わったら画面左のメニューの SQL Serverのサービスをクリック SQL Server (MSSQLSERVER)を右クリックして再起動を選択して再起動しておく


6. Mailhog設定

  • MailHog_windows_amd64.exeをVMにダウンロード  ダウンロード
  • mailhog用のディレクトリ作成C:\mailhog, C:\mailhog\mails
  • ダウンロードしたexeをC:\mailhog内に配置
  • 以下を記載したバッチ(.bat)ファイルを作成(ファイル名は任意)しexeと同じディレクトリに配置
bat
@echo off
cd /d C:\mailhog
start "" MailHog_windows_amd64.exe -storage=maildir -maildir-path=C:\mailhog\mails
  • バッチファイルのショートカットをデスクトップに置いておくと便利
  • シェルスクリプトはこちら
sh
#!/bin/bash
./MailHog_windows_amd64.exe -storage=maildir -maildir-path=./mails

※Mailpitの場合

1. mailpitダウンロード

mailpit ダウンロード
※VMのホストに配置

bash
mkdir /c/mailpit
mv download_path/mailpit.exe /c/mailpit/mailpit.exe

2. mailpi起動スクリプト作成

start_mailpit.sh
sh
#!/bin/bash

# Default values
DEFAULT_LISTEN_PORT=8025
DEFAULT_SMTP_PORT=1025
DEFAULT_DB_FILE=mailpit.db

# 引数があれば優先、なければ空
LISTEN_PORT=$1
SMTP_PORT=$2
DB_FILE=$3

# 対話入力(未指定時のみ)
if [ -z "$LISTEN_PORT" ]; then
  read -p "Listen port [$DEFAULT_LISTEN_PORT]: " LISTEN_PORT
  LISTEN_PORT=${LISTEN_PORT:-$DEFAULT_LISTEN_PORT}
fi

if [ -z "$SMTP_PORT" ]; then
  read -p "SMTP port [$DEFAULT_SMTP_PORT]: " SMTP_PORT
  SMTP_PORT=${SMTP_PORT:-$DEFAULT_SMTP_PORT}
fi

if [ -z "$DB_FILE" ]; then
  read -p "Database file [$DEFAULT_DB_FILE]: " DB_FILE
  DB_FILE=${DB_FILE:-$DEFAULT_DB_FILE}
fi

# DB ファイル作成
if [ ! -f "./$DB_FILE" ]; then
  echo "Database file not found. Creating $DB_FILE..."
  touch "./$DB_FILE"
fi

echo "Starting Mailpit..."
echo " UI   : [::]:$LISTEN_PORT"
echo " SMTP : [::]:$SMTP_PORT"
echo " DB   : ./$DB_FILE"

./mailpit.exe \
  --listen "[::]:$LISTEN_PORT" \
  --smtp "[::]:$SMTP_PORT" \
  --database "./$DB_FILE"

echo "Press Enter to exit..."
read

3. mailpit起動

bash
pwd
# > /c/mailpit
./start_mail.sh

7. Laravel プロジェクトセットアップ

  • Laravelプロジェクト内のpublicディレクトリに以下のweb.configを作成
C:\inetpub\wwwroot\app\public\web.config
xml
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Laravel" stopProcessing="true">
                    <match url=".*" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="index.php/{R:0}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>
  • storage/bootstrap/cache の書き込み権限を確認

    • エクスプローラーでプロパティ>セキュリティタブで「IIS_IUSERS」にフルコントロールを付与
  • .env.exampleから.envを作成

powershell
cd C:\inetpub\wwwroot
cp .env.example .env

.envの記載内容
.env
APP_NAME=app
APP_URL=http://app.local
APP_TITLE="アプリタイトル"

DB_CONNECTION=sqlsrv
DB_HOST=localhost
DB_PORT=1433
DB_DATABASE=app
DB_USERNAME=
DB_PASSWORD=

MAIL_MAILER=smtp
MAIL_HOST=127.0.0.1
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=test@email.com
MAIL_FROM_NAME="${APP_NAME}"

  • Laravel 初期セットアップ
cmd
composer install
npm install
php artisan key:generate
php artisan storage:link
php artisan migrate
php artisan db:seed
php artisan optimize
← 新しいレポート
静的/動的スニペットの活用
過去のレポート →
RAGについて