QNAP上でリバースプロキシ経由でGitbucketを使う

すでに忘れかけているのだけど

QNAP内でTomcatを動かしてGitBucketを立てて、apacheのリバースプロキシを利用して80ポートからアクセスしましょう、というお話。

ステップとしては、
1. GitBucketのインストール
2. apacheのインストール
3. リバースプロキシの設定

の、通常のWebサーバーと同じです。



1. GitBucketのインストール
==================
GitBucketは、Tomcat等のサーブレット環境（実はよくわかってない）で該当するディレクトリにwarファイルを置いておけばOKらしいので、QNAP上では単純にTomcatを動かせばいいんだろうな。
ということで、AppCenterからTomcatとJRE_ARMをインストールします。

* GitBucket.warを配置  

```
cd /share/MD0_DATA/.qpkg/Tomcat/tomcat/webapps
wget https://github.com/takezoe/gitbucket/releases/download/3.4/gitbucket.war
```

これで`http://<ホスト名>:7080/gitbucket`にアクセスして、GitBucketのトップページが表示されればOK

2. apacheのインストール
=================
QNAPには標準でWebサーバー機能が付いているわけですが、これがかなり曲者で

* QNAP再起動すると設定が初期化
* httpdを再起動すると初期化

なんてことを繰り返します。
色々試行錯誤してる人はいますが、自分の環境ではまったくもってうまくいかない。
そこで、アプローチを少し変更してOptwareのパッケージにapacheないかなー。
と、探したのがことの発端。

```
ipkg list apache
apache - 2.2.20-1 - The most popular web server on the internet
Successfully terminated.
```
といった感じで、apacheがあるのを確認できたので

```
ipkg install apache
```
で、すんなりインストール完了。

Optwareでインストールされたapacheは
`/opt/etc/apache2`ディレクトリの中に、諸々の設定ファイルが入っている。

apacheを起動させる場合は
`/opt/sbin/apachectl -k start`
とする。

起動時にいくつかエラーメッセージが出る場合は、httpd.confの設定を書き換える。

今回、出たエラーは確か二つ

* 起動USERがない
* ServerNameが設定されていない

の二つだった気がする

USERを作成する
--------------
USERがないと言われた場合は起動ユーザーを作成する。
httpd.confの「USER」にはデフォルトでnobodyが指定されているので、nobodyユーザーを作成するか
他に既にユーザーが作成されていて、そのユーザーを兼務させる場合はnobodyを書き換えればいい。

#### 〇 nobodyユーザーを作成
ユーザーの作成はQTSの中から作成する。useraddコマンドで作成することも可能かと思いますが、自分は試していないので今回は割愛。
作成はコントロールパネルの「Privilege Settings」→「Users」から「Create a User」を選択してダイアログを表示。
![user_create.jpg](https://qiita-image-store.s3.amazonaws.com/0/59288/d9c88308-8a76-ae9f-60b4-6845d172f74e.jpeg)

表示したダイアログ上から

|||
|:---:|:---:|
|UserName|nobody|
|password|<任意>|
|User Group|administrators,everyones|

といった感じで、nobodyユーザを作成する。

ServerNameを設定
------------------
#### 〇ポートの指定
Optwareのapacheは、デフォルトで8000ポートでリクエストを受け付けるようになっているみたいです。
これを80ポートに変更する場合は、httpd.confのLISTENパラメータ（41行目付近）を変更する必要があります。

|変更前|変更後|
|:---:|:---:|
|LISTEN 8000|LISTEN 80|

ただし、デフォルトでは80ポートはQNAPのWebサーバーが利用しているので、衝突するためQNAP側のWebサーバーは停止しておきます。
![web.jpg](https://qiita-image-store.s3.amazonaws.com/0/59288/abf1f75b-25a6-79c0-bbdc-598a6eecac21.jpeg)

#### 〇 ServerNameの設定
httpd.confの該当する箇所（163行目付近）にServerNameがコメントアウトされているので、ここを対象とするServerNameに変更した上で、コメント文字を削除する。

myqnapcloudを使っている人であれば
`ServerName <myQNAPcloud Device Name>.myqnapcloud.com:80`
と、なります。
`<myQNAPcloud Device Name>`の部分は、各自が設定している値を入力すればいいです。
`~~:80`のポート指定部分は、**〇ポートの指定**でLISTENに与えているポート番号を指定します。




この状態で
`lsof -i:80`で、ちゃんとhttpdの設定どおりにwww(80)がLISTENになっていれば正しく起動できている。

```lang:lsof_Sample
[/opt/sbin] # lsof -i:80
COMMAND  PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
httpd    554 ******    3u  IPv6 7851114      0t0  TCP *:www (LISTEN)
httpd   2607 ******    3u  IPv6 7851114      0t0  TCP *:www (LISTEN)
```
※USERのところはhttpdを立ち上げたUSER名が出てればOK


3. リバースプロキシの設定
==================
`http://<ホスト名>:80/gitbucket`で来たリクエストを、`http://<ホスト名>:7080/gitbucket`へ転送するようにする。
apacheとtomcatは同じQNAP内で動いているので

```lang:リバプロ
ProxyPass /gitbucket http://127.0.0.1:7080/gitbucket
ProxyPassReverse /gitbucket http://127.0.0.1:7080/gitbucket
```
として`/etc/sbin/apachectl -k restart`でapacheを再起動する。


以上


補足
-----------
特に何もしなければシステム再起動時にipkg-apacheは起動しない。
さらに、80番ポートはQthttpdが占有するので、ipkg-apacheを動かすにはQthttpdを止めないといけない。そのため、以下の手順を踏む必要がある。

```lang:ipkg-apache起動
/etc/init.d/Qthttpd stop
/opt/sbin/apachectl -k start
```