Ubuntu20.04にプリザンターをインストール（.NetCore3.1/PostgreSQL版）

Ubuntuに.NETCore3.1版のプリザンターをインストールしようと思ったが、
公式ページにはRHEL/CentOSのインストール方法しか無かったため実際にやってみた。

結論から言うと、普通に動いた。

Pleasanter with PostgreSQLをRHEL8/CentOS8にインストールする
https://pleasanter.net/fs/publishes/1490231/edit


# .NET Core 3.1をインストール
```
$ wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
$ sudo dpkg -i packages-microsoft-prod.deb

$ sudo apt update
$ sudo apt install -y apt-transport-https
$ sudo apt update
$ sudo apt install -y dotnet-sdk-3.1

$ sudo apt install -y libgdiplus
```

## PostgreSQL12のインストール
```
$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo apt-add-repository 'deb http://apt.postgresql.org/pub/repos/apt focal-pgdg main'

$ sudo vi /etc/apt/sources.list

deb http://apt.postgresql.org/pub/repos/apt focal-pgdg main
↓
deb [arch=amd64] http://apt.postgresql.org/pub/repos/apt focal-pgdg main

$ sudo apt update
$ sudo apt install postgresql-12 pgadmin4 postgresql-contrib

# 成功しました。以下のようにしてデータベースサーバを起動することができます:
# 
#     pg_ctlcluster 12 main start
# 
# Ver Cluster Port Status Owner    Data directory              Log file
# 12  main    5432 down   postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log
```

### ログ出力設定

以下を設定します。

```
$ sudo vi /etc/postgresql/12/main/postgresql.conf

log_destination = 'stderr'
logging_collector = on
log_line_prefix = '[%t]%u %d %p[%l]'
```

### ユーザー設定＆DB作成

パスワードを設定後、PostgreSQLを起動

```
$ sudo passwd postgres

$ su - postgres
$ psql -U postgres

postgres=# alter role postgres with password 'パスワード';

# DB作成
postgres=# create database "Implem.Pleasanter";
```

### 全文検索用モジュール（pg_trgm）インストール

```
postgres=# \c "Implem.Pleasanter";
Implem.Pleasanter=# CREATE EXTENSION pg_trgm;
```

## プリザンターの導入

### Pleasanterをダウンロードして、解凍

```
$ unzip Pleasanter.NetCore_1.1.5.1.zip
```

### DBの構成
pleasanter/Implem.Pleasanter/App_Data/Parameters/Rds.json を以下のように設定します。

```
{
       "Dbms": "PostgreSQL",
       "Provider": "Local",
       "TimeZoneInfo": "Tokyo Standard Time",
       "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 pleasanter/Implem.CodeDefiner
$ dotnet Implem.CodeDefiner.NetCore.dll _rds
```

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

```
$ cd ../Implem.Pleasanter
$ dotnet Implem.Pleasanter.NetCore.dll
```

別のターミナルで "http://localhost:5000/" にアクセスし、正常なレスポンスが帰ってくることを確認します。

```
$ curl -v http://localhost:5000/

* About to connect() to localhost port 5000 (#0)
*   Trying ::1...
* Connected to localhost (::1) port 5000 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: localhost:5000
> Accept: */*
>
< HTTP/1.1 302 Found
< Date: Mon, 25 May 2020 15:13:08 GMT
< Server: Kestrel
< Content-Length: 0
< Location: http://localhost:5000/users/login?ReturnUrl=%2F
確認できたらCtrl+Cで終了します。
```


### Pleasanterサービス用スクリプトの作成

```
$ sudo vi /etc/systemd/system/pleasanter.service

[Unit]
Description = Pleasanter
Documentation =
Wants=network.target
After=network.target

[Service]
ExecStart = /usr/bin/dotnet Implem.Pleasanter.NetCore.dll
WorkingDirectory = /home/hogehoge/pleasanter/Implem.Pleasanter
Restart = always
RestartSec = 10
KillSignal=SIGINT
SyslogIdentifier=dotnet-pleasanter
User = root
Group = root
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy = multi-user.target
```

### サービスとして登録・起動

```
$ sudo systemctl daemon-reload
$ sudo systemctl enable pleasanter
$ sudo systemctl start pleasanter
```

## Nginx(Webサーバ)をインストール

```
$ sudo apt install nginx-extras
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
$ sudo addgroup ユーザー名 www-data
```

### リバースプロキシの設定

/etc/nginx/conf.d/pleasanter.conf を以下の内容で作成します。

```
server {
    listen  80;
    server_name   192.168.0.200;
    location / {
       proxy_pass         http://localhost:5000;
       proxy_http_version 1.1;
       proxy_set_header   Upgrade $http_upgrade;
       proxy_set_header   Connection keep-alive;
       proxy_set_header   Host $host;
       proxy_cache_bypass $http_upgrade;
       proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

$ sudo systemctl restart nginx
```


ここまでできたら、下記にアクセス。
http://192.168.0.200/

# 参考

Pleasanter with PostgreSQLをRHEL8/CentOS8にインストールする
https://pleasanter.net/fs/publishes/1490231/edit

Ubuntu 20.04 に .NET Core SDK 3.1 をインストールする
https://qiita.com/tabizou/items/d9af326ede9d35d03c68

Ubuntu 20.04 に Posgtgres12 をインストール後 C# + Npgsql でアクセスしてみる
https://qiita.com/tabizou/items/47f395d7ab3030dd1915

How To Install PostgreSQL on Ubuntu 20.04 [Quickstart]
https://www.digitalocean.com/community/tutorials/how-to-install-postgresql-on-ubuntu-20-04-quickstart

PostgreSQL 12 のインストール，データベース作成，テーブル定義（Ubuntu 上）
https://www.kkaneko.jp/tools/postgresinstall/postgreslinux.html