プリザンターをUbuntu22.04に入れてみた

# はじめに

今回はプリザンターのユーザーマニュアルをもとにさらに詳しく個人的に起きたエラーへの対処も記載しようと思います。

# プリザンター導入マニュアル

## プリザンター導入前に

### 環境構築

今回はVMWare環境でUbuntu22.04のイメージファイルを使ってOSを構築します。まずは設定後OSを起動します。

### インストール

キャプチャのようにインストール画面が表示されたので、Ubuntuをインストールを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/659914/00be2493-5c40-0a00-9459-96523f01cacb.png)
私の場合、そのあとは特に設定を変えることなく次へなどをクリックしていきます。最後にユーザーとパスワードを入力することでインストールが開始されます。インストールされるまで待機です。

### 画面起動

インストールがされたら再起動が促されたため、再起動を実施します。起動中にエンターキーを押せと指示されるため、エンターを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/659914/449e45be-1f1e-5a5d-34b3-d16f599c3a3e.png)

### 設定

設定から有線の歯車マークをクリックします。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/659914/c167882f-efad-b586-cee2-5e0ac28fffde.png)  
アドレス・ネットマスク・ゲートウェイ・DNSを設定して右上の適用をクリックします。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/659914/ea1b28bc-7986-444b-0534-7877099f39d7.png)

### SSHを使えるように

TeraTermから操作しようと思います。TeraTermではSSHを使って通信を行うのですが、UbuntuにはデフォルトでSSHはインストールされていません。そのため、下記コマンドでSSHをインストールしていきます。

```
sudo apt update
sudo apt install openssh-server
```

### vimコマンドを使えるように

vimコマンドもインストールされていないようですね・・・。下記コマンドでインストールしましょう。

```
sudo apt install vim
```

### curlコマンドを使えるように

curlコマンドもインストールが必要です。下記コマンドでインストールしましょう。

```
sudo apt install curl
```

## 環境

|対象|内容|
|---|---|
|OS|Ubuntu 22.04 LTS|
|DB|PostgreSQL 14.7|
|Webサーバ|Nginx 1.18.0|
|Platform|.NET 6.0.407|
|Pleasanter|プリザンター 1.3.35.1|

## .NET6.0 のセットアップ

#### .NETパッケージの削除

```
sudo apt remove 'dotnet*' 'aspnet*' 'netstandard*'
```

#### preferencesファイルの作成

```
sudo touch /etc/apt/preferences
```

下記コマンドでpreferencesを開いてください。

```
sudo vim /etc/apt/preferences
```

作成したファイルに下記内容を設定してください。  
vimで開いたファイルを編集する場合は「i」コマンドを押下し、挿入モードにしてください。  
「i」コマンドで挿入モードにした後、コマンドモードに戻す場合は「esc」キーを押下します。

```
Package: dotnet* aspnet* netstandard*
Pin: origin "packages.microsoft.com"
Pin-Priority: -10
```

vimで開いたファイルを保存して閉じる場合は「:wq」コマンドを押下します。

### .NET のインストール

#### スクリプトでのインストール

```
sudo wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh
sudo chmod +x ./dotnet-install.sh
sudo ./dotnet-install.sh -i /usr/local/bin
```

詳細につきましては下記公式ページの **スクリプトでのインストール** をご参照ください。  
<https://learn.microsoft.com/ja-jp/dotnet/core/install/linux-scripted-manual#scripted-install>

#### GDI+のインストール

```
sudo apt install -y libgdiplus
```

## PostgreSQLのセットアップ

#### リポジトリのインストール

```
sudo apt update
sudo apt -y install vim bash-completion
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" |sudo tee  /etc/apt/sources.list.d/pgdg.list
```

#### PostgreSQLのインストール

```
sudo apt update
sudo apt install -y postgresql-14 postgresql-client-14
```

#### PostgreSQLの認証方式の設定

/etc/postgresql/14/main/pg_hba.confを開ます。

```
sudo vim /etc/postgresql/14/main/pg_hba.conf
```

METHODの設定を以下のように変更します。「shift + G」でファイルの最終行に飛びます。

```
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5
```

#### PostgreSQLのログ出力設定

/etc/postgresql/14/main/postgresql.confを開きます。

```
sudo vim /etc/postgresql/14/main/postgresql.conf
```

以下の設定を編集します。「/ + 検索文字列」でファイル内を検索できます。ヒットした箇所で作業したい場合、エンターキーを押下します。

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

#### PostgreSQLのサービス再起動、サービス化

```
sudo systemctl restart postgresql
sudo systemctl enable postgresql
```

#### PostgreSQLユーザの設定

PostgreSQL管理用のユーザー"postgres"(OSのユーザー)にパスワードを設定します。

```
sudo passwd postgres
```

上記コマンド入力後パスワードの入力を促されます。

```
新しい パスワード:<新しいパスワード>
新しい パスワードを再入力してください:<新しいパスワード>
passwd: パスワードは正しく更新されました
```

ユーザー"postgres"にユーザーを切り替えます。

```
sudo su - postgres
psql -U postgres
```

PostgreSQLの管理ユーザー "postgres" のパスワードを設定します。「new password」に任意のパスワードを入力してください。コマンドを入力するときは「''」も含めてください。また、「;」も含めてください。

```
postgres=# alter role postgres with password 'new password';
```

下記のように表示されます。

```
ALTER ROLE
```

#### プリザンター用のデータベース作成

データベース "Implem.Pleasanter" を作成します。

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

以下のコマンドで作成したDBの確認を行います。

