📚

knowledgeをWindowsServerに構築してDBをPostgresqlに変更する

2022/08/23に公開

UbuntuやCentOSに構築したknowledgeのDBをPostgresqlに変更する情報はあるが、WindowsServerでの情報がなかったのでやってみた。

環境

soft version
WindowsServer2016 version:1607 build:14393.5291
Java Version8 Update341
Apache Tomcat 9.0.65
Knowledge 1.13.1
Postgresql 14.5.1
JDBC Driver v42.4.2

流れ

  1. KnowledgeをWindowsServerで使えるようにする
  2. Postgresqlをインストールする
  3. JDBC Driverを用意する
  4. DBを切り替える

Knowledgeの構築

Javaのインストール

Javaのサイトから最新版をダウンロードする。
執筆時の最新版は、Java 8 341

https://www.java.com/ja/

ダウンロードしたファイルを実行。(jre-8u341-windows-x64.exe)
デフォルトのままインストール
※C:\Program Files\Java\jre1.8.0_341 にインストールされる

Tomcatのインストール

Tomcatのサイトから最新版をダウンロード。
執筆時の最新版は10.0.23だったが、このバージョンだとKnowledgeが動かないっぽいので、9.0.65
をインストールする。

https://tomcat.apache.org/

左側メニューのDownloadからTomcat9を選択し、32-bit/64-bit Windows Service Installer をダウンロードする。

ダウンロードしたファイルを実行。(apache-tomcat-9.0.65.exe)

Port等はデフォルトのままでOK
Java Virtual Machineは↑でインストールしたJavaのインストールpathを指定
Tomcatのインストール場所は全角文字やスペースが入らないようなパスにする必要があるらしく、変更が必要。
今回は C:\knowledge にインストールした。

Run Apache Tomcat と Show Readme のチェックを外してFinish

Knowledgeのインストール

GitHubから最新版をダウンロード。
執筆時の最新版はv1.13.1

https://github.com/support-project/knowledge/releases/

Downloadからknowledge.warをダウンロード

ダウンロードしたknowledge.warを C:\knowledge\webapps にコピー

Apache TomcatのConfigure Tomcat を立ち上げて、Service を Start する

しばらくしてから、ブラウザを開き↓のURLを入力してアクセス

http://localhost:8080/

もしくは http://[インストールしたPCのIP]:8080/

↑の画面がでれば、Tomcatは動いてます。

続いて↓にアクセス

http://localhost:8080/knowledge/

もしくは http://[インストールしたPCのIP]:8080/knowledge/

↑画面が出ればknowledgeも成功。

画面が出なかった場合は、URLを見直す、Tomcatの再起動などしてみてください。
それでもアクセスできない場合は、c:\knowledge\logs にあるLogを確認してみてください。

組み込みDBからPostgreSQLに変更

PostgreSQLのインストール

↓からOS、バージョンに応じたインストーラをダウンロード
https://www.enterprisedb.com/downloads/postgres-postgresql-downloads

今回は、「14.5」の「Windows x86-64」をダウンロード

ダウンロードしたファイルを実行。(postgresql-14.5-1-windows-x64.exe)
基本的にデフォルトのままでOK
インストールpathは、お好みで c:\knowledge\PostgreSQL 等にしても良いかも。
postgresユーザのパスワードを設定
portもデフォルトの 5432 のままでOK
Localeは、Default locale でもいいが、ロケールを使わないことを示す C にした方が良いらしい

インストールが終わったら、pgAdmin4やSQL Shell(psql)を実行して、postgresqlに接続できるか確かめる。

設定ファイルの変更

↓のファイルをメモ帳等で開いて、アクセス権を修正
IPアドレスは、任意のIPアドレスに変更。

C

# TYPE  DATABASE     USER     ADDRESS        METHOD

# "local" is for Unix domain socket connections only
#local   all             all                                    scram-sha-256
local   all             all                                     trust
# IPv4 local connections:
#host    all             all             127.0.0.1/32            scram-sha-256
host    all             all             127.0.0.1/32            trust
host    all             all             192.168.0.0/16          password
# IPv6 local connections:
host    all             all             ::1/128                 scram-sha-256

※変更箇所のみ抜粋

ユーザの作成

pgAdminを使う場合



コマンドを使う場合

PostgreSQLがインストールされたフォルダの bin をカレントディレクトリにして、↓を実行

createuser -U postgres -d -l -P knowuser
  • 接続ユーザ名:postgres
  • データベース作成権限:-d
  • ログイン許可:-l
  • パスワード設定:-P
  • ユーザ名:knowuser

DBの作成

pgAdminを使う場合

コマンドを使う場合

PostgreSQLがインストールされたフォルダの bin をカレントディレクトリにして、↓を実行

createdb -U knowuser knowledge 
  • 接続ユーザ:knowuser
  • DB名:knowledge

DBにアクセスできるか確認

psql -U knowuser -d knowledge

JDBC Driverのインストール

JDBC Driverのダウンロード
執筆時の最新版である v42.4.2 JDBC 42 をダウンロード
https://jdbc.postgresql.org/download.html

Tomcatをインストールフォルダの c:\knowledge\lib にjarファイルを置く
または、環境変数 CLASSPATH に任意の場所に置いたjarを設定する

DBの切り替え

Tomcatの起動後、ブラウザからknowledgeを開く。
右上の人型アイコンをクリックして出る「サインイン」から管理者権限でログインする。
初期ユーザ/パスワードは、admin/admin123

「システム設定」-「データ管理」-「データベースの接続先変更」を開き、各設定を埋める。

URL:jdbc:postgresql://localhost:5432/knowledge
   ※ knowledgeはDB名
user: knowuser(DBにログインするユーザ)
password: xxxxxxxx(DBのパスワード)
schema: public
max connection:0
auto commit: false

DBの切り替え完了。

動作確認

knowledgeにアクセスして、記事を投稿してみる。
pgAdminを起動してテーブルのデータを確認してみると記事のデータが入っていることを確認

疑問

「データベースの接続先変更」の画面に、「org.postgresql.Driver(9.3-1103-jdbc41)」が自動で選択されており、変更が不可になっている。
"v42.4.2 JDBC 42"を設定したつもりだが、libフォルダに置いても、CLASSPATHを設定しても変わらなかった。
JDBC Driverのインストールをしなくても接続できたので不要かも。
ただバージョンが古いので、JavaやPostgreSQLのバージョンも古いものにした方が良いのだろうか??

追記

knowledge.warの中を見ると WEB-INF\lib 内に "postgresql-42.1.14jar"ファイルがある。
Tomcat内にも展開されているので、これが使われているのかと思ったが、knowledgeの画面に表示されているバージョンとも異なるので疑問が深まるばかり...

その他

本格運用するにあたり、

  • knowledge の各種設定
  • 定期的なバックアップ
  • Tomcatのチューニング
  • PostgreSQLのチューニング
    などが必要になってくると思われます。

参考

https://qiita.com/htakeda/items/b4247144cb51edeaedec
https://qiita.com/tom-sato/items/037b8f8cb4b326710f71

Discussion