小型LMS irohaboardをIIS上で動かす

# 概要

小型LMSである[irohaboard](https://irohaboard.irohasoft.jp/)は手軽なeラーニングシステムとして、ときどき利用させていただいている。
v.0.10.3からはCakePHPも内蔵されて、ほぼ設置するだけでインストールが終わるPHPの良さをいかした改善がなされている。
基本的にはapacheがサポート対象ということだったが、どうしてもIISを使わないといけないケースがあったのでgithub上で質問したところ設定方法を教えていただいたので、メモの共有。

- 前提環境: WindowsServer2016, IIS10, php7.4
- 参考issue: [IIS用のweb.config設定を教えてほしい](https://github.com/irohasoft/irohaboard/issues/10)

## IISの準備

- IISにはFastCGIが使えるようモジュール設定（サーバーマネージャでインストール）しておく

  - 参考URL  
  https://www.ipentec.com/document/windows-windows-server-install-fast-cgi-module


### URLリライトモジュールの準備

別途ダウンロード&インストールが必要。
https://www.iis.net/downloads/microsoft/url-rewrite  の下のほうにある Download URL Rewrite Module 2.1 よりJapaneseのインストーラを利用した。

ググって調べたページ類だとバージョン違いのせいかURL rewriteというアイコンだったが、「URL書き換え」という名前で追加されていた。

  - 参考URL  
  https://ityorozuya.hatenablog.com/entry/2020/04/04/173405


### PHPのインストール

- 参考にしたURL等  
https://www.ipentec.com/document/windows-windows-server-install-php  
https://www.javadrive.jp/php/install/index2.html

1. ZIPファイルで提供されているPHP7.4をダウンロードする。Non-Thread-SafeことNTS版を選択する。
1. リンク先にあるようにアーカイブを展開後、コマンドプロンプト上で実行できるか確認し、VCランタイムが必要といわれたら、そちらも併せてインストールする。
1. IIS でハンドラマッピングを追加する
  - 要求パス `*.php` がきたとき、`FastCGImodule` で、`php-cgi.exe` が実行されるように設定
1. IISマネージャで「`既定のドキュメント`」にindex.phpを追加。
1. 定番の動作確認


```php:test.php
<?php
phpinfo();
```


## irohaboardのインストール

※事前に接続先mysqlなりmariadbなりの設定は済ませておく

### ファイル設置

今回は `/apps/irohaboard` という場所にした(`d:\inetpub\wwwroot\apps\irohaboard`)。
該当場所にirohaboardのアーカイブを展開。

上記例でいうところの `d:\inetpub\wwwroot\apps\irohaboard` の場所に、次の内容で `web.config` ファイルを設置。

```xml:web.config
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Rewrite requests to test.php" stopProcessing="true">
                    <match url="^test.php(.*)$" ignoreCase="false" />
                    <action type="Rewrite" url="app/webroot/test.php{R:1}" />
                </rule>
                <rule name="Exclude direct access to app/webroot/*" stopProcessing="true">
                    <match url="^app/webroot/(.*)$" ignoreCase="false" />
                    <action type="None" />
                </rule>
                <rule name="Rewrite routed access to assets (img, css, files, js, favicon)" stopProcessing="true">
                    <match url="^(img|css|files|js|favicon.ico)(.*)$" />
                    <action type="Rewrite" url="app/webroot/{R:1}{R:2}" appendQueryString="false" />
                </rule>
                <rule name="Rewrite requested file/folder to index.php" stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="false" />
                    <action type="Rewrite" url="index.php" appendQueryString="true" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>
```

### DB接続先設定

  app/Config/database.phpを適宜書き換える

### インストーラを起動

  あとは通常どおり /install にブラウザからアクセスすればセットアップ画面になるので、指示にしたがい初期設定。


# まとめ

irohaboardはCakePHPベースなので、そちらを参照すればよかったらしい。
- [CakePHP2 URLリライティング 「IIS7 (Windows ホスト) での URL 書き換え」](https://book.cakephp.org/2/ja/installation/url-rewriting.html)

apache用の.htaccessは /, /app, /app/webroot にあるので、IISでも同様に読み替えればよいのかとおもったが、/ 相当の場所のみの設定でOKだった。