AWS EC2上にKnowlegde(OSS)をインストール

概要

オープンソース「knowledge」をEC2上にインストール。

 

構築環境

OS Amazon Linux 2 AMI (HVM), SSD Volume Type 64ビット(x86)
言語 Java 1.8
AP Tomcat 9.0.31
DB PostgreSQL12.2
ソフトウェア knowledge

※ EC2の「セキュリティグループ」→「インバウンド」でHTTP80番ポートが解放されていること。

 

Java

① Javaのインストールをします。以下のコマンドを実行します。

yum install -y java-1.8.0-openjdk-devel.x86_64

 

② Javaのバージョンを確認します。(1.8以上のバージョンであることを確認する)

java -version

 

Tomcat

① Tomcat用のユーザーを作成します。

useradd -s /sbin/nologin tomcat

 

② Tomcatをインストールします。wgetを使用しtomcatをダウンロードします。

wget http://ftp.riken.jp/net/apache/tomcat/tomcat-9/v9.0.31/bin/apache-tomcat-9.0.31.tar.gz

 

③ tar.gzを解凍します。

tar -xzf apache-tomcat-9.0.31.tar.gz

 

④ 解凍したディレクトリを /optに移動します。

mv apache-tomcat-9.0.31 /opt

 

⑤ chownを使用して所有者をtomcatへ変更します。

chown -R tomcat:tomcat /opt/apache-tomcat-9.0.31/

 

⑥ シンボリックリンクを作成します。

ln -s /opt/apache-tomcat-9.0.31/ /opt/tomcat

 

⑦ サービスの定義ファイルを作成します。

vim /etc/systemd/system/tomcat.service

 

・ 以下の内容を記入してください。

[Unit]
Description=Apache Tomcat 9
After=network.target

[Service]
User=tomcat
Group=tomcat
Type=oneshot
PIDFile=/opt/tomcat/tomcat.pid
RemainAfterExit=yes
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
ExecReStart=/opt/tomcat/bin/shutdown.sh;/opt/tomcat/bin/startup.sh

[Install]
WantedBy=multi-user.target

 

⑧ パーミッションの変更をします。

chmod 755 /etc/systemd/system/tomcat.service

 

⑨ Linuxを再起動後もTomcatが自動起動するように設定します。その後、tomcatを起動します。

systemctl enable tomcat
systemctl start tomcat

 

⑩ Tomcatのバージョンを確認します。

/opt/tomcat/bin/version.sh

# サーバーバージョンの確認
Server version: Apache Tomcat/9.0.31

 

PostgreSQL

KnowledgeはSQLサーバーを利用しない場合でも、簡易DBとして利用できますが、PostgreSQLに変更することを推奨しているので、インストールをします。

 

PostgreSQLのインストール

① PostgreSQLのダウンロード

rpm -ivh --nodeps https://download.postgresql.org/pub/repos/yum/12/redhat/rhel-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

 

② Amazon Linux2用のリポジトリに書き換え

sed -i "s/\$releasever/7/g" "/etc/yum.repos.d/pgdg-redhat-all.repo"

 

③ PostgreSQLのインストール

yum install -y postgresql12 postgresql12-server postgresql12-devel postgresql12-contrib

 

④ バージョンを確認します。

psql --version
psql (PostgreSQL) 12.2

 

PostgreSQLの初期設定

① 初期セットアップを行います。

PGSETUP_INITDB_OPTIONS='--encoding=UTF-8 --locale=C' sudo /usr/pgsql-12/bin/postgresql-12-setup initdb

# 以下表示されればOKです。
Initializing database ... OK

 

② PortgreSQLの起動、自動起動の設定

systemctl enable postgresql-12.service 
systemctl start postgresql-12.service

 

③ パスワード変更

sudo passwd postgres

# 以下パスワードを要求されるので、2回入力する
Changing password for user postgres.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

 

④ postgresql.confを編集します。

## 対象ディレクトリに移動
cd /var/lib/pgsql/12/data/

## バックアップファイルの作成
cp -p postgresql.conf postgresql.conf.bak.yyyymmdd

## 編集
vim postgresql.conf

## (変更前)
#listen_addresses = 'localhost'         # what IP address(es) to listen on;
#port = 5432                            # (change requires restart)

## (変更後)
listen_addresses = '*'                  # what IP address(es) to listen on;
port = 5432                             # (change requires restart)

 

⑤ pg_hba.confを編集します。

## 対象ディレクトリに移動
cd /var/lib/pgsql/12/data/

## バックアップファイルの作成
cp -p pg_hba.conf pg_hba.conf.bak.yyyymmdd

## 編集
vim pg_hba.conf

## (変更前)
# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident

## (変更後) 「***.***.***.***/32」にはEC2のグローバルIPを入れる
# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             ***.***.***.***/32      password

 

⑥ Knowledge用のDB作成

su - postgres
createdb knowledge

 

⑦ postgresユーザーのパスワード設定

psql
ALTER ROLE postgres with password '(任意のパスワード)';

 

⑧ 接続確認をします。

psql -h (EC2のグローバルIP) -U postgres -d knowledge
Password for user postgres: 
psql (12.2)
Type "help" for help.

knowledge=#

 

⑨ 再起動します。

systemctl restart postgresql-12.service

JDBCの設定

① Javaディレクトリに移動

cd /usr/share/java

 

② JDBCのダウンロード

wget https://jdbc.postgresql.org/download/postgresql-42.2.10.jar

 

③ profileファイルのバックアップ

cp -p /etc/profile /etc/profile.bak.yyyymmdd

 

④ profileの編集

vim /etc/profile

 

⑤ 一番下に以下を追記します。

# JDBC
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.amzn2.0.1.x86_64
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar:/usr/share/java/postgresql-42.1.10.jar
export CATALINA_HOME=/opt/tomcat

export KNOWLEDGE_HOME=/home/tomcat/.knowledge
export JAVA_OPTS="-Dfile.encoding=UTF-8 \
  -Dnet.sf.ehcache.skipUpdateCheck=true \
  -XX:+UseConcMarkSweepGC \
  -XX:+CMSClassUnloadingEnabled \
  -XX:+UseParNewGC \
  -XX:MaxPermSize=128m \
  -Xms512m -Xmx512m"

 

Knowledge

① tomcatのwebappsディレクトリに移動します。

cd /opt/tomcat/webapps/

 

② KnowledgeのGithubへアクセスし最新バージョンのwarファイルのURLをコピーします。

 

③ wgetコマンドでknowlegdeをダウンロードしインストールします。

wget https://github.com/support-project/knowledge/releases/download/v1.13.1/knowledge.war

 

URL

AWSのパブリックDNS名に「:8080/knowledge」を追加してアクセスします。
(例) http://ec2-***-***-***-***.ap-northeast-1.compute.amazonaws.com:8080/knowledge/