現在、研究室では情報共有のツールとして、Google Groups、Google Sites、Google Drive、GItHub、Slackあたりを使っています。だいたい十分だと思っていたんですが、細かいけど残しておきたい知見を共有する手段がありませんでした。
そこで、Qiita的な何かがアレば良いなと思い、ローカルで動かせるQiitaクローンソフトウェアを探してみると、無料でOSSのものがいくつか見つかりました。それぞれを比較すると、こんな感じです。

名前 GitHub Star数 master(release)の最終コミット日 Commit数
Knowledge 296 5日前 1008
Lodge 455 163日前 435
ShareDocs 156 121日前 68
miita 108 1589日前 36

Lodgeが人気ですが、Knowledgeのほうがメンテナンスされており活発そうなので、こちらを採用することにします。

研究室のサーバーに構築しますが、Proxy環境下なので、ちょいちょい設定が必要です。プロキシ環境下でDockerがうまく使えないので、JavaやTomcatを入れて手動でインストールします。また、共有サーバなため、リバースプロキシの設定も必要です(ただしサブドメインが使えないのでディレクトリで)。なお、研究室の環境はCentOS7です。

基本的に、公式のマニュアルを見ながら進めていきます。
コマンドは全てroot権限で実行します。

Java 8 Install

OpenJDKのJava 8をインストールします。

# yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
# JAVA_HOME=$(echo $(readlink $(readlink $(which java))) | sed -e s/jre\\/bin\\/java//g)
# echo << EOS >> /etc/profile
export JAVA_HOME=$JAVA_HOME
export PATH=\$PATH:\$JAVA_HOME/bin
export CLASSPATH=.:\$JAVA_HOME/jre/lib:\$JAVA_HOME/lib:\$JAVA_HOME/lib/tools.jar
EOS

Tomcat Install

Tomcatをインストールします。

# yum install tomcat
# systemctl start tomcat
# systemctl enable tomcat

Knowledge Install

KnowledgeをGitHubのreleaseからダウンロードし、Tomcatのwebappsディレクトリに配置します。

# cd /usr/share/tomcat/webapps
# wget https://github.com/support-project/knowledge/releases/download/v1.10.0/knowledge.war

Knowledge setup

http://<hostname>/knowledge を開いて、admin:admin123 でSign inして、メニューの「システム設定」から色々弄ります。

Proxy

プロキシの設定をします。
環境変数のhttp_proxy, https_proxy, HTTP_PROXY, HTTPS_PROXYにも設定してありますが、Tomcatの設定も弄らなければ動きませんでした。

# diff /etc/tomcat/server.xml.orig /etc/tomcat/server.xml
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               connectionTimeout="20000"
-               redirectPort="8443">
+               redirectPort="8443"
+               proxyName="<host>" proxyPort="<port>" />

あと、Knowledgeの「システム設定 > Proxy設定」からもProxyの設定をしておきます。

SMTP

GmailのSMTPを設定し、メール送れるようにします。
Knowledgeの「システム設定 > メール送信設定」を開き、以下のように入力します。

  • SMTP ホスト名: smtp.gmail.com
  • SMTP ポート番号: 587 ※ 465だと動かなかった(Proxyのせい?)
  • 認証: 認証する
  • SMTP 認証用ID: SMTPに使うGmailのメールアドレス
  • SMTP 認証用パスワード: 上で指定したメールアドレスのパスワード
  • 送信元アドレス: 適当に
  • 送信者名: 適当に

Nginx リバースプロキシ + SSL

まず、Certbot(Let’s Encrypt)の設定とインストールをします (Certbot#centosrshel7-nginx)。

# yum -y install yum-utils
# yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
# yum -y install certbot-nginx

# certbot --nginx certonly

/etc/nginx/nginx.conf を下のように変更し、SSLとリバースプロキシの設定をします。
別ファイルで設定をしたかったんですが、ディレクトリによるリバースプロキシの場合うまく動かなかったので、ルートの設定に書いてしまいます。

# diff /etc/nginx/nginx.conf.old /etc/nginx/nginx.conf

+         location /knowledge/ {
+             return 301 https://$host$request_uri;
+         }
      }

      # Settings for a TLS enabled server.

+     server {
+         listen       443 ssl http2 default_server;
+         listen       [::]:443 ssl http2 default_server;
+         server_name  _;
+         root         /usr/share/nginx/html;
+
+         ssl_certificate "/etc/letsencrypt/live/<hostname>/fullchain.pem";
+         ssl_certificate_key "/etc/letsencrypt/live/<hostname>/privkey.pem";
+         ssl_session_cache shared:SSL:1m;
+         ssl_session_timeout  10m;
+         ssl_ciphers HIGH:!aNULL:!MD5;
+         ssl_prefer_server_ciphers on;
+ 
+         proxy_set_header    Host    $host;
+         proxy_set_header    X-Real-IP    $remote_addr;
+         proxy_set_header    X-Forwarded-Host       $host;
+         proxy_set_header    X-Forwarded-Server    $host;
+         proxy_set_header    X-Forwarded-For    $proxy_add_x_forwarded_for;
+ 
+         # Load configuration files for the default server block.
+         include /etc/nginx/default.d/*.conf;
+ 
+         location / {
+         }
+ 
+         error_page 404 /404.html;
+         location = /40x.html {
+         }
+ 
+         error_page 500 502 503 504 /50x.html;
+         location = /50x.html {
+         }
+ 
+         location /knowledge/ {
+             rewrite    /knowledge/(.*) /$1 break;
+             proxy_pass    http://127.0.0.1:8080/knowledge/$1;
+         }
+     }
  }

おわり

これでだいたいなんとなく動きました。

To Do

  • PostgreSQL使う(本格稼働してからでいいかなと思っています)
  • Slackと連携する(なんか転がってるといいなぁ…)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください