Windowsにプリザンター.NET Core(PostgreSQL対応)版をインストールする

#はじめに
[プリザンターのGitHub](https://github.com/Implem/Implem.Pleasanter)で、[Windowsで.NET Core版のプリザンターを動かしてみたという書き込み](https://github.com/Implem/Implem.Pleasanter/issues/296)を見つけたので試してみました。
.NET Framework版はSQLServer Expressを使うため格納できるデータ量が10GBに制限されてしまいますが、.NET Core版はPostgreSQLを使うのでこの制限を回避できます。
.NET Core版はLinux系OS向けとなっていますが、Windowsで動くか試してみます。

###環境
Windows 10 64bit バージョン1809

###手順
[1. プリザンター（.NET Core版）のダウンロード](#1-プリザンターnet-core版のダウンロード)
[2. IISのセットアップ](#2-iisのセットアップ)
[3. PostgreSQLのインストール](#3-postgresqlのインストール)
[4. PostgreSQLのDB作成](#4-postgresqlのdb作成)
[5. .NET Coreのインストール](#5-net-coreのインストール)
[6. プリザンターのセットアップ](#6-プリザンターのセットアップ)
[7. プリザンターをIISに配置](#7-プリザンターをiisに配置)

#1. プリザンター（.NET Core版）のダウンロード
https://pleasanter.org/dlcenter からダウンロードして解凍します。
![0.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925662/5a08085f-9a32-785d-1ad7-19af87ec81bd.png)

* pleasanterフォルダ：プログラムです。適当な場所（`C:\inetpub\wwwroot\`や`D:\`）に置きます。
* PDFファイル：CentOS向けのセットアップ手順です。これを参考にWindowsでセットアップします。


#2. IISのセットアップ
プリザンターユーザーマニュアルの「[機能の有効化](https://pleasanter.net/fs/publishes/418488/edit)」に従いIISをセットアップします。

#3. PostgreSQLのインストール
https://www.postgresql.org/download/windows/ からインストーラをダウンロードします。
![1-pg-0.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925662/241899f5-8a5f-2cc6-6a11-80c9a4f4a134.png)

インストーラを実行します。
![1-pg-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925662/91c2bc0a-b8f2-43f0-5163-593addf03791.png)
（以下、変更を加えた箇所のみ記載します）

PostgreSQL管理アカウントのパスワードをセットします。
![1-pg-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925662/9a615a8e-5447-b91d-3fc8-cce84490ba69.png)

ロケールを`C`に変更します。
![postgresql-locale-c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925662/0b210950-bcf3-0659-cae9-f3b2a62b374d.png)

インストールできました。

#4. PostgreSQLのDB作成
プリザンター用DBを作成します。
まず、コマンドプロンプトでPostgreSQLにログインします。

```
> "C:\Program Files\PostgreSQL\13\bin\psql.exe" -U postgres
ユーザ postgres のパスワード: [PostgreSQL管理アカウントのパスワードを入力]
psql (13.1)
"help"でヘルプを表示します。

postgres=# _
```

続いて、DBを作成します。

```
postgres=# create database "Implem.Pleasanter";
```

`\l`でDBが作成されたことを確認します。
![postgresql-list.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925662/48fa41ce-2965-ae89-e7a0-4c8a25cf359a.png)


#5. .NET Coreのインストール
.NET Coreをインストールします。

* プリザンターのセットアップ手順書に合わせて、バージョン3.1をインストールしました。
* 「うまく動かない場合は32bitに固定する」という記述があったので32bit版にしました。

https://dotnet.microsoft.com/download/dotnet-core/3.1 から、SDKの32bit版とHosting Bundleをダウンロード、インストールしました。
![2-dotnetcore.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925662/62224b29-575e-ac10-55b4-1adf5d50659c.png)

#6. プリザンターのセットアップ
セットアップ手順書「3.2 DBの構成」を実施します。

`C:\inetpub\wwwroot\pleasanter\Implem.Pleasanter/App_Data/Parameters/Rds.json` を以下の様に設定します。（設定したパスワードに書き換えます）

```
{
    "Dbms": "PostgreSQL",
    "Provider": "Local",
    "TimeZoneInfo": "Asia/Tokyo",
    "SaConnectionString":"Server=localhost;Port=5432;Database=postgres;UID=postgres;PWD=<設定したパスワード>",
    "OwnerConnectionString":"Server=localhost;Port=5432;Database=#ServiceName#;UID=#ServiceName#_Owner;PWD=SetAdminsPWD","UserConnectionString":"Server=localhost;Port=5432;Database=#ServiceName#;UID=#ServiceName#_User;PWD=SetUsersPWD",
    "SqlCommandTimeOut": 600,
    "MinimumTime": 3,
    "DeadlockRetryCount": 4,
    "DeadlockRetryInterval": 1000
}
```

コマンドプロンプトでImplem.CodeDefinerフォルダーに移動し、CodeDefinerを実⾏します。

```
cd C:\inetpub\wwwroot\pleasanter\Implem.CodeDefiner
dotnet Implem.CodeDefiner.NetCore.dll _rds
```

以下のコマンドでPleasnterを実⾏し、起動確認を⾏います。

```
cd ..\Implem.Pleasanter
dotnet Implem.Pleasanter.NetCore.dll
```

Webブラウザで http://localhost:5000 を開いて確認します。
![localhost.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925662/260bb4fb-1e27-cce3-9132-6a118d849a7e.png)
動きました！！！
確認できたらCtrl+cで終了します。


#7. プリザンターをIISに配置

IISでプリザンターを動かすようにします。

IISマネージャを起動し、アプリケーションプールを追加します。
.Net CLR バージョンは「マネージドコードなし」を選択します。
![iis-1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925662/caa70335-7078-442f-37a3-8304bf7d6c51.png)

Default Web Siteにアプリケーションを追加します。

* エイリアス：pleasanter-netcore　※物理パスのフォルダ名と重複しないよう-netcoreを付けた
* アプリケーションプール：NetCoreAppPool
* 物理パス：C:\inetpub\wwwroot\pleasanter\Implem.Pleasanter
![iis-7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925662/0530cd57-f082-8e94-0bbc-8d627f9c18f1.png)

「アプリケーションの参照」で動作確認します。
![iis-9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925662/faa77303-467e-4313-dd65-7aadf2fabe1e.png)

エラーです。。。
![iis-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925662/3cce4ca1-a2c4-0cc6-2ded-49e8f83c2171.png)

イベントビューアの「Windows ログ ＞ Application」を確認すると、以下のようなメッセージがありました。
```Exception Info: System.UnauthorizedAccessException: Access to the path 'C:\inetpub\wwwroot\pleasanter\Implem.Pleasanter\App_Data\Temp\E37A3745F4014141B6A960A24E200A4E.xlsm' is denied.```
アクセス権限が原因みたいですね。

C:\inetpub\wwwroot\pleasanter\Implem.Pleasanterに適当な共有設定を追加します。
![iis-5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925662/6e58f986-d04a-3145-5514-baa8fbb6dfbb.png)

動きました！！！
![iis-8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/925662/4c8ae4a2-c500-b254-4066-7bed789f4b2c.png)

#まとめ
Windowsにプリザンター.NET Core(PostgreSQL対応)版をインストールして、ログインできることを確認しました。
.NET Framework版のデータを移行して、動作確認していきたいと思います。
（PostgreSQLの全文検索モジュールpg_trgmのインストール方法がわからず、飛ばしてしまいました。インストール方法をご存知の方は教えてもらえると嬉しいです）

#追記（2021/08/01）
プリザンター1.2.0.0（.NET Core統合版）を試してみました。
IISやPostgreSQLはセットアップ済みだったので、手順1, 5, 6, 7でいけました。

1. プリザンター（.NET Core版）のダウンロード ・・・ ver. 1.2をダウンロード
2. （実施済み）IISのセットアップ
3. （実施済み）PostgreSQLのインストール
4. （実施済み）PostgreSQLのDB作成
5. .NET Coreのインストール ・・・ .NET Core 5.0 Hosting Bundleをインストール
6. プリザンターのセットアップ ・・・ 同じ手順を実施
7. プリザンターをIISに配置 ・・・ 同じ手順を実施