7
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Pleasanter with PostgreSQL を CentOS7 にインストールしてみる

Pleasanter with PostgreSQL を CentOS7 にインストールしてみる

心待ちにしてたPleasanter with PostgreSQL がリリースされました。
公式サイトのニュースリリース

早速、公式の手順を参考に、CentOS7 に PostgreSQL 対応の ビジネスアプリケーションプラットフォームPleasanter をインストールしてみます。

Pleasanterの説明はこちら

CentOS7 のインストール

ベース環境として"開発及びクリエイティブワークステーション"を選択してインストール
足りないものは、あとで追加します。

VirtualBox Guest Additons のインストール

この手順は私がVirtualBox上でテストしてるのでそのまま手順を残してます。
もちろん、VirtualBox以外の環境でしたらインストールする必要はありません。

依存パッケージの導入

開発ツールグループとkernel-header、kernel-develが必要になります。
インストールされていない場合は、インストールしましょう。

[user01@pleasanter ~]$ sudo yum groups install -y "Development Tools"
[user01@pleasanter ~]$ sudo yum install -y kernel-devel kernel-headers

VirtualBox Guest Additions のインストール

メニューからイメージをマウントして、適当にインストールしてください。

image.png

.NetCore3.1のインストール

.NetCore3.1のインストール

参考)CentOS 7 パッケージ マネージャー - .NET Core をインストールする

[user01@pleasanter ~]$ sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
[user01@pleasanter ~]$ sudo yum install -y dotnet-sdk-3.1

グラフィックサブシステム GDI+ のインストール

epelリポジトリからGDI+をインストールします。

[user01@pleasanter ~]$ sudo yum install -y epel-release
[user01@pleasanter ~]$ sudo yum install -y libgdiplus

PostgreSQLのインストール

CentOSの標準リポジトリのpostgresql-serverは、バージョン9.2.24とだいぶ古めだったので、
素直に公式リポジトリからインストールします。

参考)
リポジトリの確認:Accessing to the PostgreSQL RPM Repositories
古いけどインストール手順:Installing and configuring PostgreSQL 9.3 and 9.4 on RHEL 7

インストール

  • リポジトリの追加
  • インストール
[user01@pleasanter ~]$ sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
[user01@pleasanter ~]$ sudo yum install -y postgresql12-server postgresql12-contrib

DBの初期化

  • encodeing:UTF8
  • Locale:ja_JP.utf8
  • AUTH:md5
  • 初期化中に新規Superuserへのパスワード付与:実行する (後の手順で参考になるように、ここでは P@ssw0rd に設定しました)
[user01@pleasanter ~]$ sudo su - postgres -c '/usr/pgsql-12/bin/initdb -E UTF8 --locale=ja_JP.utf8 -A md5 -W'
データベースシステム内のファイルの所有者はユーザ"postgres"となります。
このユーザをサーバプロセスの所有者とする必要があります。

データベースクラスタはロケール"ja_JP.utf8"で初期化されます。
initdb: could not find suitable text search configuration for locale "ja_JP.utf8"
デフォルトのテキスト検索構成は simple に設定されます。

データベージのチェックサムは無効です。

新しいスーパユーザのパスワードを入力してください:
再入力してください:

ディレクトリ/var/lib/pgsql/12/dataの権限を設定しています ... ok
サブディレクトリを作成しています ... ok
動的共有メモリの実装を選択しています ... posix
デフォルトのmax_connectionsを選択しています ... 100
デフォルトの shared_buffers を選択しています ... 128MB
selecting default time zone ... Asia/Tokyo
設定ファイルを作成しています ... ok
ブートストラップスクリプトを実行しています ... ok
ブートストラップ後の初期化を実行しています ... ok
データをディスクに同期しています ... ok

成功しました。以下のようにしてデータベースサーバを起動することができます:

    /usr/pgsql-12/bin/pg_ctl -D /var/lib/pgsql/12/data -l ログファイル start

[user01@pleasanter ~]$

ログ出力設定の変更

debug用かな?
参考: PostgreSQL 12.0文書 - 19.8.3. 何をログに

log_line_prefix 行を変更します。

[user01@pleasanter ~]$ sudo vi /var/lib/pgsql/12/data/postgresql.conf

    510 #log_error_verbosity = default          # terse, default, or verbose messages 
    511 #log_hostname = off
    512 ###log_line_prefix = '%m [%p] '         # special values:
    513 log_line_prefix = '[%t]%u %d %p[%l] '           # special values:

