プリザンターをUbuntuにインストールする
## 概要
本説明は、以下に示す環境にプリザンターの動作環境を構築するための手順を示したものです。
|対象|内容|
|---|---|
|OS|Ubuntu|
|DB|PostgreSQL|
|Webサーバ|Nginx|
|Platform|.NET 6.0|
|Pleasanter|プリザンター 1.3(1.3.〇.〇)|
## 前提条件
1. OSのセットアップ方法については記載しません。予めOSはセットアップされていることとします。
1. 動作環境やスペックについての詳細はこちらをご確認ください。
[FAQ:プリザンターの動作環境や推奨スペックが知りたい](/manual/faq-recommended-specifications)
## .NET6.0 のセットアップ
#### Microsoftパッケージリポジトリを有効にする
```
$ 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
```
#### .NET SDKのインストール
```
$ sudo apt install -y apt-transport-https
$ sudo apt update
$ sudo apt install -y dotnet-sdk-6.0
```
#### 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を開き、METHODの設定を以下のように変更します。
```
# 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を開き、以下の設定を編集します。
```
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
```
```
$ sudo su - postgres
$ psql -U postgres
```
PostgreSQLの管理ユーザー "postgres" のパスワードを設定
```
postgres=# alter role postgres with password '<new password>';
```
#### プリザンター用のデータベース作成
データベース "Implem.Pleasanter" を作成します。
```
postgres=# create database "Implem.Pleasanter";
```
以下のコマンドで作成したDBの確認を行います。
```
postgres=# \l
```
#### 全文検索用モジュール(pg_trgm)のインストール
テキストの全⽂検索に必要なモジュール(pg_trgm)をインストールします。
```
postgres=# \c "Implem.Pleasanter"
Implem.Pleasanter=# create extension pg_trgm;
```
#### 外部からDBへのアクセスを許可する場合の設定
/etc/postgresql/14/main/postgresql.conf の以下の2行のコメントを解除して下記のように設定します。
```
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
port = 5432 # (change requires restart)
```
/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
```
### プリザンターのセットアップ
#### アプリケーションの準備
[プリザンター 1.3](https://pleasanter.org/dlcenter)をダウンロードします。
ルートディレクトリ("/")に"/web"フォルダーを作成し、そこに"pleasanter" フォルダーを配置するものとして記述します。
/web/pleasanter/Implem.Pleasanter
/web/pleasanter/Implem.CodeDefiner
/web/pleasanter/Tools
#### データベースの構成
/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 を以下の内容で作成します。
```
[Unit]
Description = Pleasanter
Documentation =
Wants=network.target
After=network.target
[Service]
ExecStart = /usr/bin/dotnet Implem.Pleasanter.dll
WorkingDirectory = /web/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サーバと同じ Port80 でアクセスできるようにリバースプロキシの設定を行います。
#### NginXのインストール
```
$ sudo apt install -y nginx
$ sudo systemctl enable nginx
```
#### リバースプロキシの設定
/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
```
#### 正しくリダイレクトされない場合
NginXの設定が正しいか確認してください。記述内容の / の有無など細かな違いで動作が変わる場合があります。
#### プリザンターの画面が開かない場合
上記までの手順において特にエラーも出ずに完了したにも関わらず、ブラウザでアクセスすると「Welcome to nginx!」といったページ(エラー表示ではない)が表示される場合、ブラウザのセキュリティ設定により、プリザンターのログイン画面に遷移できていない可能性があります。
お使いのブラウザのセキュリティ設定を確認してください。
### その他設定
## 初期アカウント
ログインID "Administrator" が初期ユーザーとして作成されます。
初期ユーザーのパスワードは、既定では"pleasanter"(※)です。初回ログイン時にパスワード変更ダイアログが表示されますので、任意のパスワードを設定してください。このパスワードは、"/web/pleasanter/Implem.Pleasanter/App_Data/Parameters/Service.json" の "DefaultPassword" で指定可能です。
## プリザンター バージョン 1.3.7.0以降でリマインダー機能を有効化する手順
以降のService.jsonおよびBackgroundService.jsonのパラメータ設定値を変更してください。なお、パラメータ変更時はマニュアル「[パラメータ変更時の確認事項](/manual/parameter-edit)」をご確認ください。
#### Service.json
マニュアル「[パラメータ設定:Service.json](/manual/service-json)」を参照し、Service.jsonファイル内の設定を下記の設定値に変更してください。
|項目|設定値|説明|
|:--|:--|:--|
|AbsoluteUri|例)"http://pleasanter.example.local"|通知やリマインダーに記載されるURLの先頭部分を記入してください。(nullは使えません。)|
#### BackgroundService.json
マニュアル「[パラメータ設定:BackgroundService.json](/manual/background-service-json)」を参照し、BackgroundService.jsonファイル内の設定を下記の設定値に変更してください。
|項目|設定値|説明|
|:--|:--|:--|
|Reminder|true|リマインダー機能の有効化|
## プリザンター バージョン 1.3.6.0以前でリマインダー機能を有効化する手順
/web/pleasanter/Tools/Reminder.py を開き、"localhost" 部分を書き換え、クライアントからアクセス可能なURLに変更します。
```
urllib.request.Request("http://192.168.1.100/reminderschedules/remind?NoLog=1")
```
リマインダーを動作させるために必要な「Python3.6」をインストールします。
```
$ sudo apt install -y python3-pip
```
Reminder.py を cron に登録します。
```
$ sudo crontab -e
@reboot python3 /web/pleasanter/Tools/Reminder.py
```
#### データベースの移行
1. SQL ServerからPostgreSQLに移行する場合の手順は以下のマニュアルをご参照ください。
[プリザンターのDBをSQL ServerからPostgreSQLへ移行する手順](/manual/migrate-sql-server-to-postgresql)