```
postgres=# \l
```

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

テキストの全⽂検索に必要なモジュール（pg_trgm）をインストールします。
下記コマンドでImplem.Pleasanterにスイッチします。

```
postgres=# \c "Implem.Pleasanter"
```

下記のように表示されます。

```
データベース"Implem.Pleasanter"にユーザー"postgres"として接続しました。
```

下記コマンドでインストールします。

```
Implem.Pleasanter=# create extension pg_trgm;
```

#### ログアウト

下記コマンドでログアウトしてください。

```
Implem.Pleasanter=# exit
$ exit
```

下記のように表示されます。

```
ログアウト
```

#### 外部からDBへのアクセスを許可する場合の設定

/etc/postgresql/14/main/postgresql.conf の以下の2行のコメントを解除して下記のように設定します。  

```
sudo vim /etc/postgresql/14/main/postgresql.conf
```

```
listen_addresses = '*'
port = 5432
```

/etc/postgresql/14/main/pg_hba.conf を開きます。  

```
sudo vim /etc/postgresql/14/main/pg_hba.conf
```

下記内容を追加します。Address欄にはアクセスを許可するIPアドレスの範囲を指定します。

```
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             all             192.168.1.0/24          md5
```

設定後、PostgreSQLのサービスを再起動します。

```
systemctl restart postgresql
```

コマンド入力後、パスワードの入力を促されますので、入力してください。

### プリザンターのセットアップ

#### アプリケーションの準備

下記コマンドでzipファイルをダウンロードします。[プリザンター 1.3](https://pleasanter.org/dlcenter)をダウンロードします。ダウンロードボタンをクリックし、「Latest」の「Pleasanter~.zip」ファイルにマウスを当て、右クリックでリンクをコピーします。下記コマンドのリンクURLにコピーしたリンクを貼り付けます。ダウンロードしたファイルは「/home/implem」というフォルダに格納されました。

```
wget リンクURL
```

ダウンロードしたzipファイルを下記コマンドで解凍します。

```
unzip ダウンロードしたファイル名
```

ルートディレクトリ（"/"）に"/web"フォルダーを作成します。

```
sudo mkdir /web
```

/WEBに先ほど解凍した際にできたpleasanterフォルダを移動します。  

```
sudo mv /home/implem/pleasanter /web/pleasanter
```

#### データベースの構成

/web/pleasanter/Implem.Pleasanter/App_Data/Parameters/Rds.json を開来ます。

```
sudo vim /web/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
}
```

#### CodeDefinerの実行

```
cd /web/pleasanter/Implem.CodeDefiner
dotnet Implem.CodeDefiner.dll _rds
```

#### Pleasnterの起動確認

```
cd /web/pleasanter/Implem.Pleasanter
dotnet Implem.Pleasanter.dll
```

別のターミナルで以下のコマンドを実行し、プリザンターが起動していることを確認します。「Ctrl+C」で終了します。

```
$ curl -v http://localhost:5000/
*   Trying 127.0.0.1:5000...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 5000 (#0)
> GET / HTTP/1.1
> Host: localhost:5000
> User-Agent: curl/7.68.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 302 Found
< Date: Tue, 23 Feb 2021 09:04:33 GMT
< Server: Kestrel
< Content-Length: 0
< Location: http://localhost:5000/users/login?ReturnUrl=%2F
< X-Frame-Options: SAMEORIGIN
< X-Xss-Protection: 1; mode=block
< X-Content-Type-Options: nosniff
< 
* Connection #0 to host localhost left intact

```

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

/etc/systemd/system/pleasanter.service を開きます。

```
sudo vim /etc/systemd/system/pleasanter.service
```

下記内容を転記し、「loginUser」はログインユーザーを指定してください。

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

[Service]
ExecStart = /usr/local/bin/dotnet Implem.Pleasanter.dll
WorkingDirectory = /web/pleasanter/Implem.Pleasanter
Restart = always
RestartSec = 10
KillSignal=SIGINT
SyslogIdentifier=dotnet-pleasanter
User = loginUser
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サーバと同じ Port80 でアクセスできるようにリバースプロキシの設定を行います。  

#### NginXのインストール

```
sudo apt install -y nginx
sudo systemctl enable nginx
```

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

/etc/nginx/conf.d/pleasanter.conf を開きます。

```
sudo vim /etc/nginx/conf.d/pleasanter.conf
```

server_name 行には実際アクセスする際のホスト名を指定して作成します。

```
server {
    listen  80;
    server_name   192.168.1.100;
    client_max_body_size 100M;
    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(80) へのアクセス許可

クライアントからWebサービスへアクセスさせるため、 Http（port:80）へのアクセス許可設定を行います。  

```
sudo ufw allow 80/tcp
sudo ufw enable
sudo ufw status numbered
```

# 接続を試みる

VM環境・自端末からプリザンターのログイン画面にアクセスすることができました。「localhost」では接続できませんでしたので、IPアドレスを指定したらアクセスできました。「localhost」でアクセスできない原因は教えていただいたのですが、忘れてしまいました・・・うっすらと残っている記憶ですが、「再帰的に読み込まれるスクリプトに80番ポートでアクセスしたものはnginxに遷移するというような処理があるから」というような内容だったかと・・・わかる方はコメントください！

# さいごに

上記の手順で接続を確認できました。OSの立ち上げからやったので上記以外の設定などは一切していません。そのため、上記でアクセスできないなどエラーが起きた場合はお手持ちの環境の設定を確かめてください。今後の環境構築に役立てていこうと思います。