ラズパイ3でqiitaライクなknowledgeをtomcat8で動かす


### 概要
普段、自分は自宅にRaspberry Pi 3にApache2をapt-getでインストールしてホストしてますが、普段qiitaにあまり投稿してなくても結構、問題をSolveするのに使わせてもらっていて、自分もそんなサービスをホストできたらいいなって思って導入してみました。
今回はRaspberry Pi 3で構築してるのは、knowledgeのサーバ要件がtomcat8以上、Java8だったためです。おそらく、Raspverry Pi 2にそれぞれtomcat8、Java8をインストールしてやってみてもできるとは思いますが面倒だったのでやってません。
誰かやってみてください。
**あと、knowledgeを動かすと書いてありますが、BitBucketも動きます**


### Java8のインストール
自分が試した時点ではJava8はインストールされていなかったので、wgetでもってきて適当なところに置いてあげます。
ひとつもってくるときに難があり、オラクルのダウンロードリンクをどこからか持ってきてwgetしてもダウンロードできません。
理由は実際にダウンロードすれば分かるようにライセンスにAgreementしないといけないためです。つまり、いろいろwgetでインストールするよりもSCPしてやったらいいです。
SCPについては、ネットでググってください。
以下のサイトからjava8のLinux ARM 32 Hard Float ABIをダウンロードします。


```
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
```

SCPでファイルを転送したディレクトリに移動して

```
$ sudo tar zxvf jdk-8u91-linux-arm32-vfp-htlt.tar.gz -C /opt
```

今回は/opt以下に展開します。
次に、Javaのバージョン管理をするaleternativeを使用してデフォルトで使用しているバージョンを変更します。

```
$ sudo update-alternatives --config java
```

選択肢に番号が表示されているので、今回インストールしたパスを番号で指定してください。
指定できたらjava -versionで

```
java version "1.8.0_91"
```

と表示されれば正しく変更されています。

また、もう一つの方法としてapt-getでインストールする方法があります。
インストールできるjavaは以下のコマンドで確認できます。

```
$ pi@raspberrypi:~$ sudo apt-cache search java8
oracle-java8-jdk - Java™ Platform, Standard Edition 8 Development Kit
```

と検索結果が表示され、このjava8を

```
$ sudo apt-get install oracle-java8-jdk
```

でインストールしてから設定しても構いません。


### tomcat8のインストール
どこからかバイナリデータを持ってきて、ビルドしてもいいのですが、今回はapt-getでインストールします。

```
$ sudo apt-get install tomcat8 tomcat8-admin tomcat8-common tomcat8-docs tomcat8-examples tomcat8-user
```

もしインストールできない場合は

```
$ sudo apt-get update
```

して再度実行してください。

### tomcat8まわりの諸設定
#### CATALINA_HOMEとJDK_HOMEの設定
まず、tomcat8で使われているCATALINAというサーブレットコンテナのホームフォルダを指定してやる必要があります。あと、サーブレットコンテナが参照するJDK_HOMEも設定してやります。その設定は```/etc/profile``` に以下を追加します。
デフォルトのままインストールしているのであれば、CATALINA_HOMEのパスは以下のようになるはずです。

```
JDK_HOME=/usr/java/default
CATALINA_HOME=/etc/tomcat8/
export JDK_HOME CATALINA_HOME
```

#### ルートフォルダの所有者の変更
tomcat8を正常に起動させるためには、フォルダの所有者をtomcat8に変更する必要があります。
デフォルトであれば以下のように指定します。

```
$ sudo chown -R tomcat8:tomcat8 /etc/tomat8/
```

これで```/etc/tomcat8```以下の所有者はtomcat8になります。

#### tomcat8のマネージャーの設定
tomcat8には標準でアプリケーションマネージャーが存在します。そのアプリケーションマネージャーを使用するには初めにロールの設定をする必要があるので、以下のファイルを編集します。

```
$ sudo nano /etc/tomcat8/tomcat-users.xml
```

の```<tomcat-users>```に
ユーザ名：tomcat
パスワード：password
と設定するとき、

```
<tomcat-users>
   ....
   ....
   <role rolename="manager-gui"/>
   <user username="admin" password="password" roles="manager-gui"/>
   ....
   ....
</tomcat-users>
```

と設定します。

#### tomcat8をインストールしたときに作られるユーザーのホームディレクトリの変更
実はtomcat8をインストールした際に専用のユーザーが作られますが、なぜかホームディレクトリが/rootになっていたのでこれを適当なtomcat8が所有するフォルダに変更します。

```
$ sudo mkdir /home/tomcat8/
$ sudo useradd -d /home/tomcat8/ tomcat8
```

あとはtomcat8で動かすアプリケーションのHOMEを```/home/tomcat8/```以下にアプリケーション名のフォルダを作り、```/etc/profile```に

```
[アプリケーション名]_HOME=[/home/tomcat8/[アプリケーション名]]
```
と設定します。

以上で全ての基本的な設定は終わったので、```/etc/profile/```を反映させるために再起動します。

```
$ sudo service reboot
```

して
アプリケーションマネージャーにアクセスするなら、```[自分のアドレス]:8080/manager/```で先ほど設定したユーザ名とパスワードを入力する
配備したアプリケーションにアクセスするなら、```[自分のアドレス]:8080/[アプリケーション名]/```にアクセスすれば動くはずです。

構築した感じとしては、違うサーバからajpで接続して同一のアドレスで運用するのがいいのかもしれません。いちいち```:8080/```をつけるのか面倒なので