GitbucketをUbuntu20.04 + Apache + Tomcat9環境で稼働させる

Gitbucketの環境をapacheのSSL経由で使いたかったので、構築してみたもののハマったので忘備録

##1.環境

```bash
$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.2 LTS"
```
##2.前提条件
Apache2はインストール済みの状態(ややこしいことは考えずaptで)
JDKもインストール済みの状態
ApacheとJDKのバージョンは下記の通り

```bash
$ apache2 -v
Server version: Apache/2.4.41 (Ubuntu)
Server built:   2022-01-05T14:49:56
$ java -version
openjdk version "11.0.13" 2021-10-19
OpenJDK Runtime Environment (build 11.0.13+8-Ubuntu-0ubuntu1.20.04)
OpenJDK 64-Bit Server VM (build 11.0.13+8-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)
```
##3.Tomcat9のインストール
aptでインストール

```bash
$ sudo apt install tomcat9
```
##4.Tomcatを止めておく
設定変更やらいろいろやるので、いったん止める

```bash
sudo systemctl stop tomcat9
```

##5.ユーザーtomcatのホームディレクトリ変更
インストールと同時にユーザーtomcatが作成されているがホームディレクトリがルートディレクトリになっているので変更する。
ホームディレクトリを用意し、所有者変更&ホームディレクトリの変更
これ忘れると、Gitbucketが動かない。
ちなみに/home/tomcat以外に設定したら動かなかった。

```bash
$ sudo mkdir /home/tomcat
$ sudo chown tomcat:tomcat /home/tomcat
$ sudo usermod -d /home/tomcat tomcat
```

##6.Tomcat9のロールとかの設定
/etc/tomcat9/tomcat-users.xmlを編集する
tomcatのWebマネージャ？使えるようにする設定だと思う
<role～と書かれているところを探して下記のように編集する。
初期状態だとrole1とかあるけど要らないところは消してしまう。

```xml:/etc/tomcat9/tomcat-users.xml
<role rolename="tomcat"/>
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="password" roles="tomcat,manager-gui,admin-gui"/>
```

##7.Tomcat9のサーバー設定
デフォルトだと8080番ポートで稼働する設定になっているが、さすがにいろいろと被るので変えておくのと、ApacheとAJPでやり取りするための設定を入れておく。
我が家では、port=8080をport=9001に変更した。
AJPのところは、port=8009じゃないと動作しない(ウチだけ？教えて詳しい人)

```xml:/etc/tomcat9/server.xml
<Connector port="9001" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           maxPostSize="209715200" />
<!-- 以下は追加するかコメントアウトされている部分を編集 -->
<Connector protocol="AJP/1.3"
            port="8009"
            secretRequired="false"
            redirectPort="8443" />
```

##8.アップロード上限設定を変更
初期値のままだとWebマネージャからGitbucketのWARファイルを配置できないので、上限を変更する。
Gitbucket以外でTomcatのお世話になったことがないので勢いで10倍に変更。

```xml:/usr/share/tomcat9-admin/manager/WEB-INF/web.xml
<multipart-config>
      <!-- 500MB max -->
      <max-file-size>524288000</max-file-size>
      <max-request-size>524288000</max-request-size>
      <file-size-threshold>0</file-size-threshold>
</multipart-config>
```

##9.Tomcatの起動
Tomcatの設定はここまでで完了したので、止めてたサービスを起動する

```bash
$ sudo systemctl start tomcat9
```

http://サーバー名:9001/にアクセスし(ポートは読み替えてね)下の画面が出れば大丈夫のはず。![tomcat_test.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673723/63630da0-d8da-1c15-da38-4c4c1c1ed072.png)


##10.Gitbucketのインストール
下記からgitbucket.warをダウンロードする。
執筆時点で使ったのは4.37.2
[Gitbucketダウンロードページ](https://github.com/gitbucket/gitbucket/releases)

http://サーバー名:9001/managerにアクセスし、設定したロールのユーザーでログイン
下の画面でダウンロードしたgitbucket.warを配備(①)して起動(②)。
![tomcat_webman.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/673723/ae9f508d-3cae-b2f1-554c-02bfa6c71936.png)
うまく起動できないときは、ホームディレクトリの変更ができていないと思われる。


##10.Apacheの設定
ここはあまり詳しくわからない&人それぞれかと思うので最低限の説明のみです。
今回はAJPで通信するのでモジュールを設定しておく

```bash
$ a2enmod proxy proxy_ajp
```

適用したいサイトの設定に下記を追加

```apache
<Location /gitbucket/>
    ProxyPass ajp://localhost:8009/gitbucket/
    ProxyPassReverse ajp://localhost:8009/gitbucket/
</Location>
```
Apacheの起動or再起動

```bash
$ sudo systemctl restart apache2
```

http://サーバー名/gitbucket/でサイトが表示されるはず。
最後の/つけないとちゃんと出てこないのはなぜだか不明。

以上です。