[user01@pleasanter ~]$ 

PostgreSQLの起動

[user01@pleasanter ~]$ sudo systemctl --now enable postgresql-12

PostgreSQLへの接続確認

ユーザ postgres のパスワード: には、DB初期化時に設定したスーパーユーザパスワードを答えます。
接続後は、ユーザ一覧を表示するなど適当にDBの確認をしたら\qでPostgreSQLから抜けます。
OS上のユーザpostgresでの操作も終わりなのでexitで元々のユーザに戻ります。

[user01@pleasanter ~]$ sudo su - postgres
最終ログイン: 2020/05/29 () 17:36:32 JST日時 pts/0
-bash-4.2$ psql
ユーザ postgres のパスワード: 
psql (12.3)
"help"でヘルプを表示します。

postgres=# select * from pg_user;
 usename  | usesysid | usecreatedb | usesuper | userepl | usebypassrls |  passwd  | valuntil | useconfig 
----------+----------+-------------+----------+---------+--------------+----------+----------+-----------
 postgres |       10 | t           | t        | t       | t            | ******** |          | 
(1 行)

postgres=# exit
-bash-4.2$ exit
[user01@pleasanter ~]$ 

PostgreSQLへのリモートアクセス許可(省略可)

公式の手順にはありますが、PleasanterとPostgrSQLを同一サーバ上で動かす場合は設定の必要はありません。

Pleasanterのインストール

インストールパッケージの入手/配備

公式サイトのダウンロードページ .NET Core版のダウンロードリンクを入手した上で、wgetを使ってダウンロードしました。
ブラウザが使える場合ブラウザでダウンロードした方が楽かな。

[user01@pleasanter ~]$ wget --content-disposition https://pleasanter.org/download/6475/
[user01@pleasanter ~]$

[user01@pleasanter ~]$ sudo mkdir /web
[user01@pleasanter ~]$ sudo unzip -q -d /web Pleasanter.NetCore_1.1.0.0.zip

DBの構成

  • 設定ファイルへのスーパーユーザパスワードの設定(5行目のPWD=に設定します)
  • CodeDefinerの実行
[user01@pleasanter ~]$ sudo vi /web/pleasanter/Implem.Pleasanter/App_Data/Parameters/Rds.json
      1 {
      2     "Dbms": "PostgreSQL",
      3     "Provider": "Local",
      4     "TimeZoneInfo": "Asia/Tokyo",
      5     "SaConnectionString": "Server=localhost;Database=postgres;UID=postgres;PWD=P@ssw0rd",  ## この行を編集します。
      6     "OwnerConnectionString": "Server=localhost;Database=#ServiceName#;UID=#ServiceName#_Owner;PWD=SetAdminsPWD",
      7     "UserConnectionString": "Server=localhost;Database=#ServiceName#;UID=#ServiceName#_User;PWD=SetUsersPWD",
      8     "SqlCommandTimeOut": 600,
      9     "MinimumTime": 3,
     10     "DeadlockRetryCount": 4,
     11     "DeadlockRetryInterval": 1000
     12 }
[user01@pleasanter ~]$
[user01@pleasanter ~]$ cd /web/pleasanter/Implem.CodeDefiner
[user01@pleasanter Implem.CodeDefiner]$ sudo dotnet Implem.CodeDefiner.NetCore.dll _rds

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

<SUCCESS> Starter.ConfigureDatabase: Database configuration has been completed.
<SUCCESS> Starter.Main: All of the processes have been completed.
[user01@pleasanter Implem.CodeDefiner]$

PostgreSQL 全文検索モジュールインストール

[user01@pleasanter ~]$ sudo su - postgres
最終ログイン: 2020/06/11 () 6:24:36 JST日時 pts/1
-bash-4.2$ psql
ユーザ postgres のパスワード: 
psql (12.3)
"help"でヘルプを表示します。

postgres=# \c "Implem.Pleasanter";
データベース"Implem.Pleasanter"にユーザ"postgres"として接続しました。
Implem.Pleasanter=# CREATE EXTENSION pg_trgm;
CREATE EXTENSION
Implem.Pleasanter=# exit
-bash-4.2$ exit
[user01@pleasanter ~]$ 

Plesanter 起動確認

