プリザンターをRed Hat Enterprise Linuxにインストールする
## 概要
本説明は、以下に示す環境にプリザンターの動作環境を構築するための手順を示したものです。
|対象|内容|
|---|---|
|OS|Red Hat Enterprise Linux 8|
|DB|PostgreSQL|
|Webサーバ|Nginx|
|Platform|.NET 6.0|
|Pleasanter|プリザンター 1.3|
## 前提条件
1. OSのセットアップ方法については記載しません。予めOSはセットアップされていることとします。
1. 動作環境やスペックについての詳細はこちらをご確認ください。
[FAQ:プリザンターの動作環境や推奨スペックが知りたい](/manual/faq-recommended-specifications)
## .NET6.0 のインストール
### .NET SDKのインストール
下記ページよりBinariesをダウンロードして、下記コマンドを実行してください。
※dotnet-sdk-6.0.200-linux-x64.tar.gz部分はダウンロードするタイミングで異なります。また、ダウンロードしたファイルはrootユーザのホームディレクトリにあることを想定しております。
```
# cd
# mkdir -p $HOME/dotnet && tar zxf dotnet-sdk-6.0.200-linux-x64.tar.gz -C $HOME/dotnet
# echo 'export DOTNET_ROOT=$HOME/dotnet' >> .bash_profile
# echo 'export PATH=$PATH:$HOME/dotnet' >> .bash_profile
# sh .bash_profile
```
### GDI+のインストール
```
# dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
# dnf install -y libgdiplus
```
## PostgreSQLのセットアップ
#### リポジトリのインストール
```
# dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
```
#### PostgreSQLのインストール
```
# dnf module -y disable postgresql
# dnf install -y postgresql14-server postgresql14-contrib
```
### データベースの初期化
```
# /usr/pgsql-14/bin/postgresql-14-setup initdb
```
### サービス有効化
```
# systemctl enable postgresql-14
```
### 認証方式の設定
/var/lib/pgsql/14/data/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
```
### ログの出力設定
/var/lib/pgsql/14/data/postgresql.confを開き、以下を設定します。
```
log_destination = 'stderr'
logging_collector = on
log_line_prefix = '[%t]%u %d %p[%l]'
```
※ ログファイルは "/var/lib/pgsql/data/log" に保存されます。
### PostgreSQLのサービス再起動
```
# systemctl restart postgresql-14
```
### PostgreSQLユーザー設定
- PostgreSQL管理用のユーザー"postgres"(OSのユーザー)にパスワードを設定します。
```
# passwd postgres
```
- ユーザー"postgres"に切り替え、PostgreSQLへ接続します。
```
# 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)をインストールします。
データベース"Implem.Pleasanter"に接続し、pg_trgm をインストール
```
postgres=# \c "Implem.Pleasanter";
Implem.Preasanter=# create extension pg_trgm;
```
### 外部からDBへのアクセスを許可する場合の設定
- /var/lib/pgsql/14/data/postgresql.conf の以下の2行のコメントを解除して下記のように設定します。
```
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
port = 5432 # (change requires restart)
```
/var/lib/pgsql/14/data/pg_hba.conf に以下の行を追加します。Address欄にはアクセスを許可するIPアドレスの範囲を指定します。
```
# TYPE DATABASE USER ADDRESS METHOD
host all all 192.168.1.0/24 md5
```
設定後、PostgreSQLのサービスを再起動します。
```
# systemctl restart postgresql-14
```
## プリザンターの導入
### アプリケーションの準備
[プリザンター](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 を以下のように設定します。
```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 ../Implem.Pleasanter
# dotnet Implem.Pleasanter.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サービス用スクリプトの作成
/etc/systemd/system/pleasanter.service を以下の内容で作成します。
```
[Unit]
Description = Pleasanter
Documentation =
Wants=network.target
After=network.target
[Service]
ExecStart = /root/dotnet/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
```
#### サービスとして登録・サービスの起動
```
# systemctl daemon-reload
# systemctl enable pleasanter
# systemctl start pleasanter
```
#### SElinuxのモジュール追加
```
# ausearch -c 'dotnet' --raw | audit2allow -M my-dotnet
# semodule -i my-dotnet.pp
# ausearch -c '.NET ThreadPool' --raw | audit2allow -M my-NETThreadPool
# semodule -i my-NETThreadPool.pp
```
### リバースプロキシ(NginX)の設定
通常のwebサーバと同じ Port80 でアクセスできるようにリバースプロキシの設定を行います。
#### Nginxのインストール
次のコマンドでNginxをインストールします。
```
# dnf install -y nginx
# 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;
}
}
```
ファイルを作成後、NginXを再起動します。
```
# systemctl restart nginx
```
#### Http へのアクセス許可
クライアントからWebサービスへアクセスさせるため、 Http(port:80)へのアクセス許可設定を行います。
```
# firewall-cmd --permanent --zone=public --add-port=80/tcp
# firewall-cmd --reload
# firewall-cmd --list-all
```
SELinux のhttpアクセス許可をONにします。
```
# setsebool httpd_can_network_connect on -P
```
## その他設定
## 初期アカウント
ログイン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.11.100/reminderschedules/remind?NoLog=1")
```
リマインダーを動作させるために必要な「Python3.6」をインストールします。
```
# dnf install -y python36
```
Reminder.py を cron に登録します。
```
# crontab -e
@reboot python3 /web/pleasanter/Tools/Reminder.py
```
<div id="satori__creative_container">
<script id="-_-satori_creative-_-" src="//delivery.satr.jp/js/creative_set.js" data-key="050a1390a055b005"></script>
</div>