インストーラでプリザンターを Ubuntu にインストールする
## 概要
本手順は[インストーラ](/ja/manual/getting-started-installer-pleasanter-azure)を使用してプリザンターの動作環境を構築する手順です。モジュールの配置やパラメータ設定を手動で行う今までの手順でもインストール可能です。手動インストールの手順は以下を参照ください。
[プリザンターを Ubuntu にインストールする](getting-started-pleasanter-ubuntu)
|対象|内容|
|---|---|
|OS|Ubuntu 22.04|
|DB|PostgreSQL 16、MySQL 8.4のいずれか|
|Webサーバ|nginx 1.20.1|
|Platform|.NET 8.0|
|Pleasanter|プリザンター 1.4|
## 注意事項
1. MySQLはver1.4.9.0以降で使用できます。ver1.4.9.0より前のプリザンターはMySQLに対応していません。
2. MySQLにおいてWebサーバとDBサーバを分離した構成にする場合は「[WebサーバとDBサーバを分離した構成でMySQLを利用できるように設定する](mysql-create-user-by-sql)」を参照ください。
## 制限事項
[インストーラ](/ja/manual/getting-started-installer-pleasanter-azure)を使用したインストールはVer1.4.0.0以降が対象です。Ver1.3.50.2以前をインストールする際は手動インストールの手順を参照ください。
[プリザンターを Ubuntu にインストールする](getting-started-pleasanter-ubuntu)
## 前提条件
1. OSのセットアップ方法については記載しません。予めOSはセットアップされていることとします。
1. 動作環境やスペックについての詳細はこちらをご確認ください。
[FAQ:プリザンターの動作環境や推奨スペックが知りたい](faq-recommended-specifications)
1. プリザンターを起動するユーザを予め決めておいてください。手順の中で記載している **<プリザンターを起動するユーザ>** はこのユーザを指します。
1. 本手順では.NETを /usr/local/bin にインストールする場合として説明します。同一環境に複数バージョンの.NETが必要などの理由で.NETを異なるディレクトリにインストールする場合は、CodeDefinerの実行時やPleasanterサービス用スクリプトの作成でExecStartに指定するディレクトリをインストール先に合わせて変更してください。
## 手順
構築手順は以下の通りです。
1. .NETのセットアップ
1. データベースのセットアップ:
PostgresSQL、MySQLのいずれかについて以下のセットアップを行う。
※下記は、設定の実施順序と一致しない場合があります。
1. DBのインストール
1. DB管理者権限ユーザの設定
1. DBのログ出力設定
1. DBのサービス化および自動起動の有効化
1. 外部からDBへのアクセスを許可する場合の設定
1. インストーラのインストール
1. プリザンターのセットアップ
1. インストーラの実行
1. プリザンターの起動確認
1. Pleasanterサービス用スクリプトの作成
1. サービスとして登録・サービスの起動
1. リバースプロキシ(nginx)のセットアップ
1. SELinuxの設定変更
1. nginxのインストール
1. リバースプロキシの設定
1. Http(80) へのアクセス許可
1. プリザンターの動作確認
## 1. .NETのセットアップ
以下コマンドを実行して、.NET をインストールします。
```
sudo wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh
sudo chmod +x ./dotnet-install.sh
sudo ./dotnet-install.sh -c 8.0 -i /usr/local/bin
dotnet --version
```
詳細につきましては下記公式ページの **スクリプトでのインストール** をご参照ください。
https://learn.microsoft.com/ja-jp/dotnet/core/install/linux-scripted-manual#scripted-install
また、dotnetコマンドを実行した際に特定のファイルに関するエラーが発生するケースがございます。その際は下記ページをご参照ください。
https://learn.microsoft.com/ja-jp/dotnet/core/install/linux-package-mixup?pivots=os-linux-ubuntu
## 2. データベースのセットアップ
以下の「PostgreSQLのセットアップ」または「MySQLのセットアップ」のいずれかを参照し、データベースをセットアップします。
### 1. PostgreSQLのセットアップ
PostgreSQLのセットアップ手順は以下の通りです。
<details>
<summary>(こちらをクリックすると詳細が開閉します) </summary>
#### 1. PostgreSQLのインストール
以下コマンドを実行してPostgreSQLをインストールします。
```
sudo apt install curl ca-certificates
sudo install -d /usr/share/postgresql-common/pgdg
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
sudo sh -c 'echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
sudo apt update
sudo apt -y install postgresql-16
```
#### 2. PostgreSQLユーザの設定
1. 以下コマンドを実行して、PostgreSQL管理用のユーザー"postgres"(OSのユーザー)にパスワードを設定します。
コマンド実行後にパスワード入力プロンプトが表示しますので、パスワードを入力します。
```
sudo passwd postgres
```
2. 以下コマンドを実行して、PostgreSQLにログインします。
```
sudo su - postgres
psql -U postgres
```
3. 以下コマンドを実行して、PostgreSQLの管理ユーザー "postgres" のパスワードを設定します。ここで設定したパスワードは手順3.2.で使用しますので忘れないように控えてください。
```
postgres=# alter role postgres with password '<新しいパスワード>';
```
#### 3. PostgreSQLのログ出力設定
/etc/postgresql/16/main/postgresql.confを開き、以下の設定を編集します。
```
log_destination = 'stderr'
logging_collector = on
log_line_prefix = '[%t]%u %d %p[%l]'
```
#### 4. PostgreSQLのサービス再起動、サービス化
以下コマンドを実行してPostgreSQLのサービス再起動およびサービス自動起動を有効化します。
```
sudo systemctl restart postgresql
sudo systemctl enable postgresql
```
#### 5. 外部からDBへのアクセスを許可する場合の設定
1. /etc/postgresql/16/main/postgresql.conf の以下の2行のコメントを解除して下記のように設定します。
```
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
port = 5432 # (change requires restart)
```
2. /etc/postgresql/16/main/pg_hba.conf に以下の行を追加します。Address欄にはアクセスを許可するIPアドレスの範囲を指定します。
```
# TYPE DATABASE USER ADDRESS METHOD
host all all 192.168.1.0/24 scram-sha-256
```
3. 設定後、以下コマンドを実行して、PostgreSQLのサービスを再起動します。
```
sudo systemctl restart postgresql
```
</details>
### 2. MySQLのセットアップ
MySQLのセットアップ手順は以下の通りです。
<details>
<summary>(こちらをクリックすると詳細が開閉します) </summary>
#### 1. MySQLのインストール
1. 以下コマンドを実行して、MySQLのDEBパッケージをダウンロードし、インストールします。
```
sudo wget https://dev.mysql.com/get/mysql-apt-config_0.8.32-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.32-1_all.deb
```
コマンドで指定したURLにつきましては下記公式リポジトリの指定と同一のURLです。
https://dev.mysql.com/downloads/repo/apt/
2. CUIの画面上で「パッケージの設定」画面が表示されます。以下のように「MySQL Server & Cluster (Currently selected: mysql-8.4-lts)」が表示されていることを確認してください。

