knowledgeをWindowsServerに構築してDBをPostgresqlに変更する
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 |
流れ
- KnowledgeをWindowsServerで使えるようにする
- Postgresqlをインストールする
- JDBC Driverを用意する
- DBを切り替える
Knowledgeの構築
Javaのインストール
Javaのサイトから最新版をダウンロードする。
執筆時の最新版は、Java 8 341
ダウンロードしたファイルを実行。(jre-8u341-windows-x64.exe)
デフォルトのままインストール
※C:\Program Files\Java\jre1.8.0_341 にインストールされる
Tomcatのインストール
Tomcatのサイトから最新版をダウンロード。
執筆時の最新版は10.0.23だったが、このバージョンだとKnowledgeが動かないっぽいので、9.0.65
をインストールする。
左側メニューの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
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、バージョンに応じたインストーラをダウンロード
今回は、「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アドレスに変更。
# 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 をダウンロード
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のチューニング
などが必要になってくると思われます。
参考
Discussion