コマンドラインからの起動

この操作だと、フォアグラウンドで動作する為起動後プロンプトが返ってきません。
想定通りの動作です。

[user01@pleasanter Implem.CodeDefiner]$ cd ../Implem.Pleasanter/
[user01@pleasanter Implem.Pleasanter]$ pwd
/web/pleasanter/Implem.Pleasanter
[user01@pleasanter Implem.Pleasanter]$ sudo dotnet Implem.Pleasanter.NetCore.dll
warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
      No XML encryptor configured. Key {8f331b3c-7cfa-44c3-9534-e34c7ff5ec84} may be persisted to storage in unencrypted form.

curl コマンドでの応答確認

新しいターミナルを開いてcurlコマンドを使って応答の確認を行います。
CentOS上でFirefoxが利用できる場合、Firefoxでhttp://localhost:5000/にアクセスして確認する事もできます。

[user01@pleasanter ~]$ 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: Sat, 30 May 2020 15:50:06 GMT
< Server: Kestrel
< Content-Length: 0
< Location: http://localhost:5000/users/login?ReturnUrl=%2F
<
* Connection #0 to host localhost left intact
[user01@pleasanter ~]$

動作確認終了

curlコマンドまたはFirefoxで動作確認ができたら、Pleasanterを起動したターミナルでCtrl+Cを押してPleasanterを終了します。

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

サービススクリプトの作成/登録

systemdでサービスを管理する為、/etc/systemd/system/pleasanter.serviceを作成します。
作成後systemctl daemon-reloadを実行しsystemdに反映させます。

