Windows Server + PostgreSQL + WSFC 環境の構築

## はじめに

PostgreSQLというと、動作させるのはLinuxで、可用性の向上というとストリーミングレプリケーションが主流だと思います。
最近Windows ServerでPostgreSQLを使う機会があったので、WSFCによるHAクラスタを組んでみたメモを残しておきたいと思います。

※WSFC : Windows Server Failover Cluster



## 事前に準備するもの

個人的な検証なので、環境は自分のPCで仮想サーバを立てました。

- PCはWindows 10 (x64)
- OSはWindows Server 2019 Standard(もちろん無料試用版)
- 仮想化ソフトにVMWare Workstation 15 Pro (VMware Workstation Player、VitrualBoxでも良いよ)
- PostgreSQLはPostgreSQL V12.3-2。[ここから](https://www.postgresql.org/download/windows/)からダウンロードできます。
- PostgreSQL確認用クライアントソフトはHeidiSQL



## 環境構成

仮想サーバは3台作ります。
ADサーバ 1台、DBサーバ 2台です。

ADサーバはドメインサーバ(WSFC用)と共有ストレージ(iSCSIターゲットサーバ)、DBアクセスクライアント用に使います。

DBサーバにはPostgreSQLとWSFCをインストールして使います。
iSCSIイニシエータも設定します。

構成はこんな感じです。
![wsfc-pos_10-1_999.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102422/46587f2e-8715-a1f9-0e8e-f087572d674c.jpeg)


仮想マシンに割り当てるリソースや、IPアドレスなどの情報は次のようにしました。

##### 仮想マシンの情報

| サーバ名   | ホスト名 | vCPU | vMEM | vNIC | vDISK                     | IPアドレス      |
| ---------- | -------- | ---- | ---- | ---- | ------------------------- | --------------- |
| ADサーバ   | AD01     | 2個  | 4GB  | 1個  | OS用：60GB、iSCSI用：10GB | 192.168.246.200 |
| DBサーバ#1 | POSDB01  | 2個  | 4GB  | 1個  | OS用：60GB                | 192.168.246.101 |
| DBサーバ#2 | POSDB02  | 2個  | 4GB  | 1個  | OS用：60GB                | 192.168.246.102 |



##### ドメインの情報

| ドメイン名    |
| ------------- |
| dev.pos-d.com |



##### クラスタの情報

| クラスター名 | クラスター管理用の<br />IPアドレス | クライアント アクセス ポイント名 | クライアント アクセス ポイントの<br />IPアドレス |
| ------------ | ---------------------------------- | -------------------------------- | ------------------------------------------------ |
| pos123wsfc   | 192.168.246.151                    | postgresql-clsdb                 | 192.168.246.162                                  |



なお、<u>動かすこと</u>を目的としているので、ネットワークの冗長化だとか、クラスタ間のハートビートだとか、そういうものは行いません。
そのため、ネットワークのセグメントも1つだけです。作業もローカルのAdministratorやドメインのAdministratorで行います。
(ちゃんとした環境ではマネしないように)



## こんな感じで構築してくよ

ざっとこんな感じで進めます。

1.  ADサーバとDBサーバのインストールとドメイン参加。
2.  PostgreSQLのインストールと設定 - その1
3.  iSCSI周りの構築と設定。
4.  WSFCの構築と設定 - その1
5.  PostgreSQLのインストールと設定 - その2
6.  WSFCの構築と設定 - その2
7.  動作テスト



ポイントは、

- 5で行う、PostgreSQLのデータベースクラスタを共有ディスクに配置する
- 6で行う、データベースの起動・停止をWSFCで行うようにする

という所です。

でもやっていることは難しくないので、サクサクっといきましょう。



いざ構築！



## １．ADサーバとDBサーバのインストールとドメイン参加

1. ADサーバとDBサーバ 2台にWindowsをGUIありの標準インストールします。
   (VMware Workstation を使っている場合は、VMware Toolもインストールします)

   

2. IPアドレス、ホスト名を設定します。

   

3. 各サーバに役割と機能を追加します。

| サーバ名 | 役割                                                         | 機能                                |
| -------- | ------------------------------------------------------------ | ----------------------------------- |
| ADサーバ | 「Active Directory ドメインサービス」<br />「ファイル サービスと記憶域サービス」から「iSCSI ターゲット サーバー」 | -                                   |
| DBサーバ | -                                                            | 「フェールオーバー クラスタリング」 |




4.ADサーバをドメインコントローラーに昇格させます。

   サーバーマネージャの右上の旗のところに△のアイコンがつくのでそれをクリックします。

   「このサーバーをドメインコントローラに昇格する」というリンクをクリックして、ウィザードを起動します。
![wsfc-pos_01_016.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102422/2c2487bb-7d90-91cb-3477-4ff83ffdfd45.jpeg)

   変えるところだけ書きます。

```
- 配置構成
    配置操作:[新しいフォレストを追加する]
    ルートドメイン名:[dev.pos-d.com]
- ドメイン コントローラー オプション
    パスワード:[(好きなパスワード入れてください)]
- DNSオプション
    (そのまま[次へ])
- 追加オプション
    NetBIOS ドメイン名:[(表示されるままで良いです)]
- パス
    (そのまま[次へ])
- オプションの確認
    (そのまま[次へ])
- 前提条件のチェック
    (そのまま[インストール])
```

これでドメインサーバができました。


5.ディスクのフォーマット

   

##### ADサーバ

iSCSI用のディスクが未フォーマットのままだと思います。ここでフォーマットしておきます。

```
[スタート] - [Windows 管理ツール] から [コンピュータの管理]
```

を開きます。
![wsfc-pos_05_002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102422/e55d3d25-bac5-2ca6-20b8-e22cae04b270.jpeg)

[ディスクの管理]から、オフラインになっているディスクが出てくると思うので、これを

```
オンライン → ディスクの初期化 → 新しいシンプルボリュームの作成
```

を行います。

ここでドライブレターは、Eドライブにしておきます。



## ２．PostgreSQLのインストールと設定 - その1

##### DBサーバ#1 / DBサーバ#2

  PostgreSQLをインストールします。

  特に難しいことはありません。

```
- Installation Directory
    (デフォルトのままで良いです)
- Select Components
    (デフォルトのままで良いです。全部チェックされた状態。)
- Data Directory
    (デフォルトのままで良いです)
- Password
    (好きなパスワード入れてください)
- Port
    5432 (デフォルトのままで良いです)
- Advanced Options
    Locale:[Japanese, Japan]
```


  インストールが終わると、Stack Builderを実行しますか？と聞かれますが、実行不要なのでチェックを外して終了してしまいましょう。





## ３．iSCSI周りの構築と設定

##### DBサーバ#1 / DBサーバ#2

iSCSIイニシエータを起動します。

```
[スタート] - [Windows 管理ツール] から [iSCSI イニシエータ]
```

を開きます。
ここで、初回アクセスの場合は「Microsoft iSCSIサービスが実行されていません」と出ます。
リブートするたびに手動起動したくないので自動起動にしてしまいます。[はい]を選んでください。

「iSCSIイニシエーターのプロパティ」ダイアログが表示されますが、一旦ここまで。



##### ADサーバ

次にADサーバでiSCSIターゲットの設定を行います。
ここでDBサーバに見せる用の仮想ディスクを作成します。
仮想ディスクはデータベース格納用の仮想ディスクと、WSFC用のクォーラムディスク、の2つを作成します。
また、イニシエータからの接続許可設定を行います。

```
サーバーマネージャーを起動し、[ファイル サービスと記憶域サービス]から[iSCSI]
```

を選択します。
まだiSCSI仮想ディスクは作られていないと思うので、
画面中の[iSCSI仮想ディスクを作成するには、新しいiSCSI仮想ディスクウィザードを開始してください。]をクリックします。

以降、ウィザードに沿って作成していきます。

まずはデータベース格納用の仮想ディスクから。

```
- iSCSI 仮想ディスクの場所
    今回、iSCSI仮想ディスクはEドライブに作成するので、[ボリュームで選択]のところではEドライブを選択します。
    こうすると、Eドライブに E:\iSCSIVirtualDisk というフォルダができて、この配下に仮想ディスク用のファイルが出来上がります。
- iSCSI 仮想ディスク名
    好きな名前を入れます。ここに入れた名前が仮想ディスクファイルのファイル名(拡張子 .vhdx が自動で付く)にもなります。
    「dbdisk」と入れました。
- iSCSI 仮想ディスクのサイズ
    検証用なので小さくて大丈夫です。サイズは5GBにしました。
    [容量可変]を選択します。
- iSCSIターゲット
    [新しいiSCSIターゲット] を選択します。
- ターゲット名およびアクセス
    iSCSIターゲット名を入れます。
    「DB-iSCSITarget」と入れました。
- アクセスサーバーの指定
    作成するiSCSIターゲットへのアクセス許可を行うイニシエータを登録します。
    [追加]より登録していきます。
    [イニシエーター コンピュータをID で照会する] より、DBサーバを登録します。
    2台とも登録するのを忘れないでください。
- 認証サービスを有効にする
    検証用なので特に認証設定は行いません。
- 確認
    内容確認して、大丈夫なら[作成]します。
```

これで仮想ディスクとiSCSIターゲットが作成されました。

同じようにクォーラムディスク用のiSCSI仮想ディスクを作成します。

```
- iSCSI 仮想ディスクの場所
    [ボリュームで選択]のところでEドライブを選択します。
- iSCSI 仮想ディスク名
    好きな名前を入れます。
    「quorum」と入れました。
- iSCSI 仮想ディスクのサイズ
    クォーラムディスクは1GBで十分です。
    [容量可変]を選択します。
- iSCSIターゲット
    [既存のiSCSIターゲット] を選択します。
    こうすると、先ほど作成した dbdisk と一緒に公開することができます。
    アクセス許可するiSCSIイニシエータも同じになります。
- 確認
    内容確認して、大丈夫なら[作成]します。
```



##### DBサーバ#1 / DBサーバ#2

iSCSIイニシエーターへの接続許可は行いましたが、iSCSIターゲットの状態は未接続のままだと思います。
DBサーバに戻って、iSCSIイニシエーターから接続します。(サーバを行ったり来たりで忙しいですね！)

iSCSIイニシエーターの設定ですが、何てことはありません。

```
[クイック接続]でiSCSIターゲットサーバのIPアドレスを入れて[クイック接続]ボタンをクリック
```

とすれば接続できます。
これをDBサーバ2台ともで実施します。

これでiSCSI仮想ディスクに接続できました。



##### DBサーバ#1

次にこのディスクを通常のディスクのように初期化(フォーマット)して、使えるようにします。
DBサーバ#1から実施します。  

```
[スタート] - [Windows 管理ツール] から [コンピュータの管理]
```

を開きます。

[ディスクの管理]から、オフラインになっているディスクが2つ出てくると思うので、
![wsfc-pos_06-1_006.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102422/5bda62be-d869-f8e0-c194-f82e21f6e6d4.jpeg)

```
オンライン → ディスクの初期化 → 新しいシンプルボリュームの作成
```

を行います。

ここでデータベース用ディスク(サイズが5GBのもの)のドライブレターは、Eドライブにしておきます。
クォーラムディスク用(サイズが1GBのもの)はドライブレターは付けません。不要です。



##### DBサーバ#2

次にDBサーバ#2での作業です。
ディスクはDBサーバ#1でフォーマットまでしてしまっているので、オンラインにするだけです。

```
[スタート] - [Windows 管理ツール] から [コンピュータの管理]
```

を開きます。
[ディスクの管理]から、オフラインになっているディスクが2つ出てくると思うので、これをオンラインにします。



## ４．WSFCの構築と設定 - その1

##### DBサーバ#1  

```
[スタート] - [Windows 管理ツール] から [フォールオーバー クラスター マネージャー]
```

を開きます。

いきなりクラスターを作ってもいいのですが、[構成の検証]を試してみましょう。
[構成の検証]から、クラスターを作成するサーバを選択するだけです。
テストオプションは[全てのテストを実行する(推奨)]を選択します。

サクサクと構成の検証が進み、最後に検証結果が出ます。
致命的（[失敗]となっているもの）なものが無ければ大丈夫です。
[警告]はおそらく、パッチが最新状態ではないとか、ネットワークの冗長性が無いとかくらいだと思いますが、今回は検証優先なので気にしなくて大丈夫です。

このまま引き続き、クラスターの作成に移ります。
ここも難しいことはありません。

設定するのは、クラスター名とクラスター管理用のIPアドレスだけです。
今回は次のようにしました。

| クラスター名 | クラスター管理用のIPアドレス |
| ------------ | ---------------------------- |
| pos123wsfc   | 192.168.246.151              |

[確認]で[使用可能な記憶域をすべてクラスターに追加する]にチェックを入れておきます。
エラーなく作成されればOKです。



軽くテストしてみましょう。
フォールオーバー クラスター マネージャーから、

```
pos123wsfc.dev.pos-d.com
   - 記憶域
     - ディスク
```

と選んでいくと、クラスターの管理下に置かれたディスクが2つ表示されます。
![wsfc-pos_08-1_045.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102422/dc857a14-38ec-0fe7-8d84-6e35adb38a93.jpeg)

この2つがオンラインになっていることを確認します。

次に、所有者ノードが変更できるか試してみましょう。
画面からはDBサーバ#2が所有者となっていますね。
クラスターディスク2 を選んで、[使用可能な記憶域の移動]をクリックします。
すると 最適なノード 、ノード選択 が選べるので、ノードの選択を選び、DBサーバ#1 を選択して[OK]します。
![wsfc-pos_08-1_047.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102422/b5461b25-6347-fb11-07ee-7ee98e49386e.jpeg)

正常に所有者ノードがDBサーバ#1に切り替わればOKです。
![wsfc-pos_08-1_049.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102422/47e7210b-2e1e-6dff-b8c4-cdf5b6b58342.jpeg)


## ５．PostgreSQLのインストールと設定 - その2

次はPostgreSQLの設定変更です。(疲れましたね。そろそろお茶にしますか。( -ω-) _旦 )
ここではPostgreSQLインストールで同時に作られるデータベースクラスタを共有ディスクに移動させて、いよいよHAクラスタらしくしていきます。

##### DBサーバ#1

まずは移動に先だって、Windowsサービスで起動しているDBを止めます。

    [スタート] - [Windows 管理ツール] から [サービス]を開きます。

サービスの中に「postgresql-x64-12 - PostgreSQL Server 12」という名前のサービスがあるので、そのサービスのプロパティを開きます。
スタートアップの種類を「自動」から「無効」に変更して、サービスを[停止]させます。

停止したら、データベースクラスタを移動させます。
まず、Eドライブに E:\PostgreSQL-DB というディレクトリを作ります。

次に、データベースクラスタが配置されている C:\Program Files\PostgreSQL\12 まで移動し、data\ というディレクトリを[切り取り]して、
E:\PostgreSQL-DB というディレクトリの下に[貼り付け]します。
ここで注意するのは、[コピー]&[貼り付け]ではなく、[切り取り]&[貼り付け] ということ。
[コピー]だと、必要な権限が保持されないままの貼り付けになってしまうので、[切り取り]で移動させます。

移動させたデータベースクラスタをWindowsサービス登録します。
コマンドプロンプトから実行します。
サービス登録には、PostgreSQLに用意されている pg_ctl というコマンドを使います。
'"' も入力します。

```
"C:\Program Files\PostgreSQL\12\bin\pg_ctl.exe" register -D "E:\PostgreSQL-DB\data" -N "postgresql-clsdb" -S demand
```

コマンドの意味としては、
    -D でデータベークラスタの位置を指定。
    -N でWindows サービスに表示される名前を指定。
    -S でWindows サービスでの起動状態を指定。手動起動の"demand" を指定。
になります。

登録されたら、

```
[スタート] - [Windows 管理ツール] から [サービス]
```

を開いてみてください。
既に開いている場合は最新の状態に更新、でも良いです。

登録されているサービスの一覧に「postgresql-clsdb」があればOKです。

手動で起動・停止ができるか確認してみてください。



##### DBサーバ#2

まずは、Windowsサービスで起動しているDBを止めます。

    [スタート] - [Windows 管理ツール] から [サービス]を開きます。

サービスの中に「postgresql-x64-12 - PostgreSQL Server 12」という名前のサービスがあるので、そのサービスのプロパティを開きます。
スタートアップの種類を「自動」から「無効」に変更して、サービスを[停止]させます。

DBサーバ#1ではこの後にデータベースクラスタを移動させましたが、DBサーバ#2では共有ディスクにあるデータベースクラスタを参照するので移動はしません。

フォールオーバー クラスター マネージャーを開き、<u>データベース用ディスクの所有ノードをDBサーバ#2に移動させてください</u>。

その後、DBサーバ#2でデータベースクラスタをWindowsサービス登録します。
コマンドプロンプトから実行します。

```
"C:\Program Files\PostgreSQL\12\bin\pg_ctl.exe" register -D "E:\PostgreSQL-DB\data" -N "postgresql-clsdb" -S demand
```

登録されているサービスの一覧に、「postgresql-clsdb」があればOKです。

手動で起動・停止ができるか確認してみてください。

フォールオーバー クラスター マネージャーを開き、<u>データベース用ディスクの所有ノードをDBサーバ#1に移動させておいてください</u>。



##### DBサーバ#1

さて、次に、postgresql.confの設定を変更します。
E:\PostgreSQL-DB\data 配下にあります。

このファイルをメモ帳などで開き、restart_after_crash というパラメータを検索してください。
既定では、

```
#restart_after_crash = on
```

でコメントアウトされていますが(デフォルトは on )、

```
restart_after_crash = off
```

として、コメント"#" を外してください。

これは何のパラメータかというと、PostgreSQLのプロセスが何かしらの理由で突然死した場合、PostgreSQLはプロセスの再起動を試みます。
でも、WSFCでは監視しているプロセスが逝ってしまったら別ノードにフェールオーバーするので、プロセスの再起動処理は不要になります。
このパラメータをoffにすることで、無駄な再起動処理を抑止します。



## ６．WSFCの構築と設定 - その2

あと少しです。

WSFCでPostgreSQLを起動停止できるようにし、フェールオーバー／フェールバックできるようにします。

ここでは、役割を追加します。
WSFCで先ほど登録した「postgresql-clsdb」サービスを汎用サービスとして登録します。

##### DBサーバ#1

フォールオーバー クラスター マネージャーから、

```
pos123wsfc.dev.pos-d.com
    - 役割
```

で、[役割]を右クリックして、役割の構成を選びます。

![wsfc-pos_10-1_006](D:\My Works\PostgreSQL+WSFC\cap\upload\wsfc-pos_10-1_006.jpg)



高可用性ウィザードが開くので、順に設定していきます。

    - 役割の選択
        「汎用サービス」
    - サービスの選択
        「postgresql-clsdb」
    - クライアント アクセス ポイント
         名前 : 「postgresql-clsdb」
         IPアドレス:192.168.246.162
    - 記憶域の選択
         データベース格納用ディスク を選びます。
         ここではクラスター ディスク 2になります。
    - レジストリ設定のレプリケート
         特に設定しません
    - 確認
        内容確認して、大丈夫なら作成します。

作成が無事終わると、役割の一覧に作成した役割が表示されているはずです。



次は依存関係の設定です。
リソースがオンラインになる前にオンラインにする必要があるリソースを設定します。
これは、サービスが起動する条件として、共有ディスクが見えていること、IPアドレス(VIP)が振られていることが前提になるため、その設定を行います。

役割から「postgresql-clsdb」を選び、下のペインンから サーバー名 → 名前 と選択します。

![wsfc-pos_10-1_019.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102422/230a86ec-e4f4-18f6-8a91-a11c8feeee80.jpeg)



それからプロパティを開き、依存関係タブを選びます。
![wsfc-pos_10-1_021.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102422/f4dd47c6-7387-3fc8-d051-f08a257fa3c3.jpeg)

初期ではIPアドレスが登録されているので、ここに共有ディスクを追加します。
登録する順番としては、

```
1番目に、共有ディスク
2番目に、IPアドレス
```

となるようにしておきます。
1番上の行を選択し、[挿入]をクリックします。プルダウンから共有ディスクを選択します。
![wsfc-pos_10-1_023.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102422/77ff05b6-8bff-84df-42f1-ea1cd132de6c.jpeg)

WSFCの設定はここまでです。
ちゃんとフェールオーバー／フェールバックができるか確認してみます。

役割から「postgresql-clsdb」を選択し、右クリックして移動 → ノードの選択 を選択し、DBサーバ#2を選択します。
![wsfc-pos_10-1_026.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102422/fdbcd53d-03e7-8add-437a-46a2d805eb34.jpeg)

正しく設定されていれば、
    オフライン → 所有者ノードの切り替え(DBサーバ#2へ) → オンライン
と、状態が遷移していくはずです。

![wsfc-pos_10-1_027.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102422/3305fb4d-2cf2-9c85-9be9-227c9157e0f1.jpeg)

これでクラスタの構築は完了です。



## ７．動作テスト

クライアントソフトからアクセスの確認を行ってみます。



まずは、先にDBサーバで外部接続を許可する設定が必要です。クライアント認証ファイルに設定を追加します。

E:\PostgreSQL-DB\data\pg_hba.conf 

にアクセスするPCのセグメントからのアクセス許可設定を入れてください。

今回は、

```
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:

host    all             all             127.0.0.1/32            md5
host    all             all             192.168.246.0/24        md5　　----> この行を追加
```

ADサーバのセグメントである192.168.246.0/24からのアクセスを全て許可しました。



また、DBサーバ#1 / DBサーバ#2のWindows Defender ファイアウォールに、Port.5432(tcp)へのアクセス許可のルールを追加してください。（隠れてしまいましたが、ローカルポートに 5432 を指定してあります）
![wsfc-pos_10-1_047.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102422/f5f081cb-4f2d-91e1-3d22-aeeeb1c0ec2d.jpeg)

ここまで出来たら、定番のHeidiSQLというフリーソフトでアクセスしてみようと思います。

インストールはADサーバに行います。サクサクっとインストールしてしまってください。



設定は、次のようになります。
![wsfc-pos_10-1_900.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102422/6b12769e-33d2-4c71-d79f-bc04bd7b7e86.jpeg)

```
- ネットワーク種別
    「PostgreSQL (TCP/IP)」
- Library
    「libpq-12.dll」
-ホスト名
    DBサーバにアクセスするためのIPアドレスは、VIPの「192.168.246.162」を指定します。
- ユーザー
    デフォルトユーザの「postgres」です。
- パスワード
    PostgreSQLをインストールするときに設定したパスワードを入れてください。
- データベース
    「postgres」を選択します。ここで何も選択できない場合は、DBサーバにアクセスできていない可能性があります。Windows Defender ファイアウォール等の設定を見直してください。
```

[開く]をクリックして接続出来たら、フォールオーバー クラスター マネージャーでノードを移動したりしてみましょう。

移動のたびに再接続になりますが、どちらのノードに移動していてもアクセス可能になっていると思います。



もし[開く]をクリックしたときに
![wsfc-pos_10-1_901.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102422/0be0e69d-51d4-325d-cc5c-541d942bff5b.jpeg)

というダイアログが出てきた場合は、必要なバージョンのVC++ Runtimeがインストールされていない可能性があります。[Microsoftのサイトから](https://support.microsoft.com/ja-jp/help/4032938/update-for-visual-c-2013-redistributable-package)「Japanese - Japan」のパッケージをを入手してインストールしてください。



## 終わりに

WindowsでPostgreSQLを使用する場合のクラスタ構築についてでした。

Linuxで構築される機会の多いPostgreSQLですが、あえてWindowsで構築するケースもあるかもしれません。(あるかなぁ。。)

その時の参考になれば幸いです。