GitBucketを導入してhttpd経由でアクセスするよう設定する

# GitBucketの導入について
Tomcatで動作するオープンソースのGitHubクローン。プライベートなGitHubが欲しいけどGitHubの有料サービスだと都合が悪いときによいのかも。個人的にはマネージドサービス好きじゃないし。
このGitBucketを導入し、httpd経由でアクセスするように設定する。Tomcatとか詳しくないし、慣れているhttpdの方が設定やりやすいので。

# 設定手順
## 前提条件
 - GitBucket 4.18.0
 - CentOS 7
 - Tomcat 7
 - httpd 2.4
 - インストール先サーバにはGitBucket以外のWebサービスも稼働させたい
 - 複数のホスト名を付け、GitBucketにはgit.yourhost.yourdomainというホスト名でアクセス出来るようにする
 - インストール先パスのgitbucketが自動的に補完されるようにする
 - HTTPSでもアクセスできるようにする
 - サーバ証明書はLet's Encryptでマルチドメイン証明書を作成して利用するがここは省略

## GitBucketのインストール
### Tomcatのインストール
GitBucketを動作させるためにTomcatをインストールする。

```
# yum install -y tomcat
# yum info tomcat
tomcat.noarch                         7.0.76-3.el7_4                   @updates
tomcat-el-2.2-api.noarch              7.0.76-3.el7_4                   @updates
tomcat-jsp-2.2-api.noarch             7.0.76-3.el7_4                   @updates
tomcat-lib.noarch                     7.0.76-3.el7_4                   @updates
tomcat-servlet-3.0-api.noarch         7.0.76-3.el7_4                   @updates
```

### GitBucketパッケージの入手
GitBucketの[GitHubリポジトリ](https://github.com/gitbucket/gitbucket/releases)で最新版のリリースを確認する。gitbucket.warをダウンロードするか、ダウンロードURLをコピーしておく。 

```
# yum install -y wget 

# cd /usr/local/src/
# wget https://github.com/gitbucket/gitbucket/releases/download/4.18.0/gitbucket.war
```

### GitBucketパッケージのデプロイ
Tomcatのwebapp dirにGitBucketのWARファイルをコピーする。

```
# cd /var/lib/tomcat/webapps/
# cp gitbucket.war /var/lib/tomcat/webapps/
```

Tomcatを起動するとWARは自動でデプロイされる。SELinuxは後でまとめて設定するためpermissiveモードにしておく。

```
# setenforce 0

# systemctl start tomcat
# systemctl enable tomcat
```

WebブラウザでGitBucketのURLにアクセスして動作確認する。インストール先ホスト名がgit.yourhost.yourdomainなら *http://git.yourhost.yourdomain:8080/gitbucket/* になる。
GitBucketのログインページが表示されれば成功。Firewalldなどでアクセス出来ない場合はこの動作確認だけアクセスが出来るように変更する。終わったらアクセス出来ないようにして問題ない。

### httpdとの連携
httpdをインストールする。HTTPSでアクセスできるようにmod_sslも追加する。

```
# yum install -y httpd mod_ssl
```

mod_proxy_ajpが存在することを確認する。

```
# cat /etc/httpd/conf.modules.d/00-proxy.conf
(snip)
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
(snip)
```

HTTP用の設定を記述する。

```
# vi /etc/httpd/conf.d/gitbucket.conf
```

```:/etc/httpd/conf.d/gitbucket.conf
NameVirtualHost *:80
<VirtualHost *:80>
  ServerName    git.yourhost.yourdomain
  Redirect      / /gitbucket/
  ProxyPass     /gitbucket/ ajp://localhost:8009/gitbucket/
  <Location />
    # アクセス制限とか
  </Location>
</VirtualHost>
```

```
# systemctl start httpd
# systemctl enable httpd
```

*http://git.yourhost.yourdomain* にWebブラウザでアクセスできることを確認する（gitbucket/ は自動的に補完される）。

必要に応じてSSLの設定をする。

```
# vi /etc/httpd/conf.d/ssl.conf
```

```:/etc/httpd/conf.d/ssl.conf
(snip)
NameVirtualHost *:443

<VirtualHost _default_:443>
(snip)
</VirtualHost>

<VirtualHost *:443>
  ServerName    git.yourhost.yourdomain
  Redirect      / /gitbucket/
  ProxyPass     /gitbucket/ ajp://localhost:8009/gitbucket/

  <Location />
    # アクセス制限とか
  </Location>

  SSLEngine on
  SSLCertificateFile            /path/to/certs/cert.pem
  SSLCertificateKeyFile         /path/to/certs/privkey.pem
  SSLCertificateChainFile       /path/to/certs/chain.pem
</VirtualHost>
```

### SELinuxへの対応
とりあえずSELinuxをEnforcingに戻す。

```
# setenforce 1
```

audit2allowコマンドを使ってSELinux用のルールを作成する。