[user01@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 = /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
[user01@pleasanter ~]$ sudo systemctl daemon-reload
[user01@pleasanter ~]$ systemctl status pleasanter.service
● pleasanter.service - Pleasanter
   Loaded: loaded (/etc/systemd/system/pleasanter.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
[user01@pleasanter ~]$

Pleasanterサービスの起動

[user01@pleasanter ~]$ sudo systemctl --now enable pleasanter
Created symlink from /etc/systemd/system/multi-user.target.wants/pleasanter.service to /etc/systemd/system/pleasanter.service.
[user01@pleasanter ~]$ systemctl status pleasanter
● pleasanter.service - Pleasanter
   Loaded: loaded (/etc/systemd/system/pleasanter.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2020-05-31 01:08:07 JST; 13s ago
 Main PID: 8450 (dotnet)
    Tasks: 17
   CGroup: /system.slice/pleasanter.service
           └─8450 /usr/bin/dotnet Implem.Pleasanter.NetCore.dll

 5月 31 01:08:07 pleasanter systemd[1]: Started Pleasanter.
[user01@pleasanter ~]$

Firewall設定

https(443/tcp)へのアクセスを開放します。
なんとなく、httpsでのアクセスだけを許可します。

[user01@pleasanter ~]$ sudo firewall-cmd --permanent --zone=public --add-service=https
success
[user01@pleasanter ~]$ sudo firewall-cmd --reload
success
[user01@pleasanter ~]$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3
  sources:
  services: dhcpv6-client https ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

[user01@pleasanter ~]$

Nginxを使ったリバースプロキシの設定(https対応)

利用者の多いchromeでもテスト出来るように、chromeに対応したテスト用証明書を作成します。
※実際に運用する場合は正規の証明書を取得しましょう。

サーバ証明書の作成

mkcertを使ってテスト用証明書を作成します。
pleasanter.example.co.jp と入力している部分は、実際のホスト名に置き換えてください。
※ mkcert -install 実行時に、テスト用CA証明書がサーバ上の証明書ストアに配置されます。
この為、サーバ上のブラウザでアクセスすると、証明書の警告が出ませんがこのサーバ上だけでの事です。
本番運用で利用できる証明書ではありませんので注意しましょう。

[user01@pleasanter ~]$ sudo yum install -y nss-tools golang
[user01@pleasanter ~]$ git clone https://github.com/FiloSottile/mkcert && cd mkcert
[user01@pleasanter mkcert]$ go build -ldflags "-X main.Version=$(git describe --tags)"
[user01@pleasanter mkcert]$ ./mkcert -install
[user01@pleasanter mkcert]$ ./mkcert pleasanter.example.co.jp
Using the local CA at "/home/user01/.local/share/mkcert" ✨

Created a new certificate valid for the following names 📜
 - "pleasanter.example.co.jp"

The certificate is at "./pleasanter.example.co.jp.pem" and the key at "./pleasanter.example.co.jp-key.pem"[user01@pleasanter mkcert]$
[user01@pleasanter mkcert]$ sudo cp pleasanter.example.co.jp* /etc/pki/tls/certs/

DHE用ファイルの作成

[user01@pleasanter tls]$ sudo openssl dhparam -out /etc/pki/tls/dh2048.pem -outform PEM 2048

Nginxリポジトリ追加

Nginx公式サイトの手順を基にリポジトリを追加します。
Nginx : Installation instructions

[user01@pleasanter ~]$ sudo vi /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[user01@pleasanter ~]$

Nginxインストール

[user01@pleasanter ~]$ sudo yum install -y nginx

リバースプロキシの設定/起動

[user01@pleasanter ~]$ sudo vi /etc/nginx/conf.d/reverse-proxy.conf
server {
    listen        443 ssl;
    server_name   pleasanter.example.co.jp;
    keepalive_timeout 60;
    root /usr/share/nginx/html;
    server_tokens off;

    ssl_protocols  TLSv1.2;
    ssl_ciphers    HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_certificate  /etc/pki/tls/certs/pleasanter.example.co.jp.pem;
    ssl_certificate_key  /etc/pki/tls/certs/pleasanter.example.co.jp-key.pem;
    ssl_dhparam /etc/pki/tls/dh2048.pem;
    ssl_session_cache   shared:SSL:10m; ## 1MB = about 4000 sessions
    ssl_session_timeout 10m;

    location / {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_redirect http:// https://;

    proxy_pass http://localhost:5000;
    }
}
[user01@pleasanter ~]$ sudo systemctl enable --now nginx

SELinuxのアクセス許可

Nginxからpleasanterへの通信を許可するための設定を行います。
面倒だったら、SELinuxを無効にしても良いかしれません。

[user01@pleasanter ~]$ sudo setsebool -P httpd_can_network_connect 1 -P

初期ID/パスワード

設定項目 初期値 備考
管理アカウント administrator
初期パスワード pleasanter 初回ログイン時に変更を求められます

スクリーンショット 2020-06-06 21.00.16.png

リマインダー設定(動かせてない)

設定通りreboot後、実行されますがすぐに終了しちゃってます。
起動方法を変更した方がいいのかな、、、あとで考えよう。

ホスト名・TLS利用設定

9行目にプロトコルとホスト名を設定
10行目にTLSオプションを設定

[user01@pleasanter ~]$ sudo vi /web/pleasanter/Tools/Reminder.py

      8         urllib.request.urlopen(
      9             urllib.request.Request("https://pleasanter.exxample.co.jp/pleasanter/reminderschedules/remind?NoLog=1")
     10             , context=ssl.SSLContext(ssl.PROTOCOL_TLS))   #If you must use TLS, change 'None' to 'ssl.SSLContext(ssl.PROTOCOL_TLS)'.
     11         print(str(datetime.now()) + ": success")

[user01@pleasanter ~]$

Python3.6 のインストール

リマインダはpython3.6で書かれてるみたいです。

[user01@pleasanter ~]$ sudo yum install -y python36

cronの設定

[user01@pleasanter ~]$ sudo crontab -e
@reboot python3 /web/pleasanter/Tools/Reminder.py

[user01@pleasanter ~]$

メールサーバ設定(送れてない)

メールサーバだけ設定してみたけど、まだメールは送れてません。
出来たら記事を更新します。
Pleasanter Mail関連設定

[user01@pleasanter pleasanter]$ sudo vi /web/pleasanter/Implem.Pleasanter/App_Data/Parameters/Mail.json
{
    "SmtpHost": "localhost",
    "SmtpPort": 25,
    "SmtpUserName": null,
    "SmtpPassword": null,
    "SmtpEnableSsl": false,
    "FixedFrom": null,
    "AllowedFrom": null,
    "SupportFrom": "\"Pleasanter.org\" <support@pleasanter.org>",
    "InternalDomains": "",
    "AddressValidation": "\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]+\\b"
}
[user01@pleasanter pleasanter]$ sudo systemctl restart pleasanter

まだ出来てない事

  • Reminderが動かない。(手動では動くから、起動方法を考えよう。)
  • メール送信が出来ていない。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
7
Help us understand the problem. What are the problem?