🔖

Knowledegeを利用して情報管理

2022/10/29に公開約5,400字

Knowledgeとは

KnowledgeとはOSSの情報共有ツールになります。
Qiitaと機能はよく似ていおり、QiitaがPublic版であれば、Knowledgeはプライベート用といったところでしょうか。
機能としては以下の様な機能があります。

・投稿(タグ付、ファイル添付可能)
・投稿はMarkdown形式
・情報公開の範囲を設定可能
・検索がしやすい
・他のアプリケーションと連動しやすい(Webhhok機能がある)

回し者ではないですが、やる前にどんなことができるか確認してみたい人は、
こちらのリンクよりデモサイトにて、操作することができるので確認してみて下さい。
※ユーザーIDとパスワードはこちらの下の方に書かれています。

Knowledge構成

インストールするためにはApacheとTomcatで動作するため導入前のインストールと、
Postgresqlを使って利用します。
今回利用した環境はAWSの環境にて実施し、フロントはEC2、PostgresqlはRDSで動かしています。

EC2の設定-tomcatインストール

JDKをインストールします。Tomcat8を今回はインストールします。

# yum -y install java-1.8.0-openjdk-devel

javaのファイルパスを通します。

echo "export JAVA_HOME=$(readlink -e $(which java)|sed 's:/bin/java::')" >  /etc/profile.d/java.sh
echo "PATH=¥$PATH:¥$JAVA_HOME/bin" >> /etc/profile.d/java.sh
source /etc/profile.d/java.sh

tomcatを起動するユーザー作成します。

# useradd -s /sbin/nologin tomcat

tomcatダウンロード&展開します。

# mkdir -p /usr/local/src/tomcat
# cd /usr/local/src/tomcat
# curl -OL http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/tomcat/tomcat-8/v8.5.57/bin/apache-tomcat-8.5.57.tar.gz
# tar zxvf apache-tomcat-8.5.57.tar.gz
# mv apache-tomcat-8.5.57.tar.gz /opt/
# chown -R tomcat. /opt/apache-tomcat-8.5.57
# ln -s /opt/apache-tomcat-8.5.43 /opt/tomcat
# echo 'export CATALINA_HOME=/opt/tomcat'  >  /etc/profile.d/tomcat.sh
# source /etc/profile.d/tomcat.sh

tomcatのサービス登録をします。

# vi /etc/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat 8
After=syslog.target 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

tomcatサービスに権限を与えて起動できるようにし、起動させます。

# chmod 755 /etc/systemd/system/tomcat.service
# systemctl start tomcat

TOPページにアクセスできることを確認します。

# curl http://localhost:8080
# curl http://localhost:8080 -I
※念のため応答コード確認

EC2の設定-Apacheインストール

Tomcatを連携するためにApacheをインストールします。

# yum install httpd mod_ssl

以下モジュールを有効にします。(最終行に追記します)

# vi /etc/httpd/conf.modules.d/00-proxy.conf
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

EC2の設定-ApacheとTomcatの連携設定

今回は全リクエストをTomcatで処理するので、ajp通信の設定は以下とします。

# vi /etc/httpd/conf.d/proxy-ajp.conf
ProxyPass / ajp://localhost:8009/

最後にTomcatの設定を実施します。

# vi /opt/apache-tomcat-8.5.57/conf/server.xml

※8080ポートアクセスの不許可
    <!--
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    -->

※8009ポートからのアクセス許可
    <Connector protocol="AJP/1.3"
               address="localhost"
               port="8009"
               secretRequired="false"
               redirectPort="8443" />

設定が全て完了したら、Tomcat→Apacheの順で再起動して、
先程8080ポートでアクセスした時と同様にアクセスできることを確認し完了となります。

# systemctl restart tomcat
# systemctl restart httpd
# curl http://localhost
# curl http://localhost -I
※念のため応答コード確認

EC2の設定-knowledgeのインストール

tomcatをインストールしたディレクトに移動します。
私の場合には/opt/tomcat/webappsとなります。

# cd /opt/tomcat/webapps
# pwd
/opt/tomcat/webapps

Knowledgeファイルをダダウンロードします。(最新版は2018年7月22日でそこから更新が停止していますね。。。)

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

TomcatとApacheを再起動します。

# systemctl stop httpd
# systemctl stop tomcat
# systemctl start tomcat
# systemctl start httpd

URLにアクセスして表示を確認します。

http://サーバIPアドレス/knowledge

ログインIDとパスワードはadmin/admin123となっていますので、ログインできることを確認して下さい。
システム設定でログインしないと投稿が見れない設定などあるので、一通り設定内容を確認することをお勧めします。

補足

①DBとして組み込みデータベースの(H2Database)を使っているので、PostgreSQLに切り替えた方がよいと思います。
私はAWS環境に構築していたのでDBはRDSで起動してDBの切り替えを行っています。
公式マニュアルに手順があるので、こちらを参考に実施してみて下さい。

②Knowledgeは新規投稿があった際にメール通知やWebhookで通知ができます。
Webhookは受け先を作れば簡単に連携(例えばSlackなど)できます。
メールとなるとPostfixになりますが、EC2上でPostfixなどは動かしたくないです。
そのためAWS SESを利用してSMTPサーバを準備しました。流れは以下の通りです。

  1. Simple Mail Transfer Protocol (SMTP) settingsでIAMを作成
    SMTPユーザ名とパスワードが表示されるのでCSVなどをダウンロードするなりメモしましょう。

  2. Verified identitiesで送信に利用するメールアドレスを登録して認証実施

  3. EC2にcyrus-saslをインストールして、Postfixの設定(/etc/postfix/main.cf)に以下追記
    smtp_tls_security_level = encrypt
    smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
    smtp_sasl_security_options = noanonymous
    relayhost = [email-smtp.ap-northeast-1.amazonaws.com]:587
    smtp_sasl_auth_enable = yes
    smtp_use_tls = yes
    smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt

  4. /etc/postfix/sasl_passwdに、SMTPユーザ名とパスワードを記載
    [email-smtp.ap-northeast-1.amazonaws.com]:587 SMTPユーザ名:SMTPパスワード

  5. hashmapファイルを作成

# postmap hash:/etc/postfix/sasl_passwd
# chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
  1. CA情報の場所をPostfixが認識できるようにする
# postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt'
  1. postfixを再起動
# postfix reload
  1. Sandboxという制限がかけられているので制限緩和の申請を実施
    制限かけられているとFromやToは認証済みのものでないと指定できないのでとても困ります。また当たり前ですが申請する際には理由を正しく書かないと却下されます。
    承認は1日程度で承認されました。
    制限緩和はSES Dashboardから実施します。以下のような画像が表示されていたら制限がかかっています。

終わり

GitHubで編集を提案

Discussion

ログインするとコメントできます