3. キーボードを操作して「Ok」を選択し、Enterキーを押します。
4. 以下コマンドを実行して、MySQLのサーバをインストールします。
```
sudo apt-get update
sudo apt-get install mysql-server -y
```
5. CUIの画面上でMySQLのrootアカウントのパスワード設定を求められます。任意のパスワード文字列を入力後、キーボードを操作して〈了解〉を選択しEnterキーを押してください。ここで設定したパスワードは手順3.2.で使用しますので忘れないように控えてください。

6. パスワードの再入力を求められます。同一のパスワード文字列を入力後、キーボードを操作して〈了解〉を選択しEnterキーを押してください。

7. コマンドを実行し、サービスの状態を表示します。
```
systemctl status mysql.service
```
8. 以下のように「Active: active (running)」の文字が表示され、サービスが起動されていることを確認します。
```
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2024-10-08 19:00:00 JST; 1min 8s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
(以下省略)
```
#### 2. MySQLのサービス自動起動を有効化
1. 以下コマンドを実行してMySQLのサービス自動起動を有効化します。
```
sudo systemctl enable mysql
```
#### 3. MySQLユーザの設定
**MySQLのrootアカウントのパスワードを変更しない場合、以下の手順は実施不要です。**
MySQLのrootアカウントでは、上記「MySQLのインストール」の操作中に設定したパスワードを使用してください。OSまたはMySQLのバージョンによっては、インストール中にrootのパスワード設定を求められない場合があります。その場合、または、rootのパスワードを修正する場合は以下の手順を参照してください。
1. /etc/mysql/mysql.conf.d/mysqld.cnf の [mysqld] 配下に以下の設定を追記します。
```
[mysqld]
skip-grant-tables
```
設定ファイルのパスは、OSまたはMySQLのバージョンにより異なる場合があります。
2. 以下コマンドを実行して、MySQLのサービスを再起動します。
```
sudo systemctl restart mysql
```
3. 以下コマンドを実行して、MySQLにrootアカウント(パスワード指定なし)でログインします。
```
mysql -u root
```
4. 以下SQLを実行して、MySQLのrootアカウントのパスワードを設定します。
```
flush privileges;
alter user 'root'@'localhost' identified by '<MySQLのrootアカウントの新しいパスワード>';
```
5. 以下コマンドを実行して、MySQLからrootアカウントをログアウトします。
```
quit;
```
6. /etc/mysql/mysql.conf.d/mysqld.cnf の [mysqld] 配下に追記した記述を削除します。その際 [mysqld] は削除しないでください。
```
skip-grant-tables
```
7. 以下コマンドを実行して、MySQLのサービスを再起動します。
```
sudo systemctl restart mysql
```
8. 以下コマンドを実行して、MySQLにrootアカウントでログインできることを確認してください。
```
mysql -u root -p<MySQLのrootアカウントのパスワードを-pとの間に空白を入れずに記述>
```
9. 以下コマンドを実行して、MySQLからrootアカウントをログアウトします。
```
quit;
```
#### 4. MySQLのログ出力設定
**MySQLではデフォルトでエラーログの出力が有効です。デフォルトの出力先を変更しない場合、以下の手順は実施不要です。**
1. /etc/mysql/mysql.conf.d/mysqld.cnf の [mysqld] 配下にあるlog-errorに記載されているログファイルのパスを確認します。
設定ファイルのパスは、OSまたはMySQLのバージョンにより異なる場合があります。
```
[mysqld]
log-error=/var/log/mysql/error.log
```
2. エラーログの出力先を変更する場合は、mysqld.cnfファイルの編集後、以下コマンドを実行してMySQLのサービスを再起動します。
```
sudo systemctl restart mysql
```
#### 5. 外部からDBへのアクセスを許可する場合の設定
以下マニュアルの手順を実施し、MySQLのユーザを追加します。
・[WebサーバとDBサーバを分離した構成でMySQLを利用できるように設定する](mysql-create-user-by-sql)
WebサーバとDBサーバを分離しない場合は、実施不要です。
</details>
## 3. インストーラのインストール
以下コマンドを実行して、インストーラ をインストールします。
```
dotnet tool install -g Implem.PleasanterSetup
echo 'export PATH="$PATH:~/.dotnet/tools"' >> ~/.bashrc
echo 'export DOTNET_ROOT=/usr/local/bin' >> ~/.bashrc
echo 'export PATH=$PATH:$DOTNET_ROOT' >> ~/.bashrc
source ~/.bashrc
```
### ネットワーク環境に接続されていない場合は下記手順でインストールしてください。
<details>
<summary>(こちらをクリックすると詳細が開閉します) </summary>
1. [こちら](https://www.nuget.org/packages/Implem.PleasanterSetup/) からImplem.PleasanterSetupのNuget Galleryを開き、「Download package」より.nupkgファイルをダウンロードします。

1. 下記コマンドを実行して.nupkgファイルを配置する任意のフォルダを作成します。
※本手順では/dotnet-toolsを作成する場合として説明します。
```
sudo mkdir /dotnet-tools
```
1. 3.1でダウンロードした.nupkgファイルを/dotnet-toolsに配置します。
1. 下記コマンドを実行してインストーラをインストールします。
```
dotnet tool install -g --add-source /dotnet-tools Implem.PleasanterSetup
echo 'export PATH="$PATH:~/.dotnet/tools"' >> ~/.bashrc
echo 'export DOTNET_ROOT=/usr/local/bin' >> ~/.bashrc
echo 'export PATH=$PATH:$DOTNET_ROOT' >> ~/.bashrc
source ~/.bashrc
```
</details>
## 4. プリザンターのセットアップ
### 1. インストーラの実行
インストーラを使用することで、最新バージョン資源を自動でダウンロードし、入力した値を元にService.json、Rds.jsonの値を自動設定します。
#### PostgreSQL使用時の手順は以下の通りです。
<details>
<summary>(こちらをクリックすると詳細が開閉します) </summary>
1. 以下コマンドを実行して、インストーラを実行します。
```
pleasanter-setup
```
**ネットワーク環境に接続されていない場合は、下記手順を実施してください**
<details>
<summary>(こちらをクリックすると詳細が開閉します) </summary>
1. [ダウンロードセンター](https://pleasanter.org/dlcenter)から最新バージョンのプリザンターをダウンロードし、「/web/」に配置します。
1. 下記コマンドを実行します。
**/web/** ディレクトリ配下の構成が以下のようになっていることを確認してください。
/web/Pleasanter_1.4.x.x.zip
```
pleasanter-setup -r /web/Pleasanter_1.4.x.x.zip
```
</details>
2. プリザンターをインストールするディレクトリを入力します。
「/web/pleasanter」 にインストールする場合は空白で Enter キーを押下してください。

3. **<プリザンターを起動するユーザ>** を入力します。

4. サービス名を入力します。
「Implem.Pleasanter」の場合は空白で Enter キーを押下してください。

5. 使用する DBMS に対応する番号を入力します。
ここでは「2」を入力しEnterキーを押下してください。

6. 利用するポート番号を入力します。
DBMSのデフォルトのポート番号の場合は空白で Enter キーを押下してください。

7. 接続文字列の Server にセットする値を入力します。
「localhost」の場合は空白で Enter キーを押下してください。

8. SaConnectionString の UID にセットする値を入力します。
「postgres」の場合は空白で Enter キーを押下してください。

9. SaConnectionString の PWD にセットする値を入力します。
※パスワードはマスクされた状態で表示されます。

10. OwnerConnectionString の PWD にセットする値を入力します。
※パスワードはマスクされた状態で表示されます。

11. UserConnectionString の PWD にセットする値を入力します。
※パスワードはマスクされた状態で表示されます。

12. 「既定の言語」を入力します。
対応する言語の番号を入力してください。

13. 「既定のタイムゾーン」のタイムゾーンを入力します。
対応するタイムゾーンの番号を入力してください。
※「3」 を入力した場合は、使用するOS で利用できるタイムゾーンを入力してください。

14. サマリ画面が表示されます。
入力した値に間違いがない場合は、「Shall I install Pleasanter with this content? Please enter ‘y(yes)' or 'n(no)’. : 」 の後に **y** を入力しEnterキーで実行してください。
※パスワードはマスクされています。

15. 「Type "y" (yes) if the license is correct, otherwise type "n" (no).」 と表示されたら **y** を入力して実行してください。
下記ログが表示されたらセットアップは終了です。
```
<SUCCESS> Starter.ConfigureDatabase: Database configuration has been completed.
<SUCCESS> Starter.Main: All of the processes have been completed.
Setup is complete.
```
</details>
#### MySQL使用時の手順は以下の通りです。
<details>
<summary>(こちらをクリックすると詳細が開閉します) </summary>
1. 以下コマンドを実行して、インストーラを実行します。
```
pleasanter-setup
```
**ネットワーク環境に接続されていない場合は、下記手順を実施してください**
<details>
<summary>(こちらをクリックすると詳細が開閉します) </summary>
1. [ダウンロードセンター](https://pleasanter.org/dlcenter)から最新バージョンのプリザンターをダウンロードし、「/web/」に配置します。
1. 下記コマンドを実行します。
**/web/** ディレクトリ配下の構成が以下のようになっていることを確認してください。
/web/Pleasanter_1.4.x.x.zip
```
pleasanter-setup -r /web/Pleasanter_1.4.x.x.zip
```
</details>
2. プリザンターをインストールするディレクトリを入力します。
「/web/pleasanter」 にインストールする場合は空白で Enter キーを押下してください。

3. **<プリザンターを起動するユーザ>** を入力します。

4. サービス名を入力します。
「Implem.Pleasanter」の場合は空白で Enter キーを押下してください。

5. 使用する DBMS に対応する番号を入力します。
ここでは「3」を入力しEnterキーを押下してください。

6. 利用するポート番号を入力します。
DBMSのデフォルトのポート番号の場合は空白で Enter キーを押下してください。

7. 接続文字列の Server にセットする値を入力します。
「localhost」の場合は空白で Enter キーを押下してください。

8. SaConnectionString の UID にセットする値を入力します。
「root」の場合は空白で Enter キーを押下してください。

9. SaConnectionString の PWD にセットする値を入力します。
※パスワードはマスクされた状態で表示されます。

10. OwnerConnectionString の PWD にセットする値を入力します。
※パスワードはマスクされた状態で表示されます。

11. UserConnectionString の PWD にセットする値を入力します。
※パスワードはマスクされた状態で表示されます。

12. 「既定の言語」を入力します。
対応する言語の番号を入力してください。

13. 「既定のタイムゾーン」を入力します。
対応するタイムゾーンの番号を入力してください。
※「3」 を入力した場合は、使用するOS で利用できるタイムゾーンを入力してください。

14. サマリ画面が表示されます。
入力した値に間違いがない場合は、「Shall I install Pleasanter with this content? Please enter ‘y(yes)' or 'n(no)’. : 」 の後に **y** を入力しEnterキーで実行してください。
※パスワードはマスクされています。

15. 「Type "y" (yes) if the license is correct, otherwise type "n" (no).」 と表示されたら **y** を入力して実行してください。
下記ログが表示されたらセットアップは終了です。
```
<SUCCESS> Starter.ConfigureDatabase: Database configuration has been completed.
<SUCCESS> Starter.Main: All of the processes have been completed.
Setup is complete.
```
</details>
### 2. プリザンターの起動確認
1. 以下コマンドを実行して、あらかじめ決めたユーザでプリザンターを起動します。
```
cd /web/pleasanter/Implem.Pleasanter
sudo -u <プリザンターを起動するユーザ> /usr/local/bin/dotnet Implem.Pleasanter.dll
```
2. 起動中に別のターミナルで以下コマンドを実行し、プリザンターが起動していることを確認します。「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
```
### 3. Pleasanterサービス用スクリプトの作成
/etc/systemd/system/pleasanter.service を以下の内容で作成します。下記の **User** にはあらかじめ決めたプリザンターを起動するユーザを指定してください。
```
[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 = <プリザンターを起動するユーザ>
Group = root
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy = multi-user.target
```
### 4. サービスとして登録・サービスの起動
以下コマンドを実行してプリザンターのサービス起動およびサービス自動起動を有効化します。
```
sudo systemctl daemon-reload
sudo systemctl enable pleasanter
sudo systemctl start pleasanter
```
## 5. リバースプロキシ(nginx)のセットアップ
通常のwebサーバと同じ Port80 でアクセスできるようにリバースプロキシの設定を行います。
### 1. SELinuxの設定変更
以下コマンドを実行します。
```
getenforce
```
#### a. 「コマンド 'getenforce' が見つかりません。」、「Permissive」、「Disabled」のいずれかが表示された場合
「2. nginxのインストール」に進みます。
#### b. 「Enforcing」が表示された場合
以下コマンドを実行します。
```
sudo setsebool -P httpd_can_network_connect on
```
※SELinuxの上記ブール値を変更することで、該当のサーバにおいてスクリプトやモジュールによるネットワーク接続がすべて許可されます。
### 2. nginxのインストール
以下コマンドを実行して、nginxをインストールします。
```
sudo apt install -y nginx
sudo systemctl enable nginx
```
### 3. リバースプロキシの設定
1. /etc/nginx/conf.d/pleasanter.conf を以下の内容で作成します。server_name 行には実際にアクセスするサーバのホスト名またはIPアドレスを指定します。
```
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;
}
}
```
2. ファイルを作成後、以下コマンドを実行して、サービスを再起動します。
```
sudo systemctl restart nginx
```
### 3. Http(80) へのアクセス許可
以下コマンドを実行して、クライアントからWebサービスへアクセスさせるために Http(port:80)へのアクセス許可設定を行います。
```
sudo ufw allow 80/tcp
sudo ufw enable
sudo ufw status numbered
```
## 6. プリザンターの動作確認
1. プリザンターを起動後、プリザンターのログイン画面にて「ログインID: Administrator」、「初期パスワード: pleasanter」を入力し、「ログイン」ボタンをクリックします。

2. ログイン後に「Administrator」ユーザーのパスワード変更を求められるので、任意のパスワードを入力し、「変更」ボタンをクリックします。

### 正しくリダイレクトされない場合
nginxの設定が正しいか確認してください。記述内容の / の有無など細かな違いで動作が変わる場合があります。
### プリザンターの画面が開かない場合
上記までの手順において特にエラーも出ずに完了したにも関わらず、ブラウザでアクセスすると「Welcome to nginx!」といったページ(エラー表示ではない)が表示される場合、ブラウザのセキュリティ設定により、プリザンターのログイン画面に遷移できていない可能性があります。
お使いのブラウザのセキュリティ設定を確認してください。
## 対応バージョン
|対応バージョン|内容|
|:--|:--|
|1.4.9.0 以降|MySQLに対応|
|1.4.10.0 以降|MySQLのアクセス制御機能によりOwner、Userの接続が拒否される場合がある問題を解消<br>※併せて注意事項に「[WebサーバとDBサーバを分離した構成でMySQLを利用できるように設定する](mysql-create-user-by-sql)」へのリンクを追加|
## 関連情報
[FAQ:PostgreSQLが14以前のバージョンで、1.3.43.0以前のプリザンターをLinuxの環境へ導入したい](faq-postgresql-14-intall-pleasanter-